sequoia-git-0.4.0/.cargo_vcs_info.json0000644000000001360000000000100132640ustar { "git": { "sha1": "0b0970ef1f493679634d099aa82be5fea921e5d1" }, "path_in_vcs": "" }sequoia-git-0.4.0/.ci/all_commits.sh000075500000000000000000000022711046102023000153710ustar 00000000000000#!/usr/bin/env bash # Test all commits on this branch but the last one. # # Used in the all_commits ci job to ensure all commits build # and tests pass at least for the sequoia-openpgp crate. # NOTE: under gitlab's Settings, "CI/CD", General Pipelines ensure # that the "git shallow clone" setting is set to 0. Otherwise other # branch are not fetched. set -e set -x # Use dummy identity to make git rebase happy. git config user.name "C.I. McTestface" git config user.email "ci.mctestface@example.com" # Make sure the gitlab project is configured. if ! git describe --all origin/main then echo "origin/main is not present. Configure the gitlab project (see .ci/all_commits.sh)." exit 1 fi # If the previous commit already is on main we're done. git merge-base --is-ancestor HEAD~ origin/main && echo "All commits tested already" && exit 0 # Leave out the last commit - it has already been checked. git checkout HEAD~ git status git rebase origin/main \ --exec 'echo ===; echo ===; echo ===; git log -n 1;' \ --exec 'cargo test --all' && echo "All commits passed tests" && exit 0 # The rebase failed - probably because a test failed. git rebase --abort; exit 1 sequoia-git-0.4.0/.gitignore000064400000000000000000000002341046102023000140430ustar 00000000000000/target *~ spec/.refcache spec/metadata.min.js .dir-locals-2.el spec/draft-sequoia-git.* book/book book/examples/gpg book/examples/frob book/examples/intro sequoia-git-0.4.0/.gitlab-ci.yml000064400000000000000000000066421046102023000145200ustar 00000000000000stages: - pre-check - build - test - deploy include: - component: "gitlab.com/sequoia-pgp/common-ci/sequoia-pipeline@main" variables: SEQUOIA_CRYPTO_POLICY: "" NO_SEQUOIA_CRYPTO: true RUN_WINDOWS: false docker-build-push: # Official docker image. image: docker:stable stage: build services: - name: docker:dind command: ["--insecure-registry", "jampot.sequoia-pgp.org"] tags: - docker - self-hosted before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY script: - > docker build --no-cache -f Containerfile --tag "$IMAGE:$CI_COMMIT_SHA" . # smoke test - docker run --volume $PWD:/workspace --workdir /workspace "$IMAGE:$CI_COMMIT_SHA" sq-git policy describe - docker run -e CI_DEFAULT_BRANCH=$CI_DEFAULT_BRANCH --volume $PWD:/workspace --workdir /workspace $IMAGE:$CI_COMMIT_SHA /usr/sbin/gitlab.sh - docker tag $IMAGE:$CI_COMMIT_SHA $IMAGE:$CI_COMMIT_REF_SLUG - docker push $IMAGE:$CI_COMMIT_SHA - docker push $IMAGE:$CI_COMMIT_REF_SLUG - | if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ] then docker pull $IMAGE:$CI_COMMIT_SHA docker tag $IMAGE:$CI_COMMIT_SHA $IMAGE:latest docker tag $IMAGE:$CI_COMMIT_SHA $IMAGE:$CI_COMMIT_REF_SLUG docker push $IMAGE:$CI_COMMIT_REF_SLUG docker push $IMAGE:latest fi after_script: [] only: refs: - /docker/i # refs containing 'docker' keyword - tags - web - schedules - branches variables: CI_REGISTRY: "registry.gitlab.com" IMAGE: "$CI_REGISTRY/$CI_PROJECT_PATH" DOCKER_HOST: tcp://docker:2376 pages: stage: build image: jampot.sequoia-pgp.org/sequoia-pgp/build-docker-image/trixie-pandoc:latest before_script: - sed -i '/Components:/ s/$/ non-free/' /etc/apt/sources.list.d/debian.sources # xml2rfc is non-free - apt update -y -qq && apt install -y -qq --no-install-recommends weasyprint xml2rfc ruby-kramdown-rfc2629 - if [ -d target ]; then find target | wc --lines; du -sh target; fi - if [ -d cargo ]; then find cargo | wc --lines; du -sh cargo; fi - rustc --version - cargo --version script: - mkdir public # Template - cp -r webpage/* public # API documentation. - ASSET_OUT_DIR=/tmp/assets cargo doc --no-deps - mv target/doc public/api - echo "/sequoia-git/api /sequoia-git/sequoia_git/api/index.html 302" > public/_redirects # Man pages. - /tmp/assets/man-pages/man2html.sh --generate - mkdir public/man - mv -v $(for f in $(/tmp/assets/man-pages/man2html.sh --html-files); do echo /tmp/assets/man-pages/$f; done) public/man - echo "/sequoia-git/man /sequoia-git/man/$(/tmp/assets/man-pages/man2html.sh --html-root) 302" >> public/_redirects # Specification - make -Cspec draft-sequoia-git.html - mkdir public/specification - cp spec/draft-sequoia-git.html public/specification/index.html # The user manual. - mkdir root - cargo install --config opt-level=1 mdbook --root root - find root - root/bin/mdbook build book --dest-dir $(pwd)/public/user-manual artifacts: paths: - public pages: false pages-deploy: stage: deploy image: jampot.sequoia-pgp.org/sequoia-pgp/build-docker-image/trixie-pandoc:latest script: echo "publishing" artifacts: paths: - public pages: true rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' sequoia-git-0.4.0/Cargo.lock0000644000002461730000000000100112540ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "addr2line" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] name = "adler2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anstream" version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "argon2" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" dependencies = [ "base64ct", "blake2", "cpufeatures", "password-hash", ] [[package]] name = "ascii-canvas" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" dependencies = [ "term", ] [[package]] name = "async-trait" version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", ] [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bindgen" version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", "syn", ] [[package]] name = "bit-set" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "blake2" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ "digest", ] [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "buffered-reader" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db26bf1f092fd5e05b5ab3be2f290915aeb6f3f20c4e9f86ce0f07f336c2412f" dependencies = [ "bzip2", "flate2", "libc", ] [[package]] name = "bumpalo" version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" dependencies = [ "bzip2-sys", ] [[package]] name = "bzip2-sys" version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", "pkg-config", ] [[package]] name = "cc" version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", "shlex", ] [[package]] name = "cexpr" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ "nom", ] [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-link", ] [[package]] name = "clang-sys" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", "libloading", ] [[package]] name = "clap" version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", ] [[package]] name = "clap_builder" version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", "terminal_size", ] [[package]] name = "clap_complete" version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5c5508ea23c5366f77e53f5a0070e5a84e51687ec3ef9e0464c86dc8d13ce98" dependencies = [ "clap", ] [[package]] name = "clap_derive" version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", "syn", ] [[package]] name = "clap_lex" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clap_mangen" version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "724842fa9b144f9b89b3f3d371a89f3455eea660361d13a554f68f8ae5d6c13a" dependencies = [ "clap", "roff", ] [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "core-foundation" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", "crossbeam-queue", "crossbeam-utils", ] [[package]] name = "crossbeam-channel" version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", ] [[package]] name = "data-encoding" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "deranged" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", "subtle", ] [[package]] name = "directories" version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ "dirs-sys 0.4.1", ] [[package]] name = "dirs" version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ "dirs-sys 0.4.1", ] [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys 0.5.0", ] [[package]] name = "dirs-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ "cfg-if", "dirs-sys-next", ] [[package]] name = "dirs-sys" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", "redox_users 0.4.6", "windows-sys 0.48.0", ] [[package]] name = "dirs-sys" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users 0.5.0", "windows-sys 0.59.0", ] [[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users 0.4.6", "winapi", ] [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "dyn-clone" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "either" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" [[package]] name = "ena" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ "log", ] [[package]] name = "encoding_rs" version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "endian-type" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-as-inner" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ "heck", "proc-macro2", "quote", "syn", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", "windows-sys 0.59.0", ] [[package]] name = "fallible-iterator" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fallible-streaming-iterator" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", "rustix", "windows-sys 0.52.0", ] [[package]] name = "fixedbitset" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures-channel" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "futures-sink" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "gethostname" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" dependencies = [ "rustix", "windows-targets 0.52.6", ] [[package]] name = "getrandom" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", "libc", "wasi 0.13.3+wasi-0.2.2", "windows-targets 0.52.6", ] [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git2" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ "bitflags", "libc", "libgit2-sys", "log", "url", ] [[package]] name = "glob" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "h2" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", "http", "indexmap", "slab", "tokio", "tokio-util", "tracing", ] [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", ] [[package]] name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hashlink" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown 0.14.5", ] [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hickory-client" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "156579a5cd8d1fc6f0df87cc21b6ee870db978a163a1ba484acd98a4eff5a6de" dependencies = [ "cfg-if", "data-encoding", "futures-channel", "futures-util", "hickory-proto", "once_cell", "radix_trie", "rand", "thiserror 1.0.69", "tokio", "tracing", ] [[package]] name = "hickory-proto" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" dependencies = [ "async-trait", "cfg-if", "data-encoding", "enum-as-inner", "futures-channel", "futures-io", "futures-util", "idna", "ipnet", "once_cell", "openssl", "rand", "thiserror 1.0.69", "tinyvec", "tokio", "tracing", "url", ] [[package]] name = "hickory-resolver" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" dependencies = [ "cfg-if", "futures-util", "hickory-proto", "ipconfig", "lru-cache", "once_cell", "parking_lot", "rand", "resolv-conf", "smallvec", "thiserror 1.0.69", "tokio", "tracing", ] [[package]] name = "hostname" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ "libc", "match_cfg", "winapi", ] [[package]] name = "http" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", "itoa", ] [[package]] name = "http-body" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", ] [[package]] name = "http-body-util" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", "http", "http-body", "pin-project-lite", ] [[package]] name = "httparse" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "hyper" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", "smallvec", "tokio", "want", ] [[package]] name = "hyper-rustls" version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", "hyper-util", "rustls", "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", ] [[package]] name = "hyper-tls" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", "hyper", "hyper-util", "native-tls", "tokio", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", "http", "http-body", "hyper", "pin-project-lite", "socket2", "tokio", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", "windows-core", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "icu_collections" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ "displaydoc", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locid" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_locid_transform" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ "displaydoc", "icu_locid", "icu_locid_transform_data", "icu_provider", "tinystr", "zerovec", ] [[package]] name = "icu_locid_transform_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] name = "icu_normalizer" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "utf16_iter", "utf8_iter", "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] name = "icu_properties" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ "displaydoc", "icu_collections", "icu_locid_transform", "icu_properties_data", "icu_provider", "tinystr", "zerovec", ] [[package]] name = "icu_properties_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] name = "icu_provider" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ "displaydoc", "icu_locid", "icu_provider_macros", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_provider_macros" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "idna" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "indexmap" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", ] [[package]] name = "ipconfig" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ "socket2", "widestring", "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] [[package]] name = "itertools" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "lalrpop" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" dependencies = [ "ascii-canvas", "bit-set", "ena", "itertools 0.11.0", "lalrpop-util", "petgraph", "regex", "regex-syntax", "string_cache", "term", "tiny-keccak", "unicode-xid", "walkdir", ] [[package]] name = "lalrpop-util" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ "regex-automata", ] [[package]] name = "libc" version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libgit2-sys" version = "0.17.0+1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" dependencies = [ "cc", "libc", "libz-sys", "pkg-config", ] [[package]] name = "libloading" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", ] [[package]] name = "libredox" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags", "libc", ] [[package]] name = "libsqlite3-sys" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ "cc", "pkg-config", "vcpkg", ] [[package]] name = "libz-sys" version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "log" version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "lru-cache" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ "linked-hash-map", ] [[package]] name = "match_cfg" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memsec" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c797b9d6bb23aab2fc369c65f871be49214f5c759af65bde26ffaaa2b646b492" [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] [[package]] name = "mio" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] [[package]] name = "native-tls" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ "libc", "log", "openssl", "openssl-probe", "openssl-sys", "schannel", "security-framework", "security-framework-sys", "tempfile", ] [[package]] name = "nettle" version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44e6ff4a94e5d34a1fd5abbd39418074646e2fa51b257198701330f22fcd6936" dependencies = [ "getrandom 0.2.15", "libc", "nettle-sys", "thiserror 1.0.69", "typenum", ] [[package]] name = "nettle-sys" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61a3f5406064d310d59b1a219d3c5c9a49caf4047b6496032e3f930876488c34" dependencies = [ "bindgen", "cc", "libc", "pkg-config", "tempfile", "vcpkg", ] [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nibble_vec" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" dependencies = [ "smallvec", ] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ "hermit-abi", "libc", ] [[package]] name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] [[package]] name = "object" version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "openpgp-cert-d" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd47b0b6df1022ca8a9a06791261c3153028abef191fe53aa326b7f443f2d6" dependencies = [ "anyhow", "dirs 6.0.0", "fd-lock", "libc", "sha1collisiondetection", "sha2", "tempfile", "thiserror 2.0.11", "walkdir", ] [[package]] name = "openssl" version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", "openssl-macros", "openssl-sys", ] [[package]] name = "openssl-macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "openssl-probe" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "parking_lot" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-targets 0.52.6", ] [[package]] name = "password-hash" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", "rand_core", "subtle", ] [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap", ] [[package]] name = "phf_shared" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ "zerocopy", ] [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro2" version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] [[package]] name = "radix_trie" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" dependencies = [ "endian-type", "nibble_vec", ] [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.15", ] [[package]] name = "rayon" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "redox_syscall" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags", ] [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] [[package]] name = "redox_users" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ "getrandom 0.2.15", "libredox", "thiserror 2.0.11", ] [[package]] name = "regex" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "windows-registry", ] [[package]] name = "resolv-conf" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", "quick-error", ] [[package]] name = "ring" version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "roff" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" [[package]] name = "rusqlite" version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ "bitflags", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", "smallvec", ] [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", "windows-sys 0.59.0", ] [[package]] name = "rustls" version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "once_cell", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] [[package]] name = "rustls-pemfile" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ "rustls-pki-types", ] [[package]] name = "rustls-pki-types" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "schannel" version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags", "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "sequoia-cert-store" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc8987ed37e9931aee509c7ebc10e93b2ee5862849546c8a0c4588f3ed670b74" dependencies = [ "anyhow", "crossbeam", "dirs 5.0.1", "gethostname", "num_cpus", "openpgp-cert-d", "rayon", "rusqlite", "sequoia-openpgp", "smallvec", "thiserror 2.0.11", "url", ] [[package]] name = "sequoia-directories" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b01dd48960c5cf8617ab77e5c9f8ebeb55a1d694e3eabf830fa70453ffa637d5" dependencies = [ "anyhow", "directories", "same-file", "tempfile", "thiserror 1.0.69", ] [[package]] name = "sequoia-git" version = "0.4.0" dependencies = [ "anyhow", "buffered-reader", "chrono", "clap", "clap_complete", "clap_mangen", "dirs 5.0.1", "git2", "once_cell", "roff", "sequoia-cert-store", "sequoia-directories", "sequoia-man", "sequoia-net", "sequoia-openpgp", "serde", "serde_json", "tempfile", "thiserror 1.0.69", "tokio", "toml", "vergen", ] [[package]] name = "sequoia-man" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0a9d99c0d8879eb0acc2f21908ea328b3370e429079d21a8a187b42161bc674" dependencies = [ "anyhow", "clap", "roff", ] [[package]] name = "sequoia-net" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "956ef5d37e41f53259cd3c6caac5f135351ee92f76f3ac6ee9cf771ee6e33925" dependencies = [ "anyhow", "base64", "futures-util", "hickory-client", "hickory-resolver", "http", "hyper", "hyper-tls", "libc", "percent-encoding", "reqwest", "sequoia-openpgp", "thiserror 1.0.69", "tokio", "url", "z-base-32", ] [[package]] name = "sequoia-openpgp" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "015e5fc3d023418b9db98ca9a7f3e90b305872eeafe5ca45c5c32b5eb335c1e8" dependencies = [ "anyhow", "argon2", "base64", "buffered-reader", "bzip2", "chrono", "dyn-clone", "flate2", "getrandom 0.2.15", "idna", "lalrpop", "lalrpop-util", "libc", "memsec", "nettle", "regex", "regex-syntax", "sha1collisiondetection", "thiserror 2.0.11", "xxhash-rust", ] [[package]] name = "serde" version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] [[package]] name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", "itoa", "ryu", "serde", ] [[package]] name = "sha1collisiondetection" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f606421e4a6012877e893c399822a4ed4b089164c5969424e1b9d1e66e6964b" dependencies = [ "digest", "generic-array", ] [[package]] name = "sha2" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "siphasher" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "socket2" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "string_cache" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" dependencies = [ "new_debug_unreachable", "parking_lot", "phf_shared", "precomputed-hash", ] [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] [[package]] name = "synstructure" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "system-configuration" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "tempfile" version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", ] [[package]] name = "term" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ "dirs-next", "rustversion", "winapi", ] [[package]] name = "terminal_size" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" dependencies = [ "rustix", "windows-sys 0.59.0", ] [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ "thiserror-impl 2.0.11", ] [[package]] name = "thiserror-impl" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "thiserror-impl" version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "time" version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", "libc", "num-conv", "num_threads", "powerfmt", "serde", "time-core", "time-macros", ] [[package]] name = "time-core" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] [[package]] name = "tiny-keccak" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ "crunchy", ] [[package]] name = "tinystr" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ "displaydoc", "zerovec", ] [[package]] name = "tinyvec" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tokio-native-tls" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", ] [[package]] name = "tokio-rustls" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", ] [[package]] name = "tokio-util" version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", ] [[package]] name = "toml" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", "toml_datetime", "toml_edit", ] [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", "winnow", ] [[package]] name = "tower" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", "sync_wrapper", "tokio", "tower-layer", "tower-service", ] [[package]] name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tracing-core" version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] [[package]] name = "utf16_iter" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" version = "8.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" dependencies = [ "anyhow", "cfg-if", "git2", "rustversion", "time", ] [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "want" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ "try-lock", ] [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" dependencies = [ "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "widestring" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-link" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" [[package]] name = "windows-registry" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", "windows-strings", "windows-targets 0.52.6", ] [[package]] name = "windows-result" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-strings" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ "windows-result", "windows-targets 0.52.6", ] [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets 0.48.5", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-targets" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm 0.48.5", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", "windows_x86_64_gnullvm 0.48.5", "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] [[package]] name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", "windows-sys 0.48.0", ] [[package]] name = "wit-bindgen-rt" version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ "bitflags", ] [[package]] name = "write16" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] name = "writeable" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "xxhash-rust" version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "z-base-32" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bf7b4a78668416e1e8a332334e26fb2f377afe707f0c6feaf6ed5f9100133b" [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zerofrom" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zerovec" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", "syn", ] sequoia-git-0.4.0/Cargo.toml0000644000000065670000000000100113000ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.79" name = "sequoia-git" version = "0.4.0" authors = [ "Neal H. Walfield ", "Justus Winter ", ] build = "build.rs" exclude = ["/webpage"] autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "A tool for managing and enforcing a commit signing policy." homepage = "https://sequoia-pgp.org/" documentation = "https://sequoia-pgp.gitlab.io/sequoia-git/" readme = "README.md" keywords = [ "cryptography", "openpgp", "pgp", "signing", "git", ] categories = [ "cryptography", "authentication", "command-line-utilities", "development-tools", ] license = "LGPL-2.0-or-later" repository = "https://gitlab.com/sequoia-pgp/sequoia-git" [lib] name = "sequoia_git" path = "src/lib.rs" [[bin]] name = "sq-git" path = "src/main.rs" [[test]] name = "basics" path = "tests/basics.rs" [[test]] name = "common" path = "tests/common.rs" [[test]] name = "diff" path = "tests/diff.rs" [[test]] name = "expired-cert" path = "tests/expired-cert.rs" [[test]] name = "export" path = "tests/export.rs" [[test]] name = "git-update-hook" path = "tests/git-update-hook.rs" [[test]] name = "keyring-update" path = "tests/keyring-update.rs" [[test]] name = "policy" path = "tests/policy.rs" [[test]] name = "policy-authorize" path = "tests/policy-authorize.rs" [[test]] name = "refs" path = "tests/refs.rs" [[test]] name = "revoked-cert" path = "tests/revoked-cert.rs" [dependencies.anyhow] version = "1" [dependencies.buffered-reader] version = "1.4" [dependencies.clap] version = "4.0" features = [ "cargo", "derive", "env", "string", "wrap_help", ] [dependencies.dirs] version = ">=5, <7" [dependencies.git2] version = "0.19" default-features = false [dependencies.once_cell] version = "1" [dependencies.sequoia-cert-store] version = "0.7" default-features = false [dependencies.sequoia-directories] version = "0.1" [dependencies.sequoia-net] version = "0.30" [dependencies.sequoia-openpgp] version = "2" [dependencies.serde] version = "1.0" features = ["derive"] [dependencies.serde_json] version = "1" [dependencies.tempfile] version = "3" [dependencies.thiserror] version = ">=1, <3" [dependencies.tokio] version = "1" features = ["full"] [dependencies.toml] version = "0.8" [dev-dependencies.chrono] version = "0.4" [build-dependencies.anyhow] version = "1" [build-dependencies.clap] version = "4.0" features = [ "cargo", "derive", "env", "string", "wrap_help", ] [build-dependencies.clap_complete] version = "4" [build-dependencies.clap_mangen] version = "0.2" [build-dependencies.dirs] version = ">=5, <7" [build-dependencies.roff] version = "0.2.1" [build-dependencies.sequoia-directories] version = "0.1" [build-dependencies.sequoia-man] version = "0.3" [build-dependencies.vergen] version = "8" features = [ "git", "git2", ] sequoia-git-0.4.0/Cargo.toml.orig000064400000000000000000000034701046102023000147470ustar 00000000000000[package] name = "sequoia-git" description = "A tool for managing and enforcing a commit signing policy." authors = [ "Neal H. Walfield ", "Justus Winter ", ] documentation = "https://sequoia-pgp.gitlab.io/sequoia-git/" homepage = "https://sequoia-pgp.org/" repository = "https://gitlab.com/sequoia-pgp/sequoia-git" readme = "README.md" keywords = ["cryptography", "openpgp", "pgp", "signing", "git"] categories = ["cryptography", "authentication", "command-line-utilities", "development-tools"] version = "0.4.0" license = "LGPL-2.0-or-later" edition = "2021" build = "build.rs" rust-version = "1.79" # Don't include the webpage in the published crate. exclude = [ "/webpage" ] [dependencies] anyhow = "1" buffered-reader = { version = "1.4" } clap = { version = "4.0", features = [ "cargo", "derive", "env", "string", "wrap_help" ] } dirs = { version = ">=5, <7" } # We don't actually use the network so disable https or ssh support, # which git2 enables by default. git2 = { version = "0.19", default-features = false } once_cell = "1" toml = "0.8" serde = { version = "1.0", features = ["derive"] } serde_json = "1" sequoia-directories = "0.1" sequoia-net = { version = "0.30" } sequoia-openpgp = { version = "2" } sequoia-cert-store = { version = "0.7", default-features = false } tempfile = "3" thiserror = { version = ">=1, <3" } tokio = { version = "1", features = ["full"] } [build-dependencies] anyhow = "1" clap = { version = "4.0", features = [ "cargo", "derive", "env", "string", "wrap_help" ] } clap_complete = "4" clap_mangen = "0.2" dirs = { version = ">=5, <7" } roff = "0.2.1" vergen = { version = "8", features = [ "git", "git2" ] } sequoia-directories = "0.1" sequoia-man = "0.3" [dev-dependencies] chrono = "0.4" [[bin]] name = "sq-git" path = "src/main.rs" sequoia-git-0.4.0/Containerfile000064400000000000000000000010711046102023000145600ustar 00000000000000ARG TAG=latest FROM jampot.sequoia-pgp.org/sequoia-pgp/build-docker-image/rust-stable:$TAG AS build COPY . /build WORKDIR /build RUN cargo install --path . FROM docker.io/debian:bookworm-slim COPY --from=build /usr/local/cargo/bin/sq-git /usr/bin/sq-git RUN apt update -y -qq && \ apt install -y -qq --no-install-recommends \ ca-certificates \ libsqlite3-0 \ libssl3 \ git && \ apt clean && \ rm -fr /var/lib/lists/* /var/cache/* /usr/share/doc/* /usr/share/locale/* COPY ./scripts/*.sh /usr/sbin/ CMD ["/usr/bin/sq-git", "--help"] sequoia-git-0.4.0/LICENSE.txt000064400000000000000000000627341046102023000137130ustar 00000000000000Sequoia-git is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Sequoia-git is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! sequoia-git-0.4.0/NEWS000064400000000000000000000052521046102023000125570ustar 00000000000000 -*- org -*- #+TITLE: sequoia-git NEWS – history of user-visible changes #+STARTUP: content hidestars * Changes in 0.4.0 ** New functionality This release adds support for RFC 9580. * Changes in 0.3.0 ** New functionality ** Notable fixes - `sq-git policy export` now requires either `--name` or `--all`. ** Notable changes - The help output has been improved. Like `sq`, the global options are only showed at the top-level. When showing a subcommand's usage, any examples are also shown. - The subcommand structure has been aligned with `sq`. In particular, the help subcommand has been disabled for non-top-level subcommands. - Change `--policy-file` from a global to a local argument that is only available for commands that actually use it. * Changes in 0.2.0 ** New functionality - New command `sq-git policy export` exports the certificates associated with an entity. - New command `sq-git policy diff` compares two policies. - New argument `sq-git policy describe --commit` describes the policy from an arbitrary commit. - Align the certificate store location handling with `sq`: - New argument `--home` specifies the Sequoia home directory. Alternatively, the `SEQUOIA_HOME` environment variable can be used. - Replace the `--no-cert-store` argument with `--cert-store none`. - Use `SEQUOIA_CERT_STORE` instead of the `SQ_CERT_STORE` environment variable to specify the certificate store's location. ** Notable fixes - When authenticating a commit, `sq-git log` uses the parent commit's policy to authenticate the new commit. If a certificate has expired, an entity has rotated their certificate's signing subkey, etc., then the certificate in the parent commit may no longer be able to verify new signatures. To prevent this situation, `sq-git` now updates certificates present in the parent commit's policy with non-revocation updates from the child commit. Note: only the certificates already present in the parent commit's policy are updated; certificates added to the child commit's policy are ignored. - Check that keyring updates are allowed according to the policy. - When using a policy from a file (e.g., with `--policy-file`) and the file did not exist, we would default to an empty policy instead of emitting an error. - The git key for the trust root has been renamed from `sequoia.trust-root` to `sequoia.trustRoot` to match `git`'s naming convention. ** Notable changes - Updated the list of keyservers that `sq-git policy sync` uses by default. sequoia-git-0.4.0/README.md000064400000000000000000000275731046102023000133510ustar 00000000000000# Sequoia `git` `sequoia-git` is tool that can be used to improve a project's supply chain security. Documentation is available from Sequoia git's [homepage](https://sequoia-pgp.gitlab.io/sequoia-git/). ## Introduction A version control system like git doesn't just track changes, it also provides a record of who made those changes. This information can be used to check that commits are authorized, which can improve software supply chain security. In particular, checking a change's provenance can be used to remove intermediaries like forges, and package registries from a user's trusted computing base. But, authorship information can easily be forged. An obvious solution to prevent forgeries would be to require that commits are digitally signed. But by itself a valid digital signature doesn't prevent forgeries. The certificate that was used to make the signature could claim to be one of the project's maintainers. What is needed is not only a list of entities who are allowed to modify the repository, but also the keys they use to sign the commits. In other words, to authenticate a commit we need a signing policy, which says what keys are authorized to make changes. Creating a policy isn't complicated. A project's maintainers could curate a list of entities who are allowed to add commits, and enumerate the certificates they use to sign them. The tricky part is applying the policy. There are a number of edge cases that need to be handled like how merge changes from external contributions, who is allowed to change the policy, and how to deal with compromised keys. Sequoia git is a project that specifies a set of semantics, defines a policy language, and provides a set of tools to manage a policy file, and authenticate commits. Using Sequoia git is relatively straightforward. You start by adding a policy file, `openpgp-policy.toml`, to your project's repository. The policy is maintained in band to allow it to evolve, just like the rest of the project. The `openpgp-policy.toml` file is basically a list of OpenPGP certificates and the type of changes they are authorized to make. `sq-git` can help you create it. Then, before you merge a pull request, you check that commits are authorized by the policy. Locally, this is done by running `sq-git log` on the range of commits that you want to push. A commit is considered authorized if the commit has a valid signature, and at least one immediate parent's policy allows the signer to make that type of change. Projects hosted on GitHub can use this action to automatically check that a pull request is authorized when it is opened, or updated. Downstream users can use Sequoia git to check that there is a chain of trust from an older, known-good version of the software to a new version. This helps prevent the use of versions that include modifications that weren't authorized by the project's maintainers. See [the specification] for an in-depth discussion of semantics and implementation. [the specification]: https://sequoia-pgp.gitlab.io/sequoia-git/specification/ ## Deploying `sq-git` To start using Sequoia git in a git repository, you first add one or more certificates to the project's policy, and grant them some rights. The policy is called `openpgp-policy.toml`, and is stored in the root of the repository. It is a [toml file](https://toml.io), which means it can be edited by hand, but `sq-git` provides tools that make it easier to examine and modify it. There are six different rights: `add-user`, `retire-user`, `audit`, `sign-tag`, `sign-archive`, and `sign-commit`. Only users who have the `add-user` right can add new users to the policy. Similarly, the `retire-user` right is needed to remove users from the policy. The `audit` right is needed to good list (using `sq-git policy goodlist`) a commit that was signed by a certificate that was subsequently hard revoked. The `sign-tag`, `sign-archive`, and `sign-commit` rights are needed to sign tags, archives, and commits, respectively. You can use `sq-git policy authorize` to grant a specific right to a user. For instance, you could run: ``` $ sq-git policy authorize --sign-commit 'Neal H. Walfield ' F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` This says that the specified certificate can be used to sign commits. The name is purely decorative. To make assigning rights easier, `sq-git policy authorize` knows about three roles: the project maintainer (who gets all rights), the release manager (who can sign tags, archives, and commits), and the committer (who can only sign commits). These can be passed to `sq-git policy authorized`. For instance: ``` $ sq-git policy authorize --project-maintainer 'Neal H. Walfield ' F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` `sq-git policy authorize` immediately expands the roles to the corresponding rights; the roles do not appear in the policy file. You can use the `sq-git init` subcommand to get a quick overview of who has contributed to the project, and what certificates they used to sign their commits, if any. `sq-git init` looks at commits from the last half year, or the last 10 commits, whichever is more. As such it focuses on contributors who have been active recently; it doesn't make sense to authorize someone has left the project. Although `sq-git init` usually provides a good starting point, you should not trust it. It is essential to verify a contributor's certificate by, e.g., reaching out to them, and asking what their certificate's fingerprint is. As you can always modify the policy later, it is better to only add the certificates that you are certain about, from contributors who are active. Here's how you might initialize a policy file: ```shell ../sequoia-git$ sq-git init # Examined the 136 commits in the last 183 days. # Stopped at commit 83ce12f617c9e1dd90f812825707337f8787f69e. # Encountered 0 unsigned commits # Neal H. Walfield added 66 commits (48%). # # After checking that they really control the following OpenPGP keys: # # 6863C9AD5B4D22D3 (66 commits) # # You can make them a project maintainer (someone who can add and # remove committers) by running: sq-git policy authorize --project-maintainer "Neal H. Walfield " 6863C9AD5B4D22D3 # Justus Winter added 44 commits (32%). # # After checking that they really control the following OpenPGP keys: # # 686F55B4AB2B3386 (44 commits) # # You can make them a committer by running: sq-git policy authorize --committer "Justus Winter " 686F55B4AB2B3386 ... ../sequoia-git$ sq-git policy authorize --project-maintainer "Neal H. Walfield " 6863C9AD5B4D22D3 - User "Neal H. Walfield " was added. - User "Neal H. Walfield " was granted the right sign-commit. - User "Neal H. Walfield " was granted the right sign-tag. - User "Neal H. Walfield " was granted the right sign-archive. - User "Neal H. Walfield " was granted the right add-user. - User "Neal H. Walfield " was granted the right retire-user. - User "Neal H. Walfield " was granted the right audit. ../sequoia-git$ sq-git policy authorize --committer "Justus Winter " 686F55B4AB2B3386 - User "Justus Winter " was added. - User "Justus Winter " was granted the right sign-commit. ``` `sq-git` reads the certificates from the user's certificate store. Use `sq import < FILE` to import certificates in a file, `sq keyserver get FINGERPRINT` to fetch certificates from a key server, etc. Alternatively, you can provide the certificate to `sq-git policy authorize` using the `--cert-file` argument. The policy file can be viewed as follows: ```shell $ sq-git policy describe # OpenPGP policy file for git, version 0 ## Commit Goodlist ## Authorizations 0. Justus Winter - may sign commits - has OpenPGP cert: D2F2C5D45BE9FDE6A4EE0AAF31855247603831FD 1. Neal H. Walfield - may sign commits - may sign tags - may sign archives - may add users - may retire users - may goodlist commits - has OpenPGP cert: F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` If you are happy, you can add it to your `git` repository in the usual manner. Don't forget to tell `git` to sign commits by adding something like the following to your repository's `.git/config` file: ```text [user] signingkey = F7173B3C7C685CD9ECC4191B74E445BA0E15C957 email = 'neal@pep.foundation' name = 'Neal H. Walfield' [commit] gpgsign = true ``` Then run: ```shell ../sequoia-git$ git add openpgp-policy.toml ../sequoia-git$ git commit -m 'Add a commit policy.' [main 911c4eb] Add a commit policy. 1 file changed, 119 insertions(+), 1831 deletions(-) rewrite openpgp-policy.toml (94%) ``` Create a new commit, and verify the new version: ```shell ../sequoia-git$ echo 'hello world' > greeting ../sequoia-git$ git add greeting ../sequoia-git$ git commit -m 'Say hello.' [main 698876a] Say hello. 1 file changed, 1 insertion(+) create mode 100644 greeting ../sequoia-git$ sq-git log --trust-root 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9..698876a7ff11fff2f8cd0df55bbe8fc5c5d224d9: Neal H. Walfield [74E445BA0E15C957] ``` Instead of entering the trust root manually, which is error prone, you can set the trust root in the repository's git config file: ```shell ../sequoia-git$ git config sequoia.trustRoot 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9 ../sequoia-git$ sq-git log 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9..698876a7ff11fff2f8cd0df55bbe8fc5c5d224d9: Cached positive verification ``` You can also use tags or branches, however, you must be careful as these may be updated when you fetch from a remote repository using, e.g., `git fetch`. ## Rejecting Unauthorized Commits Insert the following line into `hooks/update` on a shared `git` server to make it enforce the policy embedded in the repository starting at the given trust root (``), which is specified as a hash: ```text sq-git update-hook --trust-root= "$@" ``` ## Using `sq-git` in CI `sequoia-git` is available in an OCI image for ease of use inside of CI pipelines. ### Gitlab To authenticate commits from a Gitlab CI pipeline, there is a script included at `scripts/gitlab.sh` which may be run as a job inside a project's `.gitlab-ci.yml` manifest: ``` authenticate-commits: stage: test image: registry.gitlab.com/sequoia-pgp/sequoia-git:latest before_script: [] script: - sq-git policy describe - /usr/sbin/gitlab.sh # Script baked-in to image after_script: [] rules: # TODO: We currently only authenticate the changes on non-merged # branches where we use the default branch as the trust root. For # the default branch, the project needs to set an explicit trust # root. - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' ``` ### GitHub To use `sq-git` to authenticate a pull request in GitHub, you can use the [`sequoia-pgp/authenticate-commits` Action](https://github.com/sequoia-pgp/authenticate-commits). This action checks that the commits are authorized by the last commit of the merge base. [This video](https://www.youtube.com/watch?v=KdDbU9u5X-Q) shows a demonstration of the action. Note: GitHub's interface for merging pull requests offers three merge strategies, but unfortunately none of them are appropriate for use with Sequoia git, because they all modify the commits. With Sequoia git, it is necessary to either rebase and fast forward the change, or to add a signed merge commit. It is possible to use the [`sequoia-pgp/fast-forward` action](https://github.com/sequoia-pgp/fast-forward) to fast forward pull requests. When enabled for a repository, an authorized user can add a comment containing `/fast-forward` to the pull request, and the action will fast forward the merge base. sequoia-git-0.4.0/book/Makefile000064400000000000000000000003441046102023000144470ustar 00000000000000build: mdbook mdbook build server: mdbook mdbook serve --open .PHONY: mdbook mdbook: if ! mdbook --version >/dev/null; \ then \ echo "mdbook is not installed, try:"; \ echo ""; \ echo " cargo install mdbook"; \ fi sequoia-git-0.4.0/book/book.toml000064400000000000000000000000341046102023000146320ustar 00000000000000[book] title = "Sequoia git"sequoia-git-0.4.0/book/examples/alice.pgp000064400000000000000000000042651046102023000164200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A11C ECD8 6FB6 0504 66E6 259C 7993 A17B A853 7B3D Comment: Comment: Alice xVgEZ7PDpBYJKwYBBAHaRw8BAQdAdVIlpUiaBK3EH4NnoUD2IQ0QJ1I55o0RA9hn nkEl86AAAP0WpDE0MDAoUaPxXaA4kivRvLt78VozWGSNvlkEtKNwyA+vwsALBB8W CgB9BYJns8OkAwsJBwkQeZOhe6hTez1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGxikAg41bFqQWyfDX009ZwEV79+uoWdxPs/sqqUlXU8D FQoIApsBAh4BFiEEoRzs2G+2BQRm5iWceZOhe6hTez0AALHbAP0Rpk/62ECJehwu xgz+dmp22oxwfe4baMXp3Y8gxVHceAEAkIBAfLgyYYFtrTIl5E5wHLpzg2l+ZxT8 9QSuBBqDegLNEzxhbGljZUBleGFtcGxlLm9yZz7CwAsEExYKAH0Fgmezw6QDCwkH CRB5k6F7qFN7PUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf42BeZAW5R2puX9nfjvSytIYY+l5aTRq0z4S6YsU/RBQMVCggCmwECHgEWIQSh HOzYb7YFBGbmJZx5k6F7qFN7PQAAx4IBANrw4ZVBbNV440JcVNT6flfsva1cWeFN WkTPZ5dS4OR3AQCXc88GSznIGVqvb3CZhuvyoiunwZpDBSaMjA4+UQiQBs0FQWxp Y2XCwAsEExYKAH0Fgmezw6QDCwkHCRB5k6F7qFN7PUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdU4o/9d6iboxYQJ+R53cmyP4B3V/sR4SjM hXVnZ4PQTgMVCggCmwECHgEWIQShHOzYb7YFBGbmJZx5k6F7qFN7PQAAeSIBAIhB GoOcyfh3A9ejs1/JxSfRN22ZnuR4NHHwIZEYMp9hAQCDu/Qc4VdfY0WdtrD73odY 1dxyYZIZWHeM7u9ej5CiDMdYBGezw6QWCSsGAQQB2kcPAQEHQAeGU6o3IpFGWiGu 5wd6CniAk3k1ahNWLH2oS/BJ1aUKAAD+LLGFmwmi+gLowHfDpF/+vfnl/6Y+mGGl PCdCadsh5bsTS8LAwgQYFgoBNAWCZ7PDpAkQeZOhe6hTez1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jno6TiuAWsrGVzWZIZyUJ0db9c1h1d HPkhaf0nKRc2X5ECmwICHgG+oAQZFgoAbwWCZ7PDpAkQsyd+U95/eSpHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnaxTISs10aJ45+7rYLmih hJvhrRIfywDHSd8btt7rYPMWIQTyqwT1xuve43w2+WuzJ35T3n95KgAA0G8A/0aG NOuryIMaPQ28p+etLqvqns5QISNVZINiG+FCubfwAPsHyFsh8bYP8pSscywSA3Vm FGg5v/ZvbpbNAMVYjOwiBhYhBKEc7NhvtgUEZuYlnHmToXuoU3s9AAATfwEA98Gf NW8tEdxzeIetftrwVVcFFOZLdHwqMGH/kPEug8EA/ilbbUHkBCTdNSXRZG+JI8SA 83Uarx8llRvNOqUeU80Ix10EZ7PDpBIKKwYBBAGXVQEFAQEHQO6kC0sP/heqzeH6 Qwo8iAQ6O51IjK6+ozmlxVJca0A1AwEIBwAA/3yia5bxjajFudf5CtHHuVXct3Ip NouQXgAOgcollsMoEh7CwAMEGBYKAHUFgmezw6QJEHmToXuoU3s9RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5BdTbUEdivfeAyDZEO01bGz UCvpeGRnB+OZeTz0Db1sApsMAh4BFiEEoRzs2G+2BQRm5iWceZOhe6hTez0AAPMn AQDeaV9U1JObeHeEf4SUlwFBaWBbcyu1T3lZtO2MuG8YlQEA/wgw2BlSMlQEJVvu 92Am7684FNt0yQb7zk2wiiKliAY= =YQzo -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.4.0/book/examples/bob.pgp000064400000000000000000000054531046102023000161050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B0B5 0C2B 8C35 58D2 25A3 310C 1A8F AB5E 378D D32D Comment: Comment: Bob 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 o5AemPTOC/kK =tYYC -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.4.0/book/examples/carol.pgp000064400000000000000000000042571046102023000164440ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CA50 1F89 4EBD 6193 655C B77C 476D 5639 4D4E 67DC Comment: Comment: Carol xVgEZ6gBIRYJKwYBBAHaRw8BAQdAr0bwKnXKvgArRbX9vCjzPmv4EL3RXTde9T2G n8HOQCYAAP9NlPu+rOJkpxFhNpiDnIZ7c8UoMEx59oNb8GpNqt02CxEqwsALBB8W CgB9BYJnqAEhAwsJBwkQR21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6ZFUPyT+ju418sa+fdIZb+U8BEr4eH9meYQ3pi5xByED FQoIApsBAh4BFiEEylAfiU69YZNlXLd8R21WOU1OZ9wAAPpPAP9i/fxVKpNrKTkU TLhq5PtsXAUEaQLEe9ss4j/03kAbWgEA9kGtu7PT/hG7esJj5rompFSMoxcu/ibB Q2OnhmsTGQDNETxjYXJvbEBvdGhlci5vcmc+wsALBBMWCgB9BYJnqAEhAwsJBwkQ R21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ZkUetPvvMVv5aPXCCNydlkA2gwWz+KyyvMQzxaTEZiwDFQoIApsBAh4BFiEEylAf iU69YZNlXLd8R21WOU1OZ9wAAAJHAP9wW8OzuInVLvENj9A/qgoUQdyp1w9DoHtR 0hlloC5hFwEAi0tJN+zq3MAxZfeMULvd8od/y7U9TBacHQt2Xa2hNQHNBUNhcm9s wsALBBMWCgB9BYJnqAEhAwsJBwkQR21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnmXr3S74oZIdG+3vyYt26/MwSXPFdFAxTdc5s XCyLRzQDFQoIApsBAh4BFiEEylAfiU69YZNlXLd8R21WOU1OZ9wAAKqZAP9eVawX IMhVHC5PVWvt+PGOwTeLw4XdPdeqJLLCk1gkXQD8DGPSlzMYchQCwNBWxx3/9Utn J+JTWZa4Gh35ldYRDAfHWARnqAEhFgkrBgEEAdpHDwEBB0CN6dJuzAcJt6MBiFnJ yeCF8oYiOT3uNVcQw2Peae2UvgABAMsU1JAZCwoyGv0ERjCs/3Jc6rxIvsY2xaFH abUyzy99Ds7CwMIEGBYKATQFgmeoASEJEEdtVjlNTmfcRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwgwmN8F1mbHevKLLnJ8wqTWiPyLaTtv 5VnpjO6d63+uApsCAh4BvqAEGRYKAG8FgmeoASEJEA3dC9z9fXxPRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8669u/90KSWiibelXcrFqrU 6CKb7iYgI1fy0Jtqa4lRFiEE9xKRn9x2uXGlq6/BDd0L3P19fE8AAIzRAP9VtGu2 IGQWbBMK971dQmiSMcVQ97BIvRgoUOatgBeLjwEA8lJ4IVcjfom59mQUTGj4oNm+ IoUcujYjwf+yNSghGAwWIQTKUB+JTr1hk2Vct3xHbVY5TU5n3AAA6noBAIeQHpd7 GZbLjYu+0bEtruUDUWWS+mI96vIDNYcNSzJ8AP9DrAq5ggo4dQtho5scT7DIM3Uw 0RV9nujP/2m4n3dtDMddBGeoASESCisGAQQBl1UBBQEBB0AO4koYFKhYivor4Y4p z5atk+gNHUDdzuug4vXG3y10NAMBCAcAAP9Ap37+CxyeAU7QKy3Ym9oHL3nc3xJy RCiqbsBVhtroOA/ywsADBBgWCgB1BYJnqAEhCRBHbVY5TU5n3EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcynxUoSjBYppjVg9yMoPFuh41e 1ZE4UlCYReSeDodkHQKbDAIeARYhBMpQH4lOvWGTZVy3fEdtVjlNTmfcAAASnwEA oMBWEoKYytzTO7Jwt124MWt5WPakB505+exFgvjz+ucBAIH8kywMnUKbAiA3pFYA CthG3yw9OCUZLIcy92PHXa8J =ANAh -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.4.0/book/examples/frob-10-alice-adds-a-signing-policy.txt000064400000000000000000000013021046102023000236620ustar 00000000000000alice$ sq-git policy authorize alice --project-maintainer \ --cert A11CECD86FB6050466E6259C7993A17BA8537B3D - User alice was added. - User alice was granted the right sign-commit. - User alice was granted the right sign-tag. - User alice was granted the right sign-archive. - User alice was granted the right add-user. - User alice was granted the right retire-user. - User alice was granted the right audit. - User alice: new certificate A11CECD86FB6050466E6259C7993A17BA8537B3D. alice$ git add openpgp-policy.toml alice$ git commit -m 'Add a signing policy.' [main (root-commit) b001000] Add a signing policy. 1 file changed, 43 insertions(+) create mode 100644 openpgp-policy.toml sequoia-git-0.4.0/book/examples/frob-100-dave-checks-carols-commit.txt000064400000000000000000000007461046102023000235440ustar 00000000000000dave$ sq-git log b005000000000000000000000000000000000000..b006000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Use an O(log(n)) algorithm instead of one that takes O(n). Error: Could not verify commits b003000000000000000000000000000000000000..b006000000000000000000000000000000000000 Caused by: 0: While verifying commit b006000000000000000000000000000000000000 1: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing sequoia-git-0.4.0/book/examples/frob-110-carol-adds-herself-to-the-policy.txt000064400000000000000000000022711046102023000247460ustar 00000000000000carol$ git switch -c carol/make-carol-a-committer main Switched to a new branch 'carol/make-carol-a-committer' carol$ sq-git policy authorize carol --committer \ --cert CA501F894EBD6193655CB77C476D56394D4E67DC - User carol was added. - User carol was granted the right sign-commit. - User carol: new certificate CA501F894EBD6193655CB77C476D56394D4E67DC. carol$ git add openpgp-policy.toml carol$ git commit -m 'Authorize Carol to be a committer.' [carol/make-carol-a-committer b007000] Authorize Carol to be a committer. 1 file changed, 36 insertions(+) carol$ git cherry-pick b006000000000000000000000000000000000000 [carol/make-carol-a-committer b008000] Use an O(log(n)) algorithm instead of one that takes O(n). Date: Fri Feb 21 08:42:15 2025 +0100 1 file changed, 21 insertions(+), 7 deletions(-) carol$ sq-git log --trust-root 'HEAD^' b007000000000000000000000000000000000000..b008000000000000000000000000000000000000: Signer: carol [CA501F894EBD6193655CB77C476D56394D4E67DC] Use an O(log(n)) algorithm instead of one that takes O(n). Verified that there is an authenticated path from the trust root b007000000000000000000000000000000000000 to b008000000000000000000000000000000000000. sequoia-git-0.4.0/book/examples/frob-120-dave-checks-carols-new-commits.txt000064400000000000000000000012321046102023000245070ustar 00000000000000dave$ sq-git log b007000000000000000000000000000000000000..b008000000000000000000000000000000000000: Signer: carol [CA501F894EBD6193655CB77C476D56394D4E67DC] Use an O(log(n)) algorithm instead of one that takes O(n). b005000000000000000000000000000000000000..b007000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Authorize Carol to be a committer. Error: Could not verify commits b003000000000000000000000000000000000000..b008000000000000000000000000000000000000 Caused by: 0: While verifying commit b007000000000000000000000000000000000000 1: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing sequoia-git-0.4.0/book/examples/frob-130-bob-merges-carols-commit.txt000064400000000000000000000002771046102023000234130ustar 00000000000000bob$ git merge --no-ff carol/vroom -m 'Merge Carol'\''s change' Merge made by the 'ort' strategy. main.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.4.0/book/examples/frob-140-git-log.txt000064400000000000000000000017511046102023000201630ustar 00000000000000bob$ git log --decorate --pretty=short --graph * commit b009000000000000000000000000000000000000 (HEAD -> main) |\ Merge: b005000 b006000 | | Author: Bob | | | | Merge Carol's change | | | * commit b006000000000000000000000000000000000000 (carol/vroom) |/ Author: Carol | | Use an O(log(n)) algorithm instead of one that takes O(n). | * commit b005000000000000000000000000000000000000 | Author: Bob | | Add support for ACME's frob. | * commit b004000000000000000000000000000000000000 | Author: Bob | | Fix a corner case. | * commit b003000000000000000000000000000000000000 | Author: Bob | | Add a cool new feature. | * commit b002000000000000000000000000000000000000 | Author: Alice | | Authorize Bob to be a release manager. | * commit b001000000000000000000000000000000000000 Author: Alice Add a signing policy. sequoia-git-0.4.0/book/examples/frob-150-dave-checks-merge-commit.txt000064400000000000000000000017361046102023000233650ustar 00000000000000dave$ sq-git log b005000000000000000000000000000000000000..b009000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Merge Carol's change b006000000000000000000000000000000000000..b009000000000000000000000000000000000000: Cached positive verification b005000000000000000000000000000000000000..b006000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Use an O(log(n)) algorithm instead of one that takes O(n). b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b009000000000000000000000000000000000000. sequoia-git-0.4.0/book/examples/frob-160-bob-signs-carols-commit.txt000064400000000000000000000006211046102023000232500ustar 00000000000000bob$ git reset --hard b006000000000000000000000000000000000000 HEAD is now at b006000 Use an O(log(n)) algorithm instead of one that takes O(n). bob$ git commit --amend --allow-empty --reuse-message=HEAD [main b010000] Use an O(log(n)) algorithm instead of one that takes O(n). Author: Carol Date: Fri Feb 21 08:42:15 2025 +0100 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.4.0/book/examples/frob-170-dave-checks-resign.txt000064400000000000000000000016131046102023000222630ustar 00000000000000dave$ git log -n1 commit b010000000000000000000000000000000000000 Author: Carol Date: Fri Feb 21 08:42:15 2025 +0100 Use an O(log(n)) algorithm instead of one that takes O(n). dave$ sq-git log b005000000000000000000000000000000000000..b010000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Use an O(log(n)) algorithm instead of one that takes O(n). b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b010000000000000000000000000000000000000. sequoia-git-0.4.0/book/examples/frob-20-alice-sets-trust-root.txt000064400000000000000000000001471046102023000227250ustar 00000000000000alice$ git rev-parse HEAD alice$ git config sequoia.trustRoot b001000000000000000000000000000000000000 sequoia-git-0.4.0/book/examples/frob-30-alice-authorizes-bob.txt000064400000000000000000000010221046102023000225360ustar 00000000000000alice$ sq-git policy authorize bob --release-manager \ --cert B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D - User bob was added. - User bob was granted the right sign-commit. - User bob was granted the right sign-tag. - User bob was granted the right sign-archive. - User bob: new certificate B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D. alice$ git add openpgp-policy.toml alice$ git commit -m 'Authorize Bob to be a release manager.' [main b002000] Authorize Bob to be a release manager. 1 file changed, 38 insertions(+) sequoia-git-0.4.0/book/examples/frob-40-alice-runs-git-log.txt000064400000000000000000000005641046102023000221430ustar 00000000000000alice$ sq-git log Warning: no trust root specified. Either pass the '--trust-root' option, or set the 'sequoia.trustRoot' configuration key in your repository's local git config to reference a commit. Error: Reading 'sequoia.trustRoot' from the repository's git config. Caused by: config value 'sequoia.trustRoot' was not found; class=Config (7); code=NotFound (-3) sequoia-git-0.4.0/book/examples/frob-50-bob-adds-a-commit.txt000064400000000000000000000010351046102023000217130ustar 00000000000000bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Add a cool new feature.' [main b003000] Add a cool new feature. 1 file changed, 21 insertions(+) create mode 100644 main.rs bob$ sq-git log --trust-root 'HEAD^' b002000000000000000000000000000000000000..b003000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add a cool new feature. Verified that there is an authenticated path from the trust root b002000000000000000000000000000000000000 to b003000000000000000000000000000000000000. sequoia-git-0.4.0/book/examples/frob-55-dave-trust-root.txt000064400000000000000000000000511046102023000216150ustar 00000000000000b003000000000000000000000000000000000000 sequoia-git-0.4.0/book/examples/frob-60-dave-sets-a-trust-root.txt000064400000000000000000000003601046102023000230060ustar 00000000000000dave$ git log -n1 commit b003000000000000000000000000000000000000 Author: Bob Date: Fri Feb 21 08:42:14 2025 +0100 Add a cool new feature. dave$ git config sequoia.trustRoot b003000000000000000000000000000000000000 sequoia-git-0.4.0/book/examples/frob-70-bob-adds-a-commit.txt000064400000000000000000000005371046102023000217230ustar 00000000000000bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Fix a corner case.' [main b004000] Fix a corner case. 1 file changed, 21 insertions(+), 7 deletions(-) bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Add support for ACME'\''s frob.' [main b005000] Add support for ACME's frob. 1 file changed, 9 insertions(+), 12 deletions(-) sequoia-git-0.4.0/book/examples/frob-80-dave-checks.txt000064400000000000000000000007661046102023000207260ustar 00000000000000dave$ sq-git log b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b005000000000000000000000000000000000000. sequoia-git-0.4.0/book/examples/frob-90-carol-adds-a-commit.txt000064400000000000000000000005161046102023000222600ustar 00000000000000carol$ git switch -c carol/vroom main Switched to a new branch 'carol/vroom' carol$ emacs main.rs carol$ git add main.rs carol$ git commit -m 'Use an O(log(n)) algorithm instead of one that takes O(n).' [carol/vroom b006000] Use an O(log(n)) algorithm instead of one that takes O(n). 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.4.0/book/examples/frob-95-carol-commit-cherry-picked.txt000064400000000000000000000000511046102023000236570ustar 00000000000000b006000000000000000000000000000000000000 sequoia-git-0.4.0/book/examples/intro-10-neal-cert.txt000064400000000000000000000003501046102023000206040ustar 00000000000000mallory$ sq key generate --userid 'Neal H. Walfield ' --own-key --without-password - ┌ 13914CAD8DA9055E86973BCE16EABCF4A66A228B â”” Neal H. Walfield - certification created ... sequoia-git-0.4.0/book/examples/intro-20-neal-commit.txt000064400000000000000000000003121046102023000211360ustar 00000000000000mallory$ emacs main.rs mallory$ git add main.rs mallory$ git commit -m 'Clean up the code.' [main (root-commit) a001000] Clean up the code. 1 file changed, 21 insertions(+) create mode 100644 main.rs sequoia-git-0.4.0/book/examples/intro-30-git-log.txt000064400000000000000000000012411046102023000202760ustar 00000000000000alice$ git log -n1 --pretty=short --show-signature commit a001000000000000000000000000000000000000 gpg: Signature made Fri Feb 21 08:42:16 2025 +01:00 gpg: using EDDSA key F5FA62C39C1620C0DCE60A53FA23CCD7B28FB8CE gpg: Good signature from "Neal H. Walfield " [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 1391 4CAD 8DA9 055E 8697 3BCE 16EA BCF4 A66A 228B Subkey fingerprint: F5FA 62C3 9C16 20C0 DCE6 0A53 FA23 CCD7 B28F B8CE Author: Neal H. Walfield Clean up the code. sequoia-git-0.4.0/book/examples/script.sh000075500000000000000000000217201046102023000164710ustar 00000000000000if ! test -e alice.pgp -a -e bob.pgp then echo "You seem to be in the wrong directory! (alice.pgp and bob.pgp not found)" exit 1 fi export GNUPGHOME=$(pwd)/gpg export SEQUOIA_CERT_STORE=$(pwd)/gpg/pubring.cert.d if test -d gpg then gpgconf --kill gpg-agent rm -rf gpg sleep 1 fi mkdir gpg chmod 700 gpg for c in *.pgp do gpg --import $c done sleep 1 # Remove old output. rm -f *[0-9]-*.txt # Initialize the git repository. rm -rf frob mkdir frob cd frob git init # sq --overwrite key generate --name Bob --email bob@example.org --own-key --without-password --expiration never --output bob.pgp --rev-cert /tmp/alice.rev # vanity_gpg -c ed25519 -j8 -u "Alice" -p "^A11CE" alice_fpr=A11CECD86FB6050466E6259C7993A17BA8537B3D bob_fpr=B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D carol_fpr=CA501F894EBD6193655CB77C476D56394D4E67DC declare -A trust_roots set -e context() { name="$1" case "$name" in alice) git config --local user.name "Alice" git config --local user.email "alice@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $alice_fpr ;; bob) git config --local user.name "Bob" git config --local user.email "bob@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $bob_fpr ;; carol) git config --local user.name "Carol" git config --local user.email "carol@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $carol_fpr ;; dave) git config --local user.name "Dave" git config --local user.email "dave@some.org" git config --local gpg.gpgsign false git config --local --unset user.signingKey ;; mallory) git config --local user.name "Neal H. Walfield" git config --local user.email "neal@sequoia-pgp.org" if test -z "$neal_fpr" then git config --local gpg.gpgsign false git config --local --unset user.signingKey || true else git config --local gpg.gpgsign true git config --local user.signingKey "$neal_fpr" fi ;; *) echo "\$1 should be the name" exit 1 esac trust_root=${trust_roots[$name]} if test -z "$trust_root" then git config --local --unset sequoia.trustRoot || true else git config --local sequoia.trustRoot "$trust_root" fi PS4="$name\$ " rm -f ~/.cache/sq-git.verification.cache } # The number of lines to add / delete with each commit. We rotate # them to add variety, but to keep the output stable. declare -a add declare -a delete add=( 21 9 32 40 ) delete=( 7 12 6 ) emacs() { set +x filename="$1" if test -z "$filename" then echo filename not specified exit 1 fi touch "$filename" if test "${delete[0]}" -gt 0 then sed -i "1,${delete[0]}d" "$filename" fi { for i in $(seq ${add[0]}); do echo $RANDOM; done } >> "$filename" # Rotate add=( "${add[@]:1}" "${add[0]}" ) delete=( "${delete[@]:1}" "${delete[0]}" ) set -x } save() { filename="$1" # - Remove set +x from output. # - Remove stuttering due to PS4. # - If the --cert FINGERPRINT argument comes at the end of a line, # wrap it. sed -e '/.*$ set +x/d' \ -e 's/^\(.\)\1\+\(.*$ \)/\1\2/' \ -e 's/^\(.\{33,\}\)\(--cert [0-9A-F]\{40\}\)/\1\\\n \2/g' \ | tee "$filename" } context "alice" { set -x sq-git policy authorize alice --project-maintainer \ --cert $alice_fpr git add openpgp-policy.toml git commit -m "Add a signing policy." } 2>&1 | save ../frob-10-alice-adds-a-signing-policy.txt context "alice" { set -x git config sequoia.trustRoot $(git rev-parse HEAD) } 2>&1 | save ../frob-20-alice-sets-trust-root.txt context "alice" { set -x sq-git policy authorize bob --release-manager --cert $bob_fpr git add openpgp-policy.toml git commit -m "Authorize Bob to be a release manager." } 2>&1 | save ../frob-30-alice-authorizes-bob.txt context "alice" { set -x sq-git log } 2>&1 | save ../frob-40-alice-runs-git-log.txt context "bob" { set -x emacs main.rs git add main.rs git commit -m "Add a cool new feature." sq-git log --trust-root HEAD^ } 2>&1 | save ../frob-50-bob-adds-a-commit.txt context "dave" DAVE_ROOT=$(git rev-parse HEAD) echo $DAVE_ROOT | save ../frob-55-dave-trust-root.txt trust_roots["dave"]=$DAVE_ROOT { set -x git log -n1 git config sequoia.trustRoot $DAVE_ROOT } 2>&1 | save ../frob-60-dave-sets-a-trust-root.txt context "bob" { set -x emacs main.rs git add main.rs git commit -m "Fix a corner case." emacs main.rs git add main.rs git commit -m "Add support for ACME's frob." } 2>&1 | save ../frob-70-bob-adds-a-commit.txt context "dave" { set -x sq-git log } 2>&1 | save ../frob-80-dave-checks.txt context "carol" { set -x git switch -c carol/vroom main emacs main.rs git add main.rs git commit -m "Use an O(log(n)) algorithm instead of one that takes O(n)." } 2>&1 | save ../frob-90-carol-adds-a-commit.txt CAROL_COMMIT=$(git rev-parse HEAD) echo $CAROL_COMMIT | save ../frob-95-carol-commit-cherry-picked.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-100-dave-checks-carols-commit.txt context "carol" { set -x git switch -c carol/make-carol-a-committer main sq-git policy authorize carol --committer --cert $carol_fpr git add openpgp-policy.toml git commit -m "Authorize Carol to be a committer." git cherry-pick $CAROL_COMMIT sq-git log --trust-root HEAD^ } 2>&1 | save ../frob-110-carol-adds-herself-to-the-policy.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-120-dave-checks-carols-new-commits.txt git checkout main context "bob" { set +e; set -x git merge --no-ff carol/vroom -m "Merge Carol's change" } 2>&1 | save ../frob-130-bob-merges-carols-commit.txt context "bob" { set +e; set -x git log --decorate --pretty=short --graph } 2>&1 | save ../frob-140-git-log.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-150-dave-checks-merge-commit.txt context "bob" { set +e; set -x git reset --hard $CAROL_COMMIT git commit --amend --allow-empty --reuse-message=HEAD } 2>&1 | save ../frob-160-bob-signs-carols-commit.txt context "dave" { set +e; set -x git log -n1 sq-git log } 2>&1 | save ../frob-170-dave-checks-resign.txt # Introduction. cd .. rm -rf intro mkdir intro cd intro git init context "mallory" { set -x sq key generate --userid 'Neal H. Walfield ' --own-key --without-password } 2>&1 \ | awk 'BEGIN { suppress = 0 } /^Transferable Secret Key./ { print "..."; suppress = 1; exit } { if (suppress == 0) { print } } /^[a-z]+$/ { suppress = 0; }' \ | save ../intro-10-neal-cert.txt # Truncate sq key generate neal_fpr=$(sq cert list neal@sequoia-pgp.org | awk -F-\ '/^ - [0-9A-F]{40,}/ { print $2 }') if test -z "$neal_fpr" then echo Failed to extract fingerprint. exit 1 fi sq key export --cert "$neal_fpr" | gpg --import sleep 1 sq pki link retract --cert "$neal_fpr" --all context "mallory" { set -x emacs main.rs git add main.rs git commit -m "Clean up the code." } 2>&1 | save ../intro-20-neal-commit.txt context "alice" { set -x git log -n1 --pretty=short --show-signature } 2>&1 | save ../intro-30-git-log.txt # Stabilize the output. cd .. rewrite_commits() { prefix=$1 if test -z "$prefix" then echo "No prefix" exit 1 fi shift files=$@ if test -z "$files" then echo "No files" exit 1 fi got_all=$(sed -n -E ' # .* matches greedily so we need to be careful. The following loop # surrounds the last commit hash on the current line (before the first # \n in the pattern space) with \ns. If it made a substitution, it # loops. :split s/^([^\n]*)(\b[0-9a-f]{40}\b)/\1\n\2\n/; t split; # If the pattern space is a commit hash, print it. Otherwise, remove # everything up to and including the first new line character. If # the pattern space is not empty, repeast. :print /^[0-9a-f]{40}/ P; s/^[^\n]*(\n|$)//; /./ b print ' $files) echo $got_all # We want to dedup, but if we do sort | uniq, then the order is not # preserved. declare -a got declare -A dedup for commit in $got_all do if ! test -z "${dedup[$commit]}" then continue fi dedup[$commit]=1 got+=( "$commit" ) done commit_i=1 subs="" for c in ${got[@]} do commit="$prefix$(printf '%03d%040d' $commit_i 0)"; let commit_i+=1 echo "$c -> $commit" for i in $(seq 7 40) do subs+="s/\b${c:0:$i}\b/${commit:0:$i}/g;" done done sed -E -e "${subs}" -i $files } # Use a one letter prefix for each scenario. Make sure the files are # listed in order so that the commits are ordered correctly. rewrite_commits a $(ls -1 intro-??-*.txt | sort) rewrite_commits b $(ls -1 frob-??-*.txt | sort) $(ls -1 frob-???-*.txt | sort) sequoia-git-0.4.0/book/src/SUMMARY.md000064400000000000000000000004231046102023000152530ustar 00000000000000# Summary [Introduction](introduction.md) - [Signing Commits](signing-commits.md) - [Adding a Signing Policy to a Project](adding-a-signing-policy.md) - [Authenticating Commits](authenticating-commits.md) - [Authenticating a Pull Request](authenticating-a-pull-request.md) sequoia-git-0.4.0/book/src/adding-a-signing-policy.md000064400000000000000000000066021046102023000205200ustar 00000000000000# Adding a Signing Policy to a Project To start using `sq-git` with a project, you first add a signing policy. The two most important things that a signing policy says are: who is allowed to add commits to the project, and who is allowed to change the policy. Imagine a project called Frob. Alice is the project's maintainer, Bob is a committer, and Carol occasionally makes contributions, but all of her contributions are first reviewed by Alice or Bob. As the project's maintainer, Alice is responsible for creating and maintaining the signing policy. To mark herself as the project maintainer, she uses the `sq-git policy authorize` command: ```shell {{#include ../examples/frob-10-alice-adds-a-signing-policy.txt}} ``` This adds a new entity, `alice`, to the `openpgp-policy.toml` file at the root of the working tree, gives her all rights, and associates an OpenPGP certificate with the entity. By default, `sq-git` reads certificates from your local [shared OpenPGP certificate directory]. This is the same certificate store that [`sq`] uses. By default, it is stored under `~/.local/share/pgp.cert.d`. If your tooling doesn't use the shared OpenPGP certificate directory, you can export the certificate to a file, and use the `--cert-file` argument instead of the `--cert` argument to designate the certificate. [shared OpenPGP certificate directory]: https://sequoia-pgp.gitlab.io/pgp-cert-d/ [`sq`]: https://book.sequoia-pgp.org Before Alice can authorize Bob, she needs to get his certificate. It's important that she make sure she has the correct certificate, as otherwise someone else will be allowed to make changes. Alice might download Bob's certificate from his web page, his profile page on a forge, a public directory like [keys.openpgp.org](https://keys.openpgp.org). This is a good start. But, before she uses the certificate, she should double check that it really belongs to Bob by asking him to send her his certificate's fingerprint via a different communication channel. The most secure option would be to meet in real life and exchange fingerprints. But sending it via a secure messenger like Signal, or checking the fingerprint in a call is usually enough. It's not only important for Alice to check with Bob for security reasons, though: Bob might want to use a separate certificate for signing his commits. Once Alice has verified Bob's certificate, she can authorize him as follows: ```shell {{#include ../examples/frob-30-alice-authorizes-bob.txt}} ``` That is, she uses the same command as before, but instead of making Bob a project maintainer, she makes him a release manager. This means that he is allowed to add commits to the project and make releases, but not modify the project's signing policy. If Alice doesn't want Bob to make releases, then she could have made him a committer using the `--committer` option instead. As a general rule of thumb, a project should have more than one project maintainer. This way, if one maintainer loses access to their certificate, another person can add a new certificate without violating the signing policy. Since modifying the policy is a particularly sensitive operation, you might consider having two entities with different rights and certificates: one that is allowed to change the policy, and uses a certificate that is stored offline, e.g., on an OpenPGP card, and another that is only allowed to add commits, and uses an online certificate. sequoia-git-0.4.0/book/src/assets/github-fast-forward.png000064400000000000000000003702631046102023000214770ustar 00000000000000‰PNG  IHDR5Þ#ÁL›ÄzTXtRaw profile type exifxÚmP[!ü÷=/c»6é zü¢°ÉÚv‡tDÒx¿žé6A(IrÕÒJƒ4iÔM(8úbY¼Àjd·|:ÐRd)ž'½ Å#žù¸pFì¦òÅHQ¸ï…&I¿Œ(:›M}„Q #&/`tÿ”¦õú…û€ê+MÝÛþÙW›Þ‘í&Œ ÆÌâ ð\9q_¢Ï„Ä¥…³qæf6s:‘>€*Y…¢(’zƒiCCPICC profilexœ}‘=HÃ@Å_S¥¢‡fqÈPì¢"޵ E¨j…VL.ý‚&-IŠ‹£àZpðc±êà⬫ƒ« ~€¸ NŠ.Râÿ’B‹ŽûñîÞãî 4+L·zâ€nØf:™²¹U)ô "CDaVmN–Sð_÷ðõ.ƳüÏý9µ¼Å€€Dg5Ó&Þ žÙ´kœ÷‰EVR4âsâ “.HüÈuÕã7ÎE—ž)š™ô<±H,»XíbV2uâi⨦”/d=Ö8oqÖ+uÖ¾'a8o¬,sæ(’XÄdHPQGØÔW)Ò´Ÿðñ¸~™\*¹Ê`äX@:×þ¿»µ S“^R8ô¾8ÎÇÚZ Çù>vœÖ |®ŒŽ¿Úf?Iot´è0´ \\w4u¸Ü†ŸjŠ©¸R¦P(ïgôM9 r ô¯y½µ÷qúd¨«Ô ppŒ){ÝçÝ}ݽý{¦Ýß’r³¾Ä s xiTXtXML:com.adobe.xmp º1»bKGDÿÿÿ ½§“ pHYs  šœtIMEé .±xô£ IDATxÚìÝwX×Âðwvé½wiv±÷{‹Ýhš1¦›^M7]S¼‰Ÿ©jLÔ˜hLÓØ{WP!¨*½Hï ,lŸï…PD@Ô÷÷<¹wgvvæì™³ã2ïžsQE5@T\* {‡€V]N¥Jœ| ¢æffpu´‡\.k‘cëõä—@§×C.“ÁÛÝVæl^ü~Y·`mm‹ç#ox¿ÿEbÍ/¿"â¿HÂÁÁíÚ¶ÅŒiSpïì{ —Ë[õþ‰ˆˆˆˆˆˆˆˆˆèÖ'ˆ¢(²ˆnMW 5¯äæêŠÿ-ù#‡ßÕ,e îƒÁxòñGñîÛoðµ ’’<ûÂ+8~"TZסæ7ßý€¥Ë¾­÷ùþýúbõª°³³m•û¿Ž„â·?6cõ÷K ‚´þb\">Yò ~üú3ØÙÚÔz^oÀéȳˆ<ø¤”””A«ÓÁÁÞmƒ0ê®AèÙ­KƒË‘z9_/_ƒüÂB¬[±”›ˆˆˆˆˆˆˆˆˆ~–莑_P€ùÏ<¨óѬŒÛLRr ¦ßsŸI Ù¶nßqÕÀN‡G`Áo·Êý_¯”´Ëð÷5 4 %õ2Ü\ë 4Ã#£ðòÛãÛ•¿ 7¯ƒúõƳ¦bÞ÷`È€>HN½Œ%_¯ÄʵÐß8Š÷/E±¢„ ›ˆˆˆˆˆˆˆˆˆ¨?KtyùÅçqßì{ 7 (.Æùè¬^û+ââãŸ/ù ~]ÃʺM?Šg_x%%M‚i4Z|úùÿ¤e{;;,ù|1†Œœœ\,þô :r°{ï>„ž<…Á´šý7FRÊethTk}rZ:ýÛÔù𣡧Ðo¾<~>Þµž¿wÆdüúÇfì;t mü0~tÝ=¥Uj5~Z÷BOý‡é“ÇA©¬À¡c¡làDDDDDDDDDD•ØS“è6boooo/øùú $¤ î¿o6þýg#‚ƒ¥mNž:’ÒRVÖm`ݯë1ï±§¤@38(÷ß7»Iö}øÈQdgçHËø&N{;;´kŒåß OOéùÕk~iUû¿^z½—32X;¼LI½Œà€ºCÍWž} ¯>÷x&˜™Éñðý3àäè€Gê)ÓÒ3ñîÇ_âLT ^}î Ü;}ôz=8Q ·EOÍ’=#Ë‘Ÿ¡…²Xò” =ÊKŒuNJõ|,Ø8È`ë(‡ƒÜøØI7_s´ímWù-ÿmll0cúT|õß ÒRÓеkHÛGGÇ`Ýovê4rsr!73ƒ¯¯† ŒÇ?_Ÿ*O^^V¯ý‡Ååôth5Z¸»»£OŸ^xø¡ѧw¯z_[V¦Äž½ûpèÈQÄÄ\DNn.Ôj5ìÑ©cLœ0÷ß;æu¾¾´¬ ~ÿûB|B"JKKann/OOtë‚Çaâ„q°±±©óõ»÷îæÍ[pö\ŠŠŠammví‚1nÌh<ôà ž÷1¿ —‚«™3¦aéÿ>¯wû£' %5ˆCûwއ†IûèÖ5k~^‰•«~n’vvÒ¤ Mº{¢ÉóVVV˜9}–¯\e,ˉ0¨ÕjXZZ¶Šý_¯ËYÐéôô÷3Y¯Ñh‘‘•ƒÀ¿:_'“]û·Ar¹mƒp.úBÏÿwö<ÌÌäXüÞxy¸8Ý5‘©[6ÔÌMÓ"ê`).*GQ¶Žg’E§Q’¯GI~]½¢ àêkŽ}­Ñ}”=<üÍoÙ÷éììl²\^QQkQ±äËÿ“B$‰FƒøøÄÇ'`ý†øâ³E˜>mJ£Ê±{Ï^¼²à-T\qüôŒ ¤gd`ËÖíxäá‡ðþ·k…E……9fbì#ìäi„<ü… ¿®“““É6±qñ˜ûÈãÈÍÍ3Y¯×ë‘’šŠ”ÔTlÛ±»öìÅO+0Ù¦´¬ Ͻð2Ž;a²^«Õ"2ò,"#Ïâ—_×ã§•? ¤KçkÖƒ›«+† ŒÃGŽöï?­V sóÚmìRlœhÀŒéÕuÿå’Ï0eú,„t錥ÿûVVVÐh4MÒf¢cª¸n]Cê Šû÷ë#µ•J…óÑ1èÛ§w«Øÿµèõz i9!)ffrx¸»B«ÕJëSÒ Š"ü|¼¤õ‚ ƒ™ÙõýàájìôIã0iÜ(“:`¨IDDDDDDDDDdê– 5ËŠôˆ:\†óGÊ›ª5}RAD"A €O4ÕM€cˆ ÆSÙž 2´ËÐ"lK <ÌÑ}„º ·ƒó­Õƒ355ÍdÙÍÍ­Ö6K—}kh:ØÛ£sçN(//G\\<Ô Ô ^}ý-¸»»aÈàA×U†ã'BñÌó/Ka……9:uì+++\Š“Âʵë~ƒ££#^yéy“×»º¸ {·®8~Â8„§½`E$&&A¥R.\¼„÷?\„o–}iòúW¼ihz{{ÁÛÛ e¥J$&%I=ïuÉë žœÿNž:-­óòòDÛà`ääæ"!!••G{ ;·m‚»»û5ëcÆ´©R¨YRZŠã¡a9¼ö|‹;wí1Yž>uŠÉ9úë÷ßàîî¡òB×TYX\|‚ô800 ÎmÚ›,'&%78tlîý_˲åkðßÙóµÖ?öÜunÿâ›Iý|¼°äã·|,¥²q‰ÉèÕ½îÞÑ‚ ÔÛ»˜ˆˆˆˆˆˆˆˆˆˆŒn‰PS§qî`BÿU 8§f¯L !@*ïä „êgšt5oÁdA„(BT<7U‹ý¿!bw)†ÌtDÏQöÝŸ ÂÂ"lÚ¼EZöòòDÐ!R||¾ûa…´<éî øâÓEÒpªii—ñØ“O#!1 ƒ/ú »wl1­³«}†u:¼þÖ»R Ù¡}{¬Zñüåååxõõ·±{Ï^Àò•?âûfÃËËÓd?Ï?û4Ú·k‹©S&¡gîÒñ ñØOã\”1¤Ú¾s}òìí™YYˆ¹pQÚÏ3óŸÄ›¯¿*-+•娽g/Ž=Ž1£Gšó÷?þ2 4ß~sž|üQ©'é‰Ð0<1ÿ9TTT /?ßþ°°ðšu2nìhØØØ ¼¼°kמ:CÍ]•u}z÷‚¿¿éÜŽW¨MjŠ¢hÒ#ÖÝ͵ÎíÜÝMÃñÌ̬V±ÿ†xpöTL½{Œ´üÓ/áã퉻Ǚžÿ¿ÿÝ F‹ï&­³´°hðqTj5¾]µr™ ³§OâE—ˆˆˆˆˆˆˆˆˆ¨‘d­½€*¥[¿ÍÇΕ¦¦(¢ª¦ "Äê{ù"`L3™hÒµTöÊ„PÙnŒ‹X•eV…v5‚¢âv,/À¿_çA¥4´ªw£Õj¡T–£´¬ 陨¶c'îŸ3……Ò6óŸ|¼Vùë†RàèæêŠÿ}¾Ød~Hÿ6xá;Òrl\µEÚQ™Ri²lee]ï{¨©* ½ÙûooO´”þ+,*F—ŽíMÖµDi™íÛš®ó÷«=¯¬Á`@±¢ÅŠä"6! ›¶íÁ«ï,BII)>Y¸>^¼ä5R«îg–¥Â–¯óPZ¨Gå¡ÕO UËÆpÁ¤W¦Óm‰ê%^ÑnPwïC“uÆÇ1Ç•H» Â=¯{ M'ËVñn>_ò>_òU½Ïß=q<æÍSký‰Ê!]`àÀþR¸XÓ€þ}!“ɤy£ÎG£SÇ *×ñûwsuE÷n]kmãää„N: 2ò¬´ÿëáçc4)Õ=}}¼aii µZ øxÑgP–)ñМûkg5ååç#.¾:¼=jDÛ Ø?¬øP\\ŒôôŒZÁi]fL›"õ¢-..FØÉS6tˆôü®CÏš››còÝZ¤©®˜óÔܼþ*ÌÌ̤0¶ª~oöþ¯WaQ1”åµÂJƒÁ€ŒÌlL;âšûÈÎÉÂ÷>5Y'—Ë1nÔ0L? ÎN޼ÜÝ€VjªË ØõcΩêÍ#@„jK /©¥ˆ¢XxŠÆf'¥…z¬}; ÝGØa“.°´iŸ­­­ñÜ3óñìÓOÖꉨÑh‘˜”,-oß± Ûwìºæ> kôþ¼–‹±±Òãü‚¶ëܨýçääâÏ¿ÿÁ‰Ð“HLLBII ÔM¯×ôÒc+++Ì{x~\µ R©°øó%ø~Ÿoö=xxîƒðõ©ÝûîÒ¥X“å…ï„…ïtͲ6(Ô2x<<Ü¥¹>wîÞkjîÜ]jŽ> NNN-Ò^,®^U«ÕÕ»mÍÞ¥VÖV­bÿ×+-=ÐÆÏÛd}vn>´:Úøz_s®.Îxóå§¥÷£T–#=+g¢b°{ÿ صZmƒ·U_ÿ14Óýoß± ¯¿õ.*®èå×Po.0ΡùÓÏk¥Þ¦ÅÅÅX¹êg¬úy î™1 o¾ñÜ\«çw,V4oÝÈd2L< ?­^ Ø»w?}ô>är9ÒÒ.ãÂÅKÒ¶3§Ok±öreO]•ªî:¿ò\8ØÙ·Šý_¯ËYpuq®8¦gdAøz{^s––èѵvX?gö4„…GbÅê ÈÉÍLJo½Ôà¹h‰ˆˆˆˆˆˆˆˆˆ¨Z« 5KòõX÷^в«zæˆ5†ý*2̤›¨®,BA†ÜT-Ö¾‰‡>ò†£»ü¦ï½wßÂãÎlþw+^Yð&àð‘cزm¦M™Tû-]°ôëÛ={t¿æ±z÷êÙðj«q ?__Lœ0 ”'$&áå×ÞzíÉårÌš9ƒ‚»»ÌÍÌ’š†×ß|§ÞýÉår¼óæë˜=sV¬úÛ¶ï‚SƒÁ€¿þÙŒÃGãŸ?ÖÃß¿MÕUÇdÓ¦L‚‡ÇµçEôòòjpÝ̘>U 5 q*<ƒ0é¥é`oQ£F´X;277‡›«+ò yùun—ÅzG‡V±ÿkÑh´0ˆÕóᦦ¥Ã×Ûª+†·MN½ Ow7è è+Ÿ“ 2XX˜_×ñõë¼üBlüg"ÏE£OÏn¼–]§VjªËEüþI¶hŠ¢1©å 3©uª ÞE ÈP˜¥ÃÆÅÙx|‰Ì,nno¬Ó§â÷?þÂéðÀGŸ,Æ]C‡ÀÙÙtSW“y {tï†wß~£IËâáÄ$€£“ãuïã™ Cúù§Ÿ`ö=3L¶iè°žíÛ·ÃWK>Ã[¯¿ŠÕkÅš_~…J¥äååaáaÝšŸŒåöp7yí”É“0fôÈ&­›.Ñ¡}{iîÎ}û`ðÀػÍĉãayÅ­Í-88H SRRëÜ&!)Éd¹c‡ö­fÿWóŲ帗XkýcÏÕÝ.k®÷óñÂ’ß¾îcöïÝÿÙ†Øø$†šDDDDDDDDDDÐ*BMÑüõENå³ ŠÆœHDõ†D­Reûªæ}5öØÜ¼,³x@¸É#Ñ~üá{˜4u&ôz= ‹ðñâÏð_~aú¾¾>HMMœ:Þäåhãß8y …BGGÇ¿¾*ð[[Ìš9½Ö6¹yy×U&www¼ùú«xhÎý˜÷ØSHH0†\ÇŽ‡B§ÓÁÌÌ þmÚ˜¼æTxx“‡š0}Úd,ùòÿGGaaΜ='=?cÚÔo;}ûô–ñóÑ1Ðh´µz(FDüg²Ò¥K«ÙÿÕÌ{p**ŒA¶F«ÅgKÀ³¦¢CÛ “í¾üöG Ôûö’ÖYZ6.\¶®œT­Ñ‚ˆˆˆˆˆˆˆˆˆˆ®_«˜üïàoEHŽRU.*»fŠn–nBåÿƒM¸VŽƒ¿Ýô’uêØóæÎ‘–7ÿ»GޝµÝÝÆKÏGÇàð‘cMZŽšû×étX¾ò§ëz½N§—[[Y×9'á–m;U6_Ü7ûiYE”WÎåèåå‰^={HÏýñç?ÈÍÍkòó4}ÚéqbR2¶ïØ Q4^û|¼½1 ßfi……EXÿûزu;ÔÉscFU‡·åå娱s—ÉójµÿlÞ"-wïÖvv¶&ÛÄÅÇã—uëqô؉ZÇnîý_¿Ÿ:¶FÇöÁ°²² ê×KZ×±}0¼<Ý¡,¯@ßžÝLÖúû5ª®³²sn®Î¼d5ÂM5ã#*ºY@€( 6[=è,Ñ­C¬ 6aTèfbO—ßôR½òò pws“–ßYøÊËMËuïì™&½äžélݾz}u˜¨×ëqö\¶o½ûþu•aèA –Wüø¾ú¿o Tš–#%5+WýŒ³î7Y_5Ç%ä`ûŽê¬¬L‰OŽ·l«÷ø‰Iɘ:c6Ö®û­V(YRR‚}ûJËNNNp°·—–çÎyÀdÛ~Ô¤%TTTàÐá#xñåذñÏë>G>ÞÞ8 ¿´ü×?›¥ÇÓ§M©3ĽQjµS¦Ï»ï}ˆ—^}O?û¢Éó½{÷D·®!Òòû~‚]»÷¢´¬ IÉ)xú¹—#=ÿàý÷š¼þRl&Nž>^„‡}?®ZÝ¢ûo¨ä”˰³µ›«‹i›I6ö\ lÓ$õ½÷à1‚À¡g‰ˆˆˆˆˆˆˆˆˆé¦?«ÈÓcóÿ{¯ˆ¢XãÆ=Mº‰2@¨ 6+§ÚÜòM>žZê'›÷Q³·³Ã;o½ŽW¼ ÈÈÌÄÿ¾Z†Þ{GÚ&(0 ßy ïø cPøâË ðÎÂàååFƒœì©7ß„ñ㮫 r¹ß³3fßMåð›ß~¿+~ü þmü Š"òòòQZVÀ,Ö4~ìhlüã/iùù—^Å—K¿†……RRS Ñháêâ½Á€âââÚ§Fu>Qç£ñáÇ‹áééwwhµZ$§¤B­VKÛΞe:WçÌÓpàÐaìØ¹ˆ³î‡»›œœ ,S"+;[êYÙ§w¯F§Ó¦àä©ÓŒ½ek®o ‰IÈÈÌ”–;½^¹\.­[øÎ›xà¡G`0PZV†gž©Î}uí‚YWÌqz"4Ì$?täžzò1“mš{ÿ ‘œzAµƒË¤”4xy¸_u®ÖÜü$%§¡O¯n07«û3®ÓéñÇæí8qãGß/^+‰ˆˆˆˆˆˆˆˆˆá¦öÔ<ü{ÔåÆ À8u&‡š¥[˜PÝø*ŸW+ 8²±ø¦mÆô©è×·´¼vÝoµz>üЃøtÑG°²²’Ö••)‘ˆ´´Ë&ÓÊd×ÿÃ.ØðëZøúøHë´Z-“’‘”œ"šuíäˆá˜6u²Éº”ÔTÄÅÇKæº5«L†4½šœœ\œŽÁ¥Ø8“@sÄðaxíåkm¿ôŸãá‡4Y——ŸøødfeI&²Æý(câÄñ°´0¯1¤Kg´oß®YÚ„““霦ö&& èߟ~ò!ÌÍÍëÝOÛà ¬ZþÌ®õœ¯¦¯ ª[bÿ qµP3ø½4•Êr|³r-žzñm|¾l6ü½»öÆ#'°}ÏA¬\³Ï¿þ>vì9ˆÑÇ`î}3x$"""""""""j¤›Ö},å¼ Q‡ªBŒÊ0H`MºÕ‰R/ͪˆ3êPúMt€O{‹›Z²O>z“¦Î„^¯‡(Šxóí÷°cë?&Òƒ÷ß‹‘Ã醴bÿƒHÏÈDaa!ÌÍÍáááŽÎ;b䈻0eò¤F•¡oŸÞØ»k¶ï؉í;w#))¹yy Ñ®m[ <3§O­õÚe_-Aÿ~}ñû!>.2¹^žž5r8žžÿÜÝÜ0rÄ]ø{ÓæZ¯  Äo¿üŒ»ö ü¿Hdff¢¢Bsss¸»¹¡[·L›:Æ­³Ü–––øøÃ÷p﬙øgó„†DvN.JKKacc oôèÞãÇŨ‘ÃU7öö=z$vîÚ#­›ÞL½4ã\¢¯¾ü~úy-llmðaž»5ÝßltïÞ kù¡a§›— 33s´kŒ»'ŽÇ¼¹s`]GoÆI“&bÏÞý8rì8ÚÕ·Äþ¯F«Ó!=3Ó'×îyœ”’†)Ç\õõAmðå¢wq2ü .Å% ôÔ(--ƒN¯‡µ•ÜÝ\0 oO 2Áþ¼<ÝAoN÷Èu ³‘£’–M‡Ÿ%ºÅU%›•B¬ðð"/Ö Q#Ü”ágS£U5MÑØ£&ÝN¤ölüÍ@jŒ ©Ñ*Ö Q#Ü”P³jŽAcQçÒ¤ÛPe\/MÛæÖ$"""""""""""ºµøœšÅ9:c/MQ8—&Ý,o¬÷‡¥1×ÿôÞTèµM® !@ CjŒ J…¶Ž2V>ÑuhñPóÜ¡2ãA„€– 3ef@ÿ»ÐsŒ=Ü|Í‘“¢Aì©rœÜª€FÕò=EmäxuM“uÛ¾ÏÇÙýe z½Wž\êc²nãâÄGT°U·¢ñ?A@Õ0´ÑGË0`Š«†ˆˆˆˆˆˆˆˆˆˆˆè:´x—±ªy¥g[ O”› xü Œ}ÔîmÌ!ȯ` À s>ô‚ܼuô bÛàm»ÞeËÖ{ EÁ¤½Çž*g¥]§ 5uéqj€ ˆÆ §òÄ¡÷8Â+Ø¢Îçü:ZbÀäÖÑs.¨»5lvJB†Ú±õÞ¤‘•+ÿ?=N †sÈ] 53âÔ5æ-ÐR£Ïv\Ý«ñà¯EødF o(’Öuqs¬D±Fd¦e­K8¸ÉÙI¶âV®fv¯×ŠÈ¨ ö‰ˆˆˆˆˆˆˆˆˆˆˆ¨aZ4ÔL­ s„ÿÛü\«§=½³¾³TZçäavSOBJ´ š cØ2ôÚ¡f×»Œ!¬º\Dòy[q#‰-ÖaR4i÷ÕŸ""""""""""""jˆMóò3´bX³ù“¥²b,mÌ}'8à¿=%~¿“ô|Q¶ö¦ž™ˆ=]ŽnÃmáßÙ vÎr”éëݶKeoÎK'•50––› è6Ü=FÚÃÅÛ Öv2(K H¿¤BÄ®R¤ÆÔŽÎzÃÙ ùœ ¿}˜ è4ȃ§;ÂÃßæV¶|¨ÃeÒkÐw‚=º°ƒ»ŸqØßÂ,-bŽ+qj›zðæ†XX 8±Iƒ¿5i™«¸ù™cðLGu·†­ƒ 奤Ǫ¶YŒøÊa`[`jR¡²µWµûªÏ5L‹†šéÆ0§º‡fËt•»p¢Ãf;ÆÌsƘyÎ&ÏŸ;XvSO‚…¥€˜ãeè6Ü‚ è2ħ·—Ô¹mpOkXÛ“ÌècJthsÍý;¸ÊqÿBOxZÔZ•æ©Ð IDATßeˆ­t¼=?Ö»'OcSóˆ M3ƒ´´PWÝ ,<ø¾'B¬L¶ñ ¶€W°ºÞe‹M_åÁÂZhÖ2‡ µÅô—Ü!«ÑÂí]äè<ÈØ`çÊ(zØ9Ë›ÿWŽ?[õ޹:^yˆˆˆ¨Q Êt@¹ÐØRߨ[€™˜Ë[3ã26‹;¦ òüÝÙZ4Ô,+6†95çl ¡›ŠÜà ¾,k=^Žð%7õ$ÈÍ$ž­€Ji€•­ !Cë5»U=«TU®Ã®ÞÕÐÜRÀ˼áìe<Õ9)Ä…W ¢Tw ta¹Ð²J õݬ¨s?nfè=Î^ 4õ: $_[G9J «{•NzÚÕ$ÐLU#'YK[»ZÁ3Ðs?öjÖ2{Y`úËîU敥Ğ.‡ºÜWs÷°ÆÝó]¡RZôî´6ÈóODDDDDtçhÑÑzZºg\Mz­ˆÿÔî…8åy÷›~ªòݘãÊÊ@ÈÐÚÁ_Çþ60·2n}TYùÚúÃaAômÜOE©{~.4  3^ƒóGŒÃïZX h×ÇúªûÛ¼4aÿ*jšLÂÊØÓå&fÕ9ر¼¥úf+³³AÝ«{Šnû.ß$ЀÜ4-Žl,nÁ3,¶šÏÝZе@6Í}ÛÊQë‹î¼6ÈóODDDDDtg¸ã§ ên…Ñ;7h[ kwÝë„'—ú`á?X°ÎãŸp¹å ö:­|yrT…À… ­=¬l×»Œëy:¤Çª¯¹Û€+XÙOqjŒªÎ 2âª÷ådQïþR¢T¸V^ïóþ]ªÃĨCuÏSª×ЏxRÙleöí`)ÕgÞe-²5u¾þB¨’Ÿ~"""jÕ”zãpŸÔp…@ÉéËïØ6ÈóODDDDDt{kÑág­leP*Z_/µÁ3áâeŽ+óë-Ÿ¹¥€¹yç}u€fm/CÿI±Âê7³nxXQÑ\ S¢÷8{x·µ€³—вuRݵíez¶ª—浸ú˜K; ´Á{›¯ù‡úÇlŠ /¿êkÝüª—•TÿÝÜTm³•¹æë³ê~•Åz”+ °ql\ÿŠId­le¼òÑUi @®ŠõйjÀWXð+×Ùyþ‰ˆˆˆˆˆn_-ú§ž™…1Ù¥!S…›úæ/œ¨; ²Á+«ý1çOôŸäŸöÒ¼Œ0pªƒI Y“g †Îrl’2ÅÔ(SÍÞšÛB^AG+kоl¯R™¼þsR’_ÿÏžLz¬*‹ëb¶¢Lßle¶´©nÒeÅWŸ,µ¼´…&S­,^U»¯úÕ§HË!gK‡!½“Û Ï?Ñí«E{jÚ9™A‘§Gk‰tþù2™: ›åÆ`.¸§5‚{Z_õuÖ!t³Cg9bäãеíûÚàð†Ÿ§15Ze±¶Nr„ µÃñ¿ó€v«z6ï²öª=kjäƒN(¹·ôš¯)+ª?èÓëê¿­!\ÇIÕkÅ)³x»0W{?MJA”Ú½“¯¦lð~ŠsªïF´élÕìõXY]õÄΞfÍVæ¢ìê2xYÖ»Ü\€ƒ[Ëdú"Œ I¨ìÎÚT8Ýž*ô¬ƒ¦PÎz¼£Û Ï?Ñí§E{júu¬ ™Œafk (=VôXuÏ ½Ç#2öÊ3Ïcæ9›<sa㵤]T£´P{9B†ÚB£2ÖWF¼EÙ ÿÙtòù ¨Ê °²“ÁÙË íûZ#>¢¢ùêï’ž•af×a¶HŒ¬ûXúÛ4[™3âªÏŸO; ¸ø˜¡0³vuìoc2gj³’º&‹W|Zu7áÐÑ0899àÙ'æ¢}p`£÷µyûüõïNiyõ÷K`eyóÞsk+ÏÍV¡Rcéw«—˜‚ ?¼öü“°·³å¿†DD­ˆÎÀ:`=²în¥÷p2â ¶ì܇ËéY0w`™L?Ìœ2}{ug#$"""""ªëo§–<˜oKÈÍk <+Ü:“œœÜfìÁY—ÜT-Nm/iºƒ‰À…PcHêêkï¶Æ ðzƒSƒ8s º×çÔçÝáÛ¡î0ÇÖIŽþ“n¨ØQ‡«Õí.»:ÃËSê-CS”¹¤@´ •çI¦¾àKÓvæìe†±¸´PË*{hM¹¹pÕ÷3c÷þ#Pk4ÈÉÍÇŽ=ye¼ýw& 1—â¡Õj—Œ°Ó‘¬"¢VF/²X¬»[å=Dž‹Á7+Ö"5-£Ñ& ¤¤¥cé÷?ãb\"!QZ´§¦™…¿–HQA¸Å*J§ñÛÙ4ÝúÙÀ3À*¥ÑÇ”8ðk!ôÚ¦ý«ùÂq%ÔìDsüú{ƒZ_„¶½¬ááoGûÜ)Ñ*d'i`0ˆ°qÃ#ÀÞÁÆ÷súÂÙôX5bO•£ã2ྷ<QŽœ Ì-dèjï¶(+ÒÃÎYÞle>°®|ê A´éd‰çhƒ„Èr¨Ê pö4Gp+ˆ" T`ëØÜ¹~U»0¶x¿–Ò¼£­…¹¹ép¸–u\Z¦ÄžGÇŽ€­5¯ ­Ìö=¡R©Ñ¯WwøûÖ¹…¥EƒÎ7QsY¾z=Ž…ž†·§¾Zü.+ä6£,¯À'K¾¢¤ ^xmƒšüñI)XúÝOprtÀÂ×_¸-ÿ=bÛWQ1—°sßa$&§B¥RÃÞÎm|½ñèC³áåáκã{¨eóö=M¾Ï¿·ìÄ{¯¿À1ÑÌZú€m{Y#5F%-K#s6÷µ0pªi¯¾¡³¶¥¤Á¤¦Bđߋqä÷âf/oz¬Š<=Ýá_j´ eE×?1Œ^+â·÷³0óUv· °›»Õž¯²)¦8Ýòm>rõ‚O; @:ô³A‡~Õ=6348{ wÏwm¶2§Çª±}y>&?ãAØ8ÊÐ}¤]õþuÀ¿ËrѶ— z±kÑößq€M«»ØÛÙâÑ9³qøøI8:Øãž©ëÜîdx$6mÛ >dCÍV&#+þÚpws©7ÔìӣƎЏ„d´Áà}XytËŠ8sËWÿ†Š æÞ7ÇŽ`¥Üd‰É©HKÏ”ÎOs„šÿ†¢¤Š’R$¥¤¡[—ެøVF©1`a`Tˆ-¾yÄç–(÷¾Cǰfýß&ëŠ%¨P©àìäÈKuJIK—ÿðÕ'prlÜè7EÅ <·à}@|bòm_o‡Ž…aÕ/o¿úìmw-¾‡ÓÿÅ¥¸D+P¡RÃÚÚ ¾ÞžèÙ­ ÆŽ [Û†ým˜‘•ƒÿûþ'dfç¢OÏnxíù'šµìié™8ލè‹(,*†J­ƒ½ÚùcÄÐAèÝ#äšû8~‡Ž…!9õ2*T*8ØÛ£}p ÆŽ†Ní›íø:'Ã#q&ê“S¡(-…N§‡½-üÛøbpÿÞ:°/d2/^DDDD·¨5» ±ÅÁߊ€h¨š³yÉäÀ˼àÛÞtØÏ‘sœÜÓ¿¾Ÿ ±þù‰2 šn¼}¬¬ÑûQ* øõÃl´ïcî#ìàl {9dr¥zä_Ö"6¼NÜø¼ j¥kÞÎDÿ»Ðõ.;¸úšCP˜­EÌ1%NnU Ç(ûf/óÙýeÈJÔ`ð Gvµ‚µ½å%z\¾¨Â‰M d'i`e#kæPÓ8쬂(Ýî²k•‚±#‡bìÈ¡WÿÃ4â,¯˜­ØÉð3 ÚN.—áÑ9³YatK3 øsólݵŸ•ÑÊ´›«3JJËУkç:·9zZ­£‡nÔ1z„tÂîý‡á`o@¿f{/7ZNºµTT¨°áï­?/<ûÄ\´ñõF±¢…EÅÙ€ê¥×Wÿð´±&“à\§ÓßöõvèXXõã£a·M¨™˜œ†Õ¿ý‰äÔ˵ÿÆU–#.!q ÉØø8ÞzåYøùx]ó;þʵ Vkš½ì¥eJüòû?=õ_­çŠŠˆ8sgÎcpÿÞxæñ¹Ëeu| øá§_Yëõ§#Ïátä9̘<³§ßÝäÇ?~2þÚ‚bEíѧŠ%(V” *ú" Û/? +KK^ÀˆˆˆˆnA-j:{™!¸§5’ÎV@„ Å>B3ö×8Õ±V Y% Ä }'8 |gI‹Öƒ²XOf¤\u›ý¿aÿ/EWÝæßeyøwYÞµ(ñˆ¨¸®rþ½$÷ºß›AœÜZ‚“[ë®S3óês}Õ^²,s•œd 6/­¿nÎì/ÙýeÍx– 0†÷ ˆîi Ç[ó¡ÅŠ\jäÜ>òVö+Xùmø«\Qq*â ˆî%¥eøvåZÄ\Š—BµFÊi%ìílñõç@¯7À̬öPó:k×ÿ o/F‡…;¶ÃOß|¹\Öl?ŽkŠrÞÑ`È™ýáN'ß[ã¦ñŸD)4xè¾R`îêâ WgžÔ¦ÕóW¥ãtb¼Í°ï VÊm$=3 I©077‡V«Eø™(”–)aog{Ë¿·Sgœzæff6¸?ú÷îoOXZZ"¿ GOœÆÞCÇPX¤ÀÒï~Â’ß®óßK½Þ€ oÁ®}‡öv()-kÖ²ÿ¼îœŽ<A0°o/ Ø~¾^0“Ë‘–ž‰MÛv#!)¡§#áéá^g0¹iÛn)Ð< &Ž7Wgäæ`ûîŒÂæí{àí鎡ƒú5Ùñ ö<†bE ì1zø`ôèÖî®.Œ½]·ï>€sÑŸ„5ëÿÆ3ÍᇑˆˆˆèV¼çp3:ôG$­€ñ>TU iŒ7›CÍ¡G¬+Bèf†ÎrÄÈ9ÆÝGصx¨y'sp¯nvå%·ó¬QÆ6]uÃuè=Í7lY~A!þݱQ1Q¬(­ :¶ ÆÝãF¢C» ü»}/þüw`Ê„Ñx`ÖT“×Ïyòeˆ•cùN7sîÀ– ÇÆ¶IÏÀKo}dòúú†}æææÈÎÍö]s ÅŠXYZ  †顃úÕySúç_ÿÀ#¡kk+üüíu¾÷õþ‹{IÇ[¿jÙÕ/zffHÏÌÆÖûp!6%¥ep°·C·.0}Ò8xz¸Ýй((,ÂÉð3ˆ¹´ôL”––A„{;`ÄÐ ²)*ú"ŽŸŒ@Br*ŠŠ0è pt´G ôéÙƒúõ†……9b’°î÷MHÏÌ–^»rͬ\³AZ®9LUl|>úâké¹/t 6nÚHI˨j<†Ø„$ØÚXãŧE·.q&*¦ÙËîè`·^~ºþ›GfrŒ6k7ü •Y9ð÷«ž3ùdÄhuÆÏì½Ó'Õ¹ûgMÁéÈs(,Rà¿3ç1°_¯&;¾»› fN_ÿ½AÀˆ!}¢(ârF&ºtlÏ%Ñ-ÆìfxÔ\g¬y+ ÆÁgQys¿yzk–äëáîoìMÔo¢B7+ÐïîêùNnïÞ‚-kägœ=PŠ¢ìºo@Œ™çoc³+-Ô##îv 5«zgŠ&í½9”–)ñÕ÷?Õ{S_E¬Û¸ ÖÖ TíímÑ¡]%¥ÈÉÍ—Ö´¹yõåùž^r:½ËV¬‘nÊd²Z_xd k‘áýô¾Y±V 4årôúêòhµZüßòÕøßÇïÀÍõúÏYÇöÁ°¶²„²ÜسÀÙÉ®.N¨¨P!3;Wêíz,ô4:´ ªõžEQIJå«s)þªÇiãë€6¾ÈÎÍC‡vAÐju&óöxy¸ÃÁ¡:hô½Æ\=W:!Ë–¯6é[W}]ˆÇâ/¿Ã¢÷˜üÊúJ~¶ÌdnALö­VkðýOëðõ瘓oÙihÚÚXÃËÓƒ™Ù9R»6¨ßuš/¾ù!ò аø½ô÷Ãáã'qäÄ)\ÎÈ‚Ao€«‹zõ芩ÇH¿ÞNMËÀîƒGs1EÅÆÞÆþm|1zø îßûªÇS©Õ8râNœŒ@Nn>Ô \œÐ­K'Œ5 >ÞžW-çg¼€6¾¸œ‘…¶ìBlB%¥ðóñÆ’ß2yMU¯èóbQ¬PÀÚÊ þm|1bè@ ÐÉ©—ñî'_ÂÛÓ_-~·ÞëFÄ™ó8x4—3²PRZ 'G´Á˜C¯9çUvN¶í>€è‹±(*VÀÊÒ~¾Þ9t †ê³ŸŸêaü½eæÞ7––Æ¡gkÎeÖŒ?r8‰ÿÎF#/¿*œáîêŒÎ0aÌðZGU Gbr*JJË`cmwWôïÓ#†¬·'À‘§°rÍôê‚×_| 9¹ùغk?Î_¸$õ¼ð÷ÃØCЧg7é=ï;ta§#‘‘•cìùìì„]»`ÚÝcë친—_ˆ—ÞúV––XýýT¨ÔرçNÿw9y°07ƒ§‡;† èƒñ£ï’zaGœ9CÇ”’†2¥övvèÐ6S&ŽFÛ €zc<_ó¤ÏDZÐÓø{ë.äå{Ã%§^ƃO¼dòÚ¯?ÿîn.×ï†"üLÒ3²P^¡‚£ƒ=|½=1lP? ì×»ÞžÇUÇ›3{&…˜Kñؽÿâ“Q^QGtîØ“Ç’nì+JJ±sï!Dž‹F^A!ðòtÇ€¾=1iÜÈZ½—nÄ–ˆ¼ûGà£Ùž¸§ÿÕç“üðïü}Êø}`Çp7–åÅ5™8W.mçb+Çk÷¸álª Tð¬JN½Œ}‡Žãb\ŠŠËdpuqF·.1zøz¿oÜèuóz…Ÿ9‡Ò2%A@ß^ÝPXTŒû!=3 I©hPïkß[¼‰É©èÙ­ Þxi~½ÛUäbgkƒ¿þ¬ÎmÊ+*°cÏ!„GF!/¿‚`ü¬ ìÛÆŒ€……9{î ¨ÔêZÿÖÜ(;[[“¿¯4}ÒX+0yü(i4¾uܳpsu1¹¾ÕŸ,]7ëû[ÊËÃþ~>HKÏDä¹h“PóFß ¿ok\ŸE‘× """¢[ÑM 5ý:Z¢ûH;D*“fÓk̲ٔÎ)“B¥Ñ;côÃεž§¦1`²†ÎrD~ºY‰çê ©0ÀÊV†ö}màP}#åðïE0èoÇZ¨jÑÆ^šÝGÚÁ¯cóÌ'µuç>(•Õ7B:µÇ¼gÁÇËŠ’R9~ mÙ‰Š U£ö?°o/ ìÛ ‡Ž…aÕ/¥õ/?óXƒn<«Õ¨ÕÜ5¸?fN7W(JJñÏÖ]Øø„´ÝѧZ$ÔÔjµÐjµ˜5m"ÆŽ{;[äæ`íú¿qöü©Ì›¶íÆS“ub~g8~«Öm¬uÍÌ/(D~A!’R/ãîq#MžS–Wà›kpþB¬ÉúÒ2%JË”HLNÃν‡ðÂüyWí ‘•˜Kñøò›MzŒ)JJ}QÑqßÌÉ=|ýï[¤¥gš¼>7¯û‡x^´ð5“›~5©Ôj$¥¤á›k‘›_`r}LJICRJÎÅ\›/ÍÇŠÕëq,,¼V{<ygÏãÕçGï]T·§þ; QaaaF ¹\g'ÓÄryÓÍy¬R«‘œz߯Z‡ÌìÜ+ÎgŽD ôt$^xjôíyCå<~+Ö¬¯us5'79¹ù İÁýñøG¿¢ IDATC÷¢é%K3ãg°°Lç~΀Rc@…FĹTmÊÅ£#œñî9°µ’A«•¦ÂÛ³ñçKþ¦Ÿ!Xð[öD¿Ëe€«Jˆ´|-ÒòØö_ ¾{ÔƒÚÛÔY¹€ZAc¹ÚC?žfÕדrïý™ƒÍá%0“A*Z¾kátB9Ö=×Fzÿ7ÔNTjìÜgÂÞÆÚJúQRÍ›ñWž(.V ;'Ÿ.ýùEÕçÄÒÂä†yZz&¾üv•ÉжÆóŠQXTŒób±kÿ¼òìãWý1UFV¶îÚÿl3Y_PX„ãaá8qo¼4V–øbÙ ”ÕønXõ$õrοˆ…¯?ßd#ŒïaϷ桴€Íካ†š»ÎÛØ€vÖR  fržNfèäm‰]lqw/ØZ 8›ª]›(Šøýï­Ø¾ç`­çÒ3³‘ž™½‡ŽaÎìé˜0fx“_7¯×¡£a€®;ÀÙÉÎNŽðöô@VN. »j¨ÙT²sò°èËïPXTl²>%-)ié8|â^xj^³ C›Pý#Š6¾µô!“ÉðøÜ{QëbÝ T}wPëGTI)ÆYú_umƒ–ž‰¤?ÊlŠã7ÄÅʰ‚¿ëüá'µf7óàcqAÜér¨”i¸N•aPS Û¢@çÁ¶ðn[û—éñj„má/€›š›Ÿ9Üüê¹q'Gÿ,ÆÙý·a˜\Ùÿ'ÂÊV†±¸4Ó¡D“áñœ°à…§¤ÞKÎNŽ˜>y´:6oßsÓª¤}Û Ì¯1Ôª£ƒ=3c‘•#Ý@h)CöÅÌ)¤e7W¼òÜãxíÝÅÒMÇ“ágðøÜ{uÓo\=[@_Ü5¤?vï?ÀxƒQE“`h÷#Òck+K,|ýyi.kk«Ê¹`šwˆ¤ªá ªÜ7c’É{òpsÅsO>ŒÜÿgï¾Ãã(¯¾g¶H»«.«Xî6ƽ7l ¦›n @H …—$¤@*!•'yHHHð„„’PB€Ð»iÆ`ãnãŽ{·¬Þ·hwfÞ?VZKV±ŒÛÊþ}®Ë igwÚ=eçÜçÜålÞº€wçÎçšYuº½¾vÓ Œ14ñûÈa§rç¯àþIümûÎÝ­‚š-;9Y™­2YLÓdôÈaŸ¸T0ÀãO=O(æªË.dÚ” de¦S^QÅ+³ßeÞ‚%TTVqÏŸþƶ»èÛ§ˆkf] ñ‡4›¶lã‘ÿAÏÂ|ìßîr®^»·Þ›‡×ë᲋ÎcøÐSðx<­2÷—$š™é|öšYŒ1·ËÅÞ’RÞš3y –°výÆN·Is@3Åëå³×\ÎÔÉH ø©¬ªæõ·ÞãÕ7çðÖœyäåæpé…ç¶zï¶»xà¡Ç°,›ì¬L>÷é+=r(n—›}¥e¼7o!o¼=ϺIyú^¿q ÷ÿíÇ!';“YŸÏÁƒðz<”UT²iË6LÓ$5e'Û¶ùãŸf݆M†Á%œÍô©“ÈËÍ!ް~ãfþû«”–Uð›{䮟~¯Ãheå•ÜûÀÃõ,àÚ+/a`ÿ¾X–Åú›yô?ÏQS[Ç3/¾Æâe+Ù½wW^:“©“ããÉVVU3ûxgî|jëêyòÙ—ùÆÍ_èp]ïþã_p¹\|募eÔˆ!x½^ví)æßO¿ÀÖí;Yµf=wþú^6mÝΔ‰c¹ø‚³)*, !dÙGkxòÙ—‰F£üãñÿ2vÔðÇÖmé{ß¼ 1–VßÞE‰ì·£åî?þ…Æh”뮺”‰ãF“•Ium-Ë?ZÃ_|ÆÆ(=ú$cF Kì×C]ÎÕë6$ÚM\}ÅEœ:h^¯‡’Òræ|°€·ß›Ï.Çák-Æ;\.3~ýx~I-Ã{§rïŠøh{ˆÿº›E›ƒ”×ÅøÞ¥=øâŒl}¿šß¾\ƺÝöVÅ(ÊÞÿàÕu‰€æg¦eò­ {î‹ïÓ•;Â|÷ñböUÇøéS%¼öÃþ­ÍzçzXøËA­þöÙûw±jg׃Rnb6<½ †Õ;Ãüìª|.Ÿ˜AªÇ ¢ÞâWÏ—2{U=kwGxeyÝA³»"ðó§ßÜ À+³ßå‰ÿ¾Àõ³Nƒì%¥åüîþ¿QQYÍYÓOcò„1¤§¥ ï_ßêšZ~ý‡¨©­#-àçS³.bÜè¤ÔÔÖ±tÅ*ž{y6Ûvìâî?>À]?û>)Þö³h—¬XECCi“ÇsÑùgSXG]}=‹—~Ä_|h4ʃÿü7±˜…iš|ùóŸfôˆaøRSØ»¯„'žy‰ ›¶²aóVÞ›wä:’¥z .—ÁVóÑö0;Ê£ôëÑþýÿìUu4„ヮ=-«ÕkþRQÒÞÚ/\º‚_{‹]»‹[unºê²™\=ëâ¤XÆg^|=М0v—\p6½{õĶmvìÚÃK¯¿ÍÚõãÕ[RS™1}Ê=oвòJÖ4Ý‹œ1uRâïgLÄÓ/¼Ê‚ÅËùüuW%¾Ï Ñh”ßþéA*«ªq¹L®¼t&Ó§N"= ¢ªšEK?â¥×Þâï¹ÿ¨Ì¿¡!È£ÿyˆwP?v$ÝÉŠUkèÕ³€œìÖÇrsg©¼ƒT¼iî˜WRZ†mÛ]ºèÊüfÇÎ=¼öf¼#ËÔÉãÉÌH׃‘nÈ<ž3÷g˜\þ­x&S< ÏÔtŽp/DÛ‚G~\Ìÿ­¡bO”X£Cùî(sÿSÍ£?Ù‡£ê³GÌ¿~T̼gjؾ:Lm¹E¬ÑÁ±!t(Ýeéëu<øí=Ì}²ú„[w'™whŽS]q[þŒ£s˜•–UPS[—ø}úiÛ}pÞY§×írö§µÉè2 ƒ‘-JXFc±c6.Þ´)ÚüÍãv·Êl G"‰€ë‘Ô2 ömÂ-Ö¹¬¼²U‰ßéS''šÇÒš'Ó49û̶> Ãàü³¦'~¯ovZ277'»U@³Ùèá­ÿVw@fIË á‡‹—óУOµê}¸ê‚|öš+¸zÖEæã÷ùèÛ»ˆ[nº!QVsëöäædóóÛoeü˜df¤“™‘ÎÄq£ùÆÍŸßÿ€eåš6Ÿÿôó¯PU]CJŠ—÷Œ3ǃaôí]Ä÷¾y3=r³yí­9df¤q×ϾÏÕ³.bøÁ ØŸýú$¦yò¹WˆÅ,Ün?þÞ×9cê$23Ò ü ØŸ[nºKfžC(ÜqÆÁÂ¥+š·|ùsœö¤âYY9ÙY\íL/%úÌK¯·É^xòÙ—±,;¾ ßý:§M‡ßçÃëõзwŸ¿î*f]|>Ñh4)ÏßÍʹ9ÙÜõÓïsþÙgзw…yŒ>„«.»+.¹ Õûæ-\ʺ ñ¶ãõ×ðÙkfÑ·w>_*9Ù™œ>e¿øÑwÈÉÎL:[†””~òýo2fä0ÒÓdef0uÒx¾ú¥ë°,›m;vñùë®âš+.¦wQ!~ŸÞE=¹és×&J¯Xµ¶Ó{©†`ˆÜúfLŸBNvi?ÃNÄnýJâ:²iëv&Oí_½‘ÁûðûÈï‘ËEçÍàÊKãÛ¡²ªš»ö$íu¹®¾oíK\~ñùõ,ÀçK¥gA>—Ì<‡Ï^=+±-Öe{(íæáÇžÂq òøŸ;ncòø1defà÷ùЯ_ºáZ>Ý”ÉþÁ‚%­² û&¾éÒZRãæâqÁ¤A> 2ÜØN<ƒóógƯ;—ŽßÿàvKIëëí[«ãÍì€ÉWä'šcú¥rÛEñ{õ}51VÅÌ9£i…–l q÷g ¹vj&©žøßrÓ\üï§ Ë6ïã†ãÚ¶/_IIY9·ßúnþâg;j8ƒôed‹2ÃO>û25µu¸\.~ü½o0óœ3Éï‘‹Ï—JaA—^x.·ßöU Ã`ï¾Rž}éŽÙ† Çâ7AúÆË±ççqùÅçsqÓ„åUÔÖÕsÇ·oáœ3§Ñ#7;~ 4€|ë+‰óùòv®W‡ãS§í¿Wyqim‡Ó=¿¤6±/Ï™Ö-îí—¯\ËŸþú/vìÜÓfø„Ù?ËXZVÁ ¯¾ ÀÔIãùî7¾ÌÐS‘𓑞ƨáC¸ãÛ_cì¨áñïjÿy†ÚºúãvÞœ3/ž¥™š’¤ cZÜ÷NL܃/X²ü¨n³wæ~Ⱦ’x/Ýp-W]vaâØì]Tȧ.¿ÛnùR§÷L] …h†¨©­cÇÎ=¼úæ~ðó»Ù¹{/E= ¸ýÖ¯v:„C²Ùº}'+Vůcœsf«×"‘ÆÄq’žÞù1žÑôºeÙ¡¢PgóoõüǶiÆ·}Uu 6måßÿ}‘Ÿýú„#ÆÉM7\«‡7""""ÝÔq¿ƒ2ÙÏ´+3ùðùšDéYÃ0âãlÁùD#ï=QÅ{OTi¯Eû¶5²o[ãI·Þû3îš›À´+3<ÑwÔæY\Òº,Ô€þ}Ú.;+“ÌŒôVÐc©£òCìb–EÊ1XžŽ²¤ôk=>PIi9}{aYV‡_¶MÓ$ào½·ïÜÍû.fãæm””•‡[Cyàîf{÷µ¢žzʀ㲿vï)Nü\X×fýš : «°¤´ Ú \ÆÛ@ûm3ðãq»%Uñ’™ç&JDA¼dïÜù‹šÆ:šÑîx~‡"%ÅÛaÐÊ„1lÙÏDyî™íf# 9e éiÔÖÕS\RÖê5˲˜¿pž;£Ý²‚n·‹ Î>ƒ'žy‰7n¡ªº¦Ã@öWn¼žü¹í¾ÖÐL<¤žqúzõlwº«.»·æ|ÐáøCïÏ_ ij«'o¿LíŜ͂%ËilŒ²|åÚÄx‰µuõ‰ò«gLÜá¸]—]t.¯Ì~÷ˆƒy¸6lÚJiY<»àš+.îrÏýwšÊh÷,Èï0ó)#=+/½‡{Š-Ûv²kO1}zµ¿Î›q:¾Ô¶mmÌÈa¤x½D üÎkâ¸Ñ¬^·P8BMm]‡ã:¸UP¼å²;õ”DàmÖÅç·ûþIãÇðô󝯝EûJÛý¬d0x`ÿ³¹Ï˜6™=ñLüü[\ãýóW¯Ûh7W_~Q‡ãW_:ó\Þš3ʪjæ|° \8R2ý&Êö·›Âl7%µ1FõMM>sÒ\¤x "Q‡ºPëãï¾/ô¤.dÓÐh'¦oÕ®î¿쮈2eï¨î·!=½œ7ªíqŸ×`L¿Tæ}dOåñï1ëâó;l_áH„ù‹–%ÎËýúôj]dê¤q|¸x9ïÏ_ħ¯¼´Ã ÑKfžÓîß'OËËo¼ÀØQÃè×·í¼|¾TFÂÂ¥+ÚÜ?‰ý5ªO*«w…yqY-ߘ™Û¦í(²lk¼´ï•“3ð¸è:«t2óÜ3“bßý`Aâ{Èõ×Îêð~õ†O_ÉG«×‰4²`ñò—ÿhž7Çáýù‹â÷YǶÊLðS±~ãæ|°³¦ŸvÔ¶YsYõ¢Âüç3nô† ȆM[k^ßüÁmJÚ÷,Èçÿ}á:¦M™Ðavv2 …#<ðÐc8ŽC¿>½ÚÜ‹´ÌT?ØØ½Þ¯‡Ã‘D§‹Ã™K»vsÇ/~Ûæï£†aæ¹3?f„܈ˆˆˆtcIÑ-ðœ²)ÞaÛÊ0`6}1£©”ç‘-E+rdµÄ;`4µ×£S9ç†ì£:ç`Ó¸OÍ2Ò;~Ÿž–vÜ‚ši¥ÌБðû;ØFÖÛ·iìË•k>æw÷ÿ­Ý÷ôí]ÄÝwÞÄÔ<ñÌK¼ÚÎxF]qàøWYÇ©RËåÈ褗uæ¯UÕtœ‘•ÙqÆigí`ü˜|ãÿ}ž‡:ñ@Ȳ,æ/ZÆüEË6ä>÷é+éß·÷'Z×AýûuØ;>'gÿñ;ä”~FnN6µuõ„íXmÚ²=цZfî¨w‹àÖÞ}¥í/E…ùŒÚqÙá­;v%äãFw\ÂÌ—šÂ ýX¿as›×,ËN%;]ÞöïÛ¿ Ûw¶Úo‰g¯õN”.NkZ”å8nT—ÞÓØe뎉unoŒÑ–ŸùðcOñ,ÊŽ‚šCNÔágädgQ\RÊ ý:,õœÛ¢Ý†ÂლC;™OnN¼”›×ëéðØjž&>ŸɪeE€öއ€ßGC0Dð®ÃÇ-:]ŒÝq»w¹LÆÁÛïÍç£Õëøz楷>55™—Ñúï©MAÍF«í}uºÏl•¡Ùê¸õîÿ{8zôË›LØñÃíl¼í‡¢Ç¿ÌÊy-*hÓ–í‰Îwvâ¸Ñ|¸x9µuõlÛ±«Ýñ].“Sô?èñxj§×«øtá£pÌ~jJ&«w…)©Ž±pSi§¶Þ‡Ï/‰WY0 ¸fJÝEËáøý/;<§OoŒ_Óû÷íÝi)΢Â|Šz°·¸„«×uÔ<šçÍV¯K qÐÞXâÓ§NbýÆ-lÚ²=Å%ôêYpÄ·Wcc4±_ÇîüÚ=rØÃj¶§¸¤”'žy‰›·qåe3;ì´–L,Ë⾿þ“½ûJñùR¹õk7¶¹‡oU!â •·œCüNØ•ùwÅêuØWZÆæmÛ¹ü¢ó>Q e9þ’"¨i˜pÍ ø×öRº#ÿráØ‰RžG4eSäHjjŸN"AÓ!¿¯‡kn/ˆÇãåqÔÉqÒr,ÂcÍã9º§™ÆC,eiwð%Û>̲×ïÍ[Ø* ™ðsÞYÓØ¿¿Ó4Y¸tE‡åÊŒCÙ¡GQWÇ=p{ÙvÇÛÏ{m`Ú” Œ1”×ßzwæÎ§®~ÉÁõ6óÓ»þÀ­_ý"Ç>äÏnù ¸Ívhñ ¤³¬½æ*nŠªý%¶ïúýŸ»´<u<èÛ»W§ïk  ga^§Óæçå¶Ô¬­«K<€þ•Ù]‡·åòV¶Xßž…Y†IÔl.kœ™‘Žßçëò{š³°{0žêš?7 QUUóÉÚdSöVgí±e†—ÓÉ1™›ÝI›ŽŸ2ÒÓ:|ØÛòø8ÒCIÍcvu|mt7m«O k>ö²23:ÌÒ<ð¸ˆF£Ô7»”•ÒUi#›w[ŠÛhÿ²ÒÎ.ÛWãÉ«Y¼9DiMŒòº±ã7̸:ùÎ`t´ ÇTFzZ§®–ç境œZž?*««¶AͬÌÌ38[^·»r½:ÇìEcÓùíË¥#/,­mÔ´lx©©,íé§úé•Ó}Jm¶¬*ŒÍ–mí`ס涸·¸„ªªêãrÞœóA¼ôl àÇçKeÇÎÖåË ò›:Š:Ìy7|úŠ#¾½*««Ç@aAþAï™×Ã÷ÿ&Ñ–ê‚ï+å£Õëxû½ùÌ¿ˆÅËWò³ï«Ý ëdaÛ6þûc¬Z³·ÛÅw¾þe óÛÞo¶¥¹ KGZEp°ëgWçßR¿¾½xâ¡ûóª­«gÇ®½,Zöó,á…WÞdÙŠÕÜùÃÛ:I>Ió­2ÅoðÙŸòèOŠ©,Ž5=yqŽÛƒ}‘Î$Ê#72›üfº¹þÎBRüG¿Ýú( Z_ìpÚǾënìNœTU×ÒgÕÕ×·[RõÀ€RWÍÞš3/ñ³×ëág·ßÚ¦Ôí–í;º¼?kjj˶ÎÎÊ`÷Þâ¦eè8»÷Àí•~Ð(=-ÀµW^•—^ÀÜù‹yáÕÙ‰žþ–eñà?Ÿ`Ôˆ¡‡\ÂËëõtiºŽ$w¦¾Eð5ðw©oŽ«ƒç@çm±eÖÍÁzœwôzË`qjJJ—:B´,ÖrLÜOº ÇS}C|ýSS»¾l‘ÆÆméàm/5ÕK0¢®¾¾KÛôPÛÉ¡ðt¡í¯lú#É{”Ëú5‹ÜÞxÖmÛ½·ÕuèH5ݮûçøpco?º—†HüAnš‹‘}SIO51 Ër˜¿1xìv\7¸õï¨êC{çăµÃ–çĺº†O|n8Rç‡O´=R .›Î3‹jygM=u!{ÿø§(­¯9- 9²šÛZWîšÛZËkþ±:oÖÔÖ±|åZ ^6ÿG¿¸§Óé?X°˜Ï\}Y—;Ûuy{…[ܯ¤»û—Ë•—}詃8ï¬ÓùÉÿþžÚºzzì)~ùãï$íw°~œ…KWàr™|ë+_ì°zˆ/5·ÛE,fQ×ɸ­@b\WÃ0Z]gþÞóx<äæd“›“Íø1#˜:i¿½ïAví)æ…Wßä3W_®‰ˆˆˆH7“T]eÓs\|ñ×E<þóbJwDÛ<Õpp0C™›rųˆÙ+ûS4)ìåºÈ<6” ò{´ú}û®ÝLž0¦Ít±˜EYye·ÛÒ-bD"D"í>8ÞºýÐ2¾vîÚÛnïÞ3Ç âÓŒ3"ÑÓ·3Í@€COmwìÎêN°îÏ[¶1mÊ„.¶Ê#wRìY˜Ÿ(Cº¯´¬ÃŒ¢-l¯¾}Ž~sÇÃygÎÓ&ñà?ž`áÒ4ClÞºãrM-ƒÔ¿üñwÚ£üp´<.ZÚÚÓQ–þÏ]w%gŸ1õ/Cô ÙÓ±ƒôÞ?.û«©CË@ÄAïYZ”¬Žt¡ãHs™Veœ8šÛ@WÊy¶œÆ—š…µA›i?ߢ~(m£E‰öƒu,kÕ6ºñùáSS2yfQ-‘¨Ãë+ë¸ö´x9õçÇï} 2Üœ5< ÆqÄÏCi4C]:%®CÇá4wþ¢N;)¶97Õ7°tÅj¦Lû‰æîàzÞò~¥ñ ÷L–}ôÆÿî‘›ÃYÓOã¥×ßf˶ÔÖÕw:ìÃñ`Û6yøq>\´ Ó4ùæÍWF1 ƒÂü7¯Œ%]Ó#7;qÎmhè<“±¹¤x½Iõàúƒõ Ôã†ÛgåqÚ`›")5!K;ûPÛF‹ñm[Ž?Ü~ÛØÿz~7>?Œê“Êžñû‘—Åï_*ê-残gd]5%—©¶q¤å6‡ö¤µœ&/ïØ·³÷æ-`ôˆ¡<ñÐ}þ{ô¯HÜÏizOKÍ秃H; ªegí¿ß)9Ø=ÓQ¾_ÉlQÒ8Ùîc›Šó-ÃårqÛ×nl·óìôï À–m;;n˶xçÈAMÓ©ùê}_0ÒIDDDD¤Jʯ–)~ƒY·öàúŸž`Øœ‰ÔjG;PŽ.ÇiÝΚŒ·G‡Ì<×ÿ¼€+nËÛzl#î†a0mòþL¾òŠJîð_‰@˜eY,^¶’þû¿‡=¯œ¬ÌV¿?óÒëÔ7=À­®©m•¥x¤ôïÛ»ÕïüçÖ®ßH,f‰4²`Érþúòç._¹†GŸ|ŽÒò ,Ëbמb~÷§[=¸˜:iü!—ÍËÝÿ€hÕš).Ù*-«àž?=HiYE§ûsÆéSZ=Üøßßý«Ö¬'‰ …Ù±sϼø·þð­Þ›‘žÖjyß~o^âz(>¤ñ ‡H¿Y—Ͼô:¯½5‡†† Žã°¯¤ŒûÿöÛvìJLsÎSJIÑŸÞõž~þUvïmý Î²læ/\ÖêoùyÉõ xðÀþøšÊš-\²â¨ÎkЀ~‰t+Û þï?Ÿ9lÚº½Ý×\.3‘éºdÙÊCʦˆ/CßVí¿#–e%d%“¡§Jü¼låš®Ý@™&cG ŸW>ZÓé8uKZth6䔓ûƳé\•Œ»‡ºœãGìR»±,‹åM¯<0©Jûî­Ú¿~cûµ_êzÁ¦ rhNØ?˜Yºbu§Ó.Y±*þý'ÅË€~½»õzª);såö0eu³WÕ³Á4àS“3OØýݲd{õa Ð<¾óŸÙ™ñ£G°s÷^JË;¾ÏܽwûJÊÞâšw,¬ß°91ïsΜvÐmÙ|?¼zíÇTTVµz½9Ë´¼“LÀh4ÊÆM[ÛÎâMTSY¹v}§Ë²i󶣺]víÞ›ø““<¥™[ãcXÞÔå ÉqM÷EÛwîîp•”–³³i݇ tDçßåm¿'þݵGnŽ.X""""Ýñ;X2/ÜÀ±>¾z_/^ûkkçÅÇþH„œÖãm:M‹?Øm3ñ‘ŽØFâåe›ÛV¢‰5µ·–aËÓ\üÕ\RÇïáä¬KÎçý%ÊI-]±š¥+Vø ‡#X–EJŠÇsÐ’êRSê IDAT9e`~ ÁxoÖUkÖsó­wàr¹°,‹óÏ>ƒ¯¿úˆ®Û˜‘ÃÈÌHO+«j¸ë÷Æ0ŒVÁƒô´@§cµç·çòÆÛsÛ}-5%…«.›yÈË;qÜ(^™ý.ïõûýŸþšÞE…„#ÊÊ+q‡¢žìí$£kÖÅç³pé Ê+âpö—p÷½mÛjH£1M“QÇòÑêu”WTñýŸþ ÛM4£wQ!¿ýÅ];" ƒ¯ÿ¿Ïñã_üŽh,†eÙ<þÔ <þÔ m¶=Ä3L¯¾â’£Ò¾Ë+*yáÕ7yáÕ7 ø}ôÈÍÁ4MJË+ZeE èׇ¾½‹’êÌâõz˜6e"ïÌϼ…K™:y|"ÖÇq:,¿u0éiFʪ5ëy÷ý¹è¼í>¤yÿÃÅ­˜èì3§²fýFJË+xê¹W:-Çuàòff¤3lÈ)¬ß°™wßÿ Ï›‘Èbkéí÷æ4£íx9lHâ|óÌ ¯1fä°V™Ó9çÌ©,ûh5¥å¼ñÎû\tÞŒ6ÓÔÔÖñü+oЯo/ìR_u3ÓÓxgŽÊŠw—åì×·úõaÛŽ]<ûÒëL3’@;åº_~ýD ã¼³¦'Õz¦xöÇu!›ž~à±vÙ¸ ~ÿJ9‘¨ÃüxguŸ~ÚDž|öevìÜÃâå+™<¾màÞâ–,_õ‰Ö·²ª†œì΃øÛwîfÞÂ%@¼ªÇÇGË€¢Çãá»ßø2£G íòû'ŒEVfÕ5µ<ýÂkÜrÓ m¦yò¹—ãׯ—Ó&;bóß_^¹óŽ–oÍ™—ÈÒt„ƒ¥""""rl$} Ô€ÉUßÍãÊïä‘™ßâf¿Å˜†ŽMíÿçð‘Ž8mojGñ,ÍÖef2óÝ\ù<®únÞq hB¼tÎm·Ü„Çãiõ÷†† –eáv»øæÍ_À4/‹ÔívñÙkfµùûá–µíŒÇãák7ÝÐfÝZÕúö.â§?øf—?sÔð!œ9mr‡¯{½¾ýõ›Z•óìªY—\@¯ž­¾”ïܽ—Ò² Ça`ÿ¾üÏß&¯GÇ=‚??üö-ô,Èït^í¿®ûÔe¤x[?t~ÂL¨ÞE=ùé¾Eöº4û÷íÍO¾ÿ̓><8‚!vìÚö»ZÅòórùÖW¾˜”g—Ï\}ù=rq‡ßÝÿwùϳlÚ²šÚ:jjëØ½·˜y —rï_þÁŸzì°æõé+/Á4M"‘F~yÏý,]±šHc#¶mSRZγ/½ÁC>Ù¦´4uÒx&?Üyùw¸çOã£Õ먬ª¡®¾}¥e¬Xµ–<þ4ßûɯÚY†K1 ƒp$Â/ïù‹–~D}CHc#»÷óäs¯ðè“Ï%å˜q.—ÉMŸ»€Òò ~z×ïyÿÃÅì+)£²ªší;wóÎÜùüï=ÿ×*‹uÜèL?m"?õ<ÿ~úvïÝG¤±‘Úºz.YÁwßKuM-.—‹/þª;dð@ >þëƒÿz‚ªê,˦´¼"©ÊÀuu9¿vÓõxÜnÊÊ+¹óî{Y²|uõ DÙ¹{/ÿzâž~áU&ŽÍÄq£’jŒ°?;ó_ïWa·8Ío+rÓßv3ù?Ùx°mcq#Ò5WϺˆžùضͯþð³ß}ŸŠÊ*£”•Wòê›søí}â8y=r¸êò‹ºý:§ûLfŽŽ—Wž½ªŽe[ãÇÊ5S2Oè}}Å%ç…ösq—¦ËÌHçóŸ¹ €%ËWñûÿû;6o%  …X¿a3¿¹÷¯‰a®»úr23ÒÙ¶ †B,j ÜŸ9mr—÷…ùy‰êsç/luÿÙ<Ʀã8üñ‡Y¼l%Õ5µ„#vìÜãO>Ç_x­Ó "œsF¢ãÕ=ÆìwÞ§¶®Çq¨©­cî¼Eüòžû?qVý­?¼“Ÿÿê¼:û]>Þ¸…ʪ‚¡Õ5µlܼ'Ÿ{…ÿ¹û>b±xçÓkBçÀÇž|Ž»~ÿg~õû?t¼õ–ß]šŠ—]xn·‹u6uúϲößyÜn>}Õ¥Ì[°„ÿûû£lݾ“šÚ:6oÝÁ½ù‹–~ÔôÝéüVÃîüwîÚÃWn»ƒßÝÿwÞ›·m;vQS[G0¢¢²ŠV¯ã‡KT1*êYÀ93N×ÅJDDD¤ê6]fGž`äVÏm`Á‹5”lkº9oΞs 0œx“øCÿxö&‡S:ˆY6}96šÚŽa´Îö-èïå´YmÆ{=ÞF Âoî¼^}“Õë6P[WOzZ€áCsÅ%çÓ»¨'Ñèá—ù;ûŒ©dgeòÚ›sضc‘ÆF²23èÕ³ð¨=¤=b(¿þùxåwX³~#UÕ5x½zõ,`ÊÄqÌ<çLÜn9Ù™][óì3§rÚÄqŒ5Œwç~ÈŽ]{…Ãdfd0fä0f]rþ'Ï*à÷ñ‹—_}“…KWPQYEŠ7…‚üL<ž‹Î›Ëåbì¨á¼5g^‡ŸST˜ÏÝÿs;ïÏ_Äâe+Ù±kõ A\.=r²5bœ}F›÷õí]Ä]?û>Ͻüë>ÞD]}=i@bþ‡ê”ý¸ç—wðþüÅ,X²‚Ò²rꂤ§Я§MÇéS&Õ2Šw|ç.]Áª5SRVN(Æ0 - O¯žL7г§OÅëõ$åùÅïóqÇwnáOþ‹m;v1û÷™ýÎûíN;aìáCúõá«_ºž¿þãß”•Wò‡??Ôfšq£GÐ#7»Óö÷µ›n Åû4ó.eŪµ¬Xµ¶ÝéÚ LžzÊnþÂgøû£ORV^É}ýg›i¦M™À°SñðcO'Ýþš8n47^5=õ<¥e–·>°Êì—?ó,áÕ7çðê›sÚm ßúÊZ•é=YM7šAú²eÛN.YѪ<óÏo¿5Lì.ËÙ»¨'·û«Ü÷—²§¸„?>ðp»Ÿ7yü¾öå’ïþºw ŒNãÍUõ¼´´–¶‡8¥ÐKy­Åê]a&ðqǬ|Âûxku=/.­¥¬6ÆŒá®?=ÞèO³+xb^u›ÏFâšç®oà´ŸniõZÏ,7Ï·ß ÝÖS¼^îøÎ-üñ‡Ù¶c<ñ,<ñl›ézò½oÞLÀï;!Öûê)™¼´¬Ž>Žw@ê™ífúÐÎ3ßñ\)Ï/i[¶ÕjÊ .®Š1îŽÍ­^;sh€û¾Ð3)ÖyÜè|ó+_à¥×Þfçî½–#ïŒišôëÓ‹«g]”êuõ=Žðïÿ¾Èò•kY¾²íµÛ0 ®¹ââv+ Mó,MT‹9ûÌ©]~ß¹3NgíÇ›(¯¨bõº ‰l½¡§âü³Ïà­9P^QŽùG›÷2˜§Oæ/\ÇSSRøÞ7oæ×x€šÚ:ùϳ<òŸÖÇf~\®¼t&ÿzâ™O´Þ›¶nï°ä³¼9|õÆëé×·×ßî –¬ º¦–Âü¼N;´µ´¯¤,PxîåÙ<÷ò샾ïﺻÕùkÆéSØS\Â+o¼Ã‡‹–ñá¢emÞ3ý´‰Ìºøü#:Ã0ˆÅâåÞ—d(¡§âë_þÜ1é˜)""""G^·«4jF€Q3”êÝ:>^¤j_,ÐŒcK”5ÿi_Ë€w«ì·¦ö”]èfè?£ÏI'¿¯'i×£° ¯~éúv_klŒ¶Ê,ò¶óÅöß¿·Kó;jx§%4®¼t&W^zðò­—Î<‡KgžsÐéŠ ó¹ù‹Ÿétšÿ»ç‡´cú ìÇ«³ßM,ƒß—Jï^=9wÆéL›<>Q¢/öŒ>„9ï/`åšõTTVŽDø}ôëÓ‹©“ÛŽ·ëõz¸å¦8cê$漿€­ÛwRY]×㥰 ±£†3óÜ3»TÎö¤¸ñt»¸ã;·ðü+o²dùJ**«ñzÜä“™™Þ-—søÁÜóËñÞ X´l%eå„#2ÒÓ8uÐ@Κ>…Ñ#‡%í>ùÍg{rja%¯|TËžŠ(5A‹Þ9nŸ•ǵS2ñº ¾Y5A‹U;ìØbdßý"õáŽÇáµlÚ¼^±OŠöÞ#7›;︋—óÁ‚%ìÙ»ºúzü¾ø9å´Iã˜qú”n_v¶¥ñ| ,ð²µ$ÞõêÉ™¬`HÌrˆÆ:øz4ÉJ!­{Ë®ºèü³5b(ïÌÏšu(¯¬Âqr³³1l03ÏѪ¢È±2gÞ‚Äy²0?¯Ëï›4~4éiÔÖÕ3热JÞxýÕŒ:˜w?XÀ¶í;i†ðûRé×§Ó¦Là¬é§%ÆLììóž_þˆWf¿Ëò¦2òùy¹L?†K/<§ÃŽ]óû»~¼Kùxãf*«ª©­«' ãó¥’ž ßÞŒ5œ©“Ƶ©Hs$ÔÔÖ%Jž¯êŸ½úrF ›ï~À–m;¨­«ÇïKe@¿>œsæ´DÆí‘tê)¸ó‡·±hé 6oÛIMm-uuõ4F£¤d¤§1dð@&ŒŘ$¾&‹ˆˆˆÈÁÎ'íJšDj+,¶,R¾'JCµE°Ö&XkÑPÿ9Ö¨2´Ò>·×ÀŸaâÏpÈtáÏ0 d¹èÑËàñ~2r»ÿC¦Ý{÷ñƒŸýºÕƒ€óÛÉô‘ßßy’9, WÏîùå´AD’ÔÖmƒ#e úœÔmðpöÿg¿|kâç®v“Ǽ…Ky ix€¿þñ.2ÒÓºÅr´z¿½ïAî¾óö¤w^DDDDäp¹O„•ÈÈu1îütíM9é8ŽÓîøŠ-½ÿáâV¿ì¯ò‡"'«šÚxÏ}¿ß¯!""rŒ<ùÜ+¼ôÚ[\yéL®¹âbmnqÏT—ø¹;•‡ÞØTcðÀþ hŠˆˆˆÈ ÉÔ&龿-\Êïîÿ —¬ ¾!ØæõÅËW2ûí¹‰ß óóÔ9I56FÙ°i+/U,"""ÇÆ+o¼ÿÿìwµ1º‰Õë6ñ±/»S‰èM›ãAÍ Î=S;QDDDDNHnm‘î˶m–¯\Ëò•ñ1_²23ÈÎÊÄãqS^QEeUu«é¯¿vÖA3;E¤û©«oÀëõÒΘ¹Íž{e6 ÁcFi,!‘cyÏFµ1Ž3Çq¨®©%;+³ÃiV­YϪ5ë;jx·Y·XÌbã–ídf¤3eÂXíl9!)¨)r©®©¥º¦¶Íß=n77Þp ÆŽÒF9mݾ“¿<ü8§O™À¨CéÓ«'éii¸\&Å%¥¼þÖ\æ|°€>½z2yüm49éÄb1nýáÿ0eÂXÆI¿>½ÉÉÎÄëñPU]ÂÅËùâõrÉçt›us»]<ò—ßi'‹ˆˆˆÈ MAM‘nì´Iãð¸Ý¬Zû1»öSW_O}}h,Šßç£ga>#†žÊ¹3¦‘“¥ &r«­«çõ·çòz‹’Ó*,Èã;_ÿ2¦©êó"ÉÌlm†#²åämƒ‡»ÿÝn±˜Ä;fef|¢Ï©ª®iõ™rüÅbó-cþ¢eNãKMá›_ù"ùy¹Ú`"""""IÄpÇÑfé¾¢Ñ(K–¯båÚÙ±s7UÕ„ÃaÀ -à§oï"&ŒÅŒéS:-Q+"ÉaW¢ºC?lúøµNÖ6x¸ûÿ翾—M[¶Ñe2x ?¿ýV5°ãlíú,ýh5[·í¤´¼‚†`˲ñû}æç1jÄÎ?kz§%jEDDDDäøPPSDDDD$‰‡!di;.Ÿ z¦j;œ¬mðp÷ÿŠUk¹çO;¢Ëôãï}ƒC«‰ˆˆˆˆˆ|B jŠˆˆˆˆ$‘ê(T6j;®/dy´NÖ6x$öÿ‚%Ëyéµ·Ù¹{/Ÿôk³išôëÓ‹«g]ĸÑ#Ô¸DDDDDDƒ‚š"""""I$æÀΠ¶Ãáêë·¡íp²¶Aí‘©M """"’<ÜÜÚ‡#àV@ëdnƒÚÿ""""""'&5EDDDD’L®“ùdŒ¦í''gÔþ9q)¨)""""’dÜä§h;|ù©ÊÒ;™Û ö¿ˆˆˆˆˆÈ‰KAM‘$pCŽ2ÎI®.m‡“µ jÿ‹ˆˆˆˆˆœØ Çqm‘äÔ`AitÓÞÉ—  ü h”mPû_DDDDDä$ùþ¯ ¦ˆˆˆˆHr³¨l„º˜¶ÅÒ›² ]*9zR¶Aí‘“‡‚š"""""Ý„ 4Äâÿ¢6Äœ“+ƒÓ >^¢ÇŒ—F ¸5žÆÉÔµÿEDDDDDNn jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSÇVIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIjîUwh+ˆˆˆˆˆˆˆˆˆˆˆˆˆHÒR¦¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$5# :Ú Òlß[Öê÷þEyÚ(""""""""""""'ejŠˆˆˆˆˆˆˆˆˆˆˆˆHRsû|>méRSS[ý®¶+"""""""""""rrP¦¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©¹O– G"D£Ä¬±XŒX̶-lÛÁ¶m,ËÀåraš&¦i`š.Ünn··ËÇë!5%E­FDDDDDDDDDDDDä:aƒšŽã …h C‰ åÁX–Õé´.— ¿ßGÀïÇçóa†Z‘ˆˆˆˆˆˆˆˆˆˆˆˆÈQd8Žãœ(+ã8 Á¦@f–«ðûñ§¦ârXØ8Žm€a8&¸00l00ÛqˆÚ6 ‘F‚ÁýÏ0ðûýü~ÿIàŒÚPÒeAÅ ËÑ&"""""""""""Ò¸ Huƒßy>È÷ƒÇuü—«Û5mÛN2C¡P"éñxÈÊÈÄëráØ€ca91 × ¦Óôþ˜cã8–eáÂÀm˜xLn L Û40 “˜eQSSG4oHÃÀçó%œ¦yr WŠÁ¶(®[AL‘Ši@¯tèŸv/Ý:¨ ‡©®®! %þ–ž–†?Žc9Ä3.ãlì¦LÃ0â{€xvgó?ˆ']†“xÐÓŽYØ88.ÇØÿy.ÃE}Cúú†Ä2ø|>²²2ñ¥¦žÐ¸¸Ö”íÿ½0=üàvC̆˜ÿ§X§ˆˆˆˆˆˆˆˆˆˆˆHr3·ÿç1¡1åÁx¥Nˆ‡ÖFçAžÿ8-_w jZ–EYyÁ¦R°†aÓ#Óå¶ÀÄtâåd÷„µÁmǃ”MÿL LÓÄíöbš&¶m7Mk¶ vÚØX¸\.0ì–ÆŽÏÏ+fSQQ•úý~òzäÆßw‚Ù^›ªâ?÷ðÁ\h° .¦ƒ^DDDDDDDDDDDäDî¿ 6T@ESŽá°\è~ì—¥Û5ëêꩨ¬Ä¶m¼^Y9ÙXXÆþ¬LÃ1[ül:†M̈â8V<à ˜¸pa`âÂ0 ,ËÁvlÃŒgšF¼T­ab`[Ñv–(ÔÉgTWWÓØÅ4MrsrHOO;apI¬jÊИ=Ó¡$¬ŒL‘ä§ÂÞÚxÒÀøÈõãåè.AÍX,FYY9¡p€y=pÌx Í6ö_Ùœ¡ÿÙÄÀÆpL#†cF1Mp›.<†‰i8Q+ÅŠ9¤¤¦â&¶1 b&ئ ÛÃtp;OCŒoJ³iã8”•Wñ’´y=rq»Ýݺá†b0owüçAY€ÊFÐ""""""""""""'²/”ÔÁÎZp›0­¤Ãb¥Ý"¨Y_ß@yE¶m“žžFjÀmÛ8Øûë˶ÊÎ4‰glNS&¥ÑˆC#†ñlŒ¨…ÓhAc 'æàXñÀ£ãrc¤xÀëÁv›ÄL“.ÛlÊÉŒQãk:M¿;6†ÓØtlLÓ¤¡!D}CÓ4é‘›KZZ Û6Ø•¥PŒ—œ=µG|7±H„úšZjji¨¯%®'à±p1<˜¸1ðàÆå€i›˜X8XŽMزÙQ"Ø)<>?î?™9¤ø31Ý"Q Çå!ÅÀr Ba<4ã™[Ó±AMÛqaš&åX–MjJ ù¸\®nÑH—CuÆ@­ƒVDDDDDDDDDDDäd”âÄËÐ`tÞ±™§;Ù6B,£x_ Ñh”Ô”²³³°m 0M“h4Šã8¸  °£X¤¸ ÒÒ³ˆƒÔVT¬­¡®ºšHCö𹠼xˆW°õ`àÆÆ4 Lâ)‡Vc#.à Åå`6nÇ"ÖÅŽ…ˆ„ê(®­''¯€¬ø<©D‡X$„m¸ð4•ÅŰ;­ÉjÛ6=rs©ª®!‰°·x= p»ÝIß@#VÓ*Æ‘“§)¬Œ»y&U$ÍqJKˈF£~Òx@À1ñzS¨®«Åq,²2Ò0Mh¨¯ÁEZFu•%ïÚ á5 ü¦AŠÇEŠ×‹â6L܆ ¯éÂÄÀÄ`;€†Ç00\\Dq°m›˜£&TEq¨úºZ ŠúàÏÈ&bÛX–ÛãÅrìýclü9MÙ›ûÙ¶MVfuõ „B!JKËèÙ³0éKÑ65Ð9iÅšüBÇp¨Â¤ j–”–ŽDðù|¤8ŽÓ*ÐgY^¯¬–ea8~o †ÕˆÕPÏŽ­©-/#¬#=ÅKFj .ˆFp‚<)©¸LÓ…ËíÆÄÃÆqlÇÁc¤bÛ6–˶-°¢Ø±–_€òšvUUP[]EïƒÉÎ/ÂåñÐàr§b;6ñ€fk&o:ŽCzZ˲G"””–QXŸÔ ÔnZ ËÑÁ*"""""""""""r²jŽÅŽa"œ™,+_ZVF0$%ÅKzZ< y P(„ßç'H' …Hñ¸‰FÂlÛ´‘›·©¨C3ƒ IDAT«Æïvá÷€+Ål ‘B”€×Ý4–¦—™‚áJÁðx›þ¥€Û /†Û† Laâ5]xPM5™~™>/eûv³rù¶nú˜h$DšßOû5Y;ÞĎ㕉Çí& RZVÖ­ªˆˆˆˆˆˆˆˆˆˆˆˆœ|ŽG¬()25ƒÁ õõ ¸Ýn²23±m»ÝR¬¦é"³0qðzSq9ÔVW³{ÇvvnÞHzª‰ÏëÆërˆ…ØN¿×CÀçÃíqŠy1Œ — Ó厗5âåe—m8XØ8n ÓrÅÇí´ <˜˜¦‰]_‹™ê!#à§1f±»¤”5uõDbÃÆLÀpÀ4m¸IÛ¶ÉÉɦ¼¼‚úú~?@ ©ªªÏŠˆˆˆˆˆˆˆˆˆˆˆœ¼ŽG¬è¸gjÆb1JËÊè‘›³ ÍvøÓÔÔÔPWWCzº •ŠâÝìܸ–Ú²½ø±ñX‡qCxMi©>°jkëÁ4pL£Åÿ]8¦ ¦ †Ó•‚érc˜ ÃãXQ›p¸‘PC˜ÂyÔ–WRS²‚Ìý óÕV²sÓZÊöìÀÀJìFÇw§›Ú¶mzôÈ ¬¼‚X,¦£ADDDDDDDDDDDD¤Éqj–””bÛ6¹¹9X–Õé´•u5ääàñD*©Û·‹Es_Çl¨dtÿR£u˜¡:ÌH)Ž…a;„#1ǃǗF£¥‘0Q;ŠåÄpœøü ÃÀÄÄÄ…Ëðâ6Rp^LÃixq»RIq§ÐX×HVJ~Ç ¾¤o¤ŽyéX å¼ñÒ“˜V+Áå1±11]^—‡úú©¾4 Ã…aíþs'‘¥ZZZÖnù]‘“Ñq jÖÔÖil$55—yðEñx<4p™à6¶où˜ôT7™>N¨# cZQˆY8–mÛÄlˆ˜NÓ?§©Â­á˜† l0lÇ1â%iÛ Ç6ÀÓv0m 3ÖÑ f4ˆÇ‰’âvؼa¾T/ápÇC0܈ÛíÁ— Štý¼^n·›p$Bm]Z§ˆˆˆˆˆˆˆˆˆˆˆˆÇqLM˲¨¬¬ +3ã Yš^¯—êšrò3ÔÕT³aÃrý~ü>Ájܱ(††ÛËåÂvbX–…á²Á²1ÝdƳ3 p€¦LÉ–ÿ€6Ù’¶Ãpl l°-,+†å€Ûeâ3]¬[½ŠÁ#ÆaÅl<¦ +Áåò“’ê!ÔЀ7¥óÍí8¹9Ù””–QYYEZ €ËåR+iG£Õa¨‹@mcüwI~^dx!=²Râ¿«]© ˆÌq jVVUá899Ù] hbظ ÃvHñºY³q5U•ôÌ(ÄmB°b1L—‰aǧÃvÀ¶0 ‡xé×x Óè|V†mкD¬é`8ñá7MÓÀ°lÛÇÆãN!àò²{w {þ?{çÇUîÿÏÌl_­z±å÷Þän'Nï„!…v!r¹ÀïÒ.\ú½.n:I€4RIœf'îEͲ%¹õ®ÕöÝ)¿?fµÒZÕ’¬¸œÏóèÑîN;sæ™sÎ÷¼ï[}‚œqS#(²)šêª6hqR×uÒR=x;|´¶µ‘“-¬T @ @ âD5¨õ7aUÔÇÙz ›Cæ€Ói›òá‰[®„ Î|>Q3‹áóù‘e‹¢ :¤¡©¸lV$Í`oI)›C‹‹Ø…ˆ¡!ŠlŠ`€¤:2æI2Б0=#Í|–Zâ³$Ë’Ž,˲©bʲŒ¤((Š,™ái5 ÌÿYÂf‘ÙW¶‡«§Ì¤#Äe·£E#„ÃaR=n"±ð ÎÓn·#I~|>?éiiX­Va©@ @ à¼F7 ÚuÝ2w)䦘ž^,Xd%Q_gê5Tuˆé jÐ†æ „Tù¡Þã=0.UØ•°QW‚ž|(¢f»× @vv–éí8$ ]ÇfUð{Û8qì(s¦ä Gˆ)v k€l†–• dtt]‹ÿ'›1«!ºÑzV’$4 $É0CÒÊ(R\5PCÒAWÐ$‹"¡h:’®Ãí°s¨²’Ø•A$CÂb•Q£*ò)d/5 ƒì¬Lšš[h÷z…·¦@ @ @ 8¯i ÁÑvSH³Cž2œ¢nÎ&dÉô³)€ÕôÌ›œ-!h˜á^«}Є ÒÍ宄 Œº¨ÙÝK“Azh&ŒƒhL¥¥®-# £)V4I"Õ@2%%>[Â0 ]GÓ4d]Eއ¤•ôî¹3 à û*KÉÂgb†.,èèèÈ (šY&Ô‘˜¤ƒ·­…úºÆMž†S1 ·ÛI8îLç9(:ÃÞú|~2ÒÓ±X,ÂZ@ @ Áy…nÀá6h‡¨Ìp@¾Rl¢nÎ%²œæŸ? ÕfØÊÈu›Â–°+a€<Úôz;ÈÎÊtØÙNEAFhkiÅi·áïðahº)vF£ ±2ñ`ÒUt]GÃü]"ewaÓüÓÑuÃÐÐÑÐÐÐ .OÎî§H ££©1´hŒX4Œ¡«474â°Û‰FÃH’Ãe'œÒ¹šùF3“êL @ @ ÎbìkꞦeÂŒ,!<ˤØ`Vv—ˆÕ€òfS„v%l@ UQÓ0 |~’8x*¨±‡ÆÆÆ„Ȩª*š¦!Iºn “ª®cH€"Çsf¨ªJ4AEPÕ(šCÓbqá³+<­¦i¨ªšøÓáquT5†Ñ-”¬ªªDÃÔh ]ÓP#Q¢Ñ(õ´·µa³ÙP…` €Ýn?åóUâº;|¾S€OM!qÓ@ @ ‚Ó‹¦›^ZÁ˜™ËpnŽéÅ%8?ÈuÜlÓ±È-§øQØ•°Á9È¨Šš~Ã0ÈÈH’HgjT%‰ ª:ªj~ŽDbhš†ÅnÃbµb±XeC’1$Бѥ®®R|_²aþïü®ëªY)²ŒlQ@‘0$UÓTó/#‹¢ªj²÷¦n ¢²Á`‹Å’X&É2 AÈ5 ƒ´T†aà÷>tci ™ {@ @ àtr¤Ýž æå /ºóææš9½¨ò »6 êä|g”EM?6«uHÛ+²•X,F4Mxe†"Q‘†!a±ÚPlvd‹âB¢!K KH’rÖ 73 Ó[S–edYFQÅÜF×MUÕu"ªF4¢UcI!m5M#‰šÞ¨¾6› I’Ð dÉÌ!:GRÝ}Xn‚¦@ @ @ 8ýÔû»BƒÎÈ»"êä|Åiiæç:´……] ur>c­©ªJ(Æjµ¢iÚö¡( 2:’lA7$b±ª*ƒd7…KCÂ$ IÅ‚$+ [E’‘$Ó[@6 ³4‹ÃÐ0€Î¨³†,!É2’¢˜B©,¡zÜÍYdtÝ Uª¨ªN$AŠ{‰ªšŽCÒ`®Ñº®#K¡p˜X,†uˆ‚ðp8ÜnÎ`|8\¾xnB@¿ýÞûøÌW¾Úëz‡öWòü_þHéî]´67`w8ð¤¥ñ­Ÿü¿Ÿ}ç›txÛ¸åÎ{øÔ¿<2¢å,+*äáûîN|ÿÏÿý «Ö]|Êûùʃ÷Q¼s;³ç/àWOý]@ @ ÁyBTƒ^óó¤4Hµ‹: uuüòG? Â>÷è£gí¹d8!ßµ>8ÚicLÏ=aWçÇõ)œŒš¨ ™òyzZCR÷ Y¶$B»jšA$¦Ó 4 ¦ê(Šb®')H²‚¤X‘­6‹ÍôžTddIÅôä4CÒšS2d‹¹OÝ04³Œ²,›ál%SNÕ0ÐU˜¡aè::ºš¦£ijLÇnw¢ê: :ª®£²ÒN===Ö¶vÂáȨ‹š' š3²ÅMs&²uã¾ýå/ô˜0`Šþ*L›Î7¾ðYêkkxêÉǹý÷“âñˆÊÉóO?MÉÎdçæòÈÿû¢B@ @ 8 Tu˜£ÇŒIüv¾Ž~üÍo&ývów°tÕªAm_[]ͯúÓ¤ßî~ð!fÍ›+.ÊÀ„TÓC/3½õÆ¥ŽŽ]õÆ/~øšêXPPÀí÷Þ+.ÐY`‚sƒQ5ÃSÔTyˆžš2±¨†¤(ØìN Y!ªE±¡£k¦GcL×° †(fY,VÅ qqR’$$Y1=0%S¸<9,­†²Žl€d•Ñ% ’fCÇ¢YãÞ™æ± Ãà [«i¹¹¹D#*ŠÝ†,h gÒ@§Ž„ñxRFÍ8z4…¨yæ¡ë:¿øáô¸¯œ.¡`¥«Ö`³Û±;º¦)Šò¡xý ‚³‹ÝÛ¶ñÒßþÀ'?÷9¦ÍœyNßáØWZ±C‡ñux‰„#Øròò˜1{+Ö¬Åév j_õ üõ÷¿¥©¡‘Ùóçsלֲ××ÖR²k+*èð¶Dq§¤0nÒD V¬T§»¬¸˜ÂmÛ¨­®"ãNñ0aòd–_x!S§O?mÇWU½ÅEìßWN͉ãøý>4UÃåv3fÜ8æ/Y¢¥K‡º_ @ œ½„T3–a˜ÞtÃeoqñ EÍ=……âœáLðÀV¨ó›Â¤"¾]ÕTU%M€Š²=D"ìöÑsýp¿ÏOÊŽ"†a°§¨H\€3œ '¤ÙÁæä¹Gß®JvíJú‹Æ(/-eñòå£Vo½ú*õµµä{Þ‰šCµÁ¹Ã¨ˆš!0G"7à©£#`·Yp;fþ˨„ÅbE¶Z-fHYI‘Q«26!hJHD#ñ,À’d ‘R\¨Œ7—éH’dF§5@3$3Ĭ†!¡Ë2ºlE“,膌Y–°Y­Hèäd¦aÄ¢ØIR0tYº¯¦®ëX, ªjæî´XNïe‚æÙEc7AàÖ»?‘+ëp:q8\0u:?þÍoE… Î*Þû-íßÏÚK/¢æhw$ëê©:v‹ÕŠ‹Q^¶‡€?€;åì!ì-)¦¶ª ‹Å¢åË™»`9yyXmvÚÛZ)Þ±“›7ám÷òÌï~˾öõ^íOÓtÖ¿ò2[7nÀ’BÀï?­eåÙ¿³¯´I’˜·h1 —.%wìE¡¡¶– ëߤêØqö‘™“Ó«0¹aý› AsAA«×]Lzf­--l~ï]ÊK÷°qýz²srX´lÙˆ_×uvnÚ„¯£ƒ‡ekV3}ö223Í÷YC›ß}—ƒ?|„WŸž[ïºKÜŒ@ Áy‚n@S¼K•ëÞ¾ò'L ¶ª Ã0ØWRŠ ×ö»þ±ÃGèh7DÇŽG]u¸ g(y)¦ Õ蜠5’v¥ë:eqñ{ÚÌ™T;F$¡t÷îQ5ÛZZ©¯­6p 6 8·Q35=\.gBÔ”$)é?ôïÅ)`1T¼L™8·:¼¸m`u˜Þ˜1ì²L8ª":Ð «U‹– Š¢àr˜Ó0d"j”P8ŒÍa  ŸÇC Æf³GˆÅ44ÕÀçóa·;Íð¶V+VÙ†*k„u_Ì ¢ê²t ‡"1!,þP‹Åïáp¥¢ë†)€J}‹ºýù°ºÜ.:¼>"‘Èi5… yöF’¾§¦§ŸÕç# : ‡#=tHTćDá¶­LŸ=›¦úzš)ݽ‹Õ_|ÖŸÛ×_¬(¬¼ðBRÓ’ãθSÜŒ›0Ô´TÞzí5Zšš8P¾9 $­çëèàoøÇA–en¸õV<ÈÞââÓZön»h4Êå×]Ǹ ’–¥¥§3eÆLÿïÿ¢®¦†mïoä’«®2ÃñÇñû|l~÷]-[Æ­wßX–âñpç§î篿ÿ=ûJKyûµW™»x1ÖníŽá_–en»÷”ìÚÅ…—]Šå¤0èžÔT¦L›ÆŸœƒ”îÚÅ57Ý|Né@ ``¼aЛ)à Ú2eÚ4Z‰D"ì-)PÔÜS´»ÃÎÔé3Î9QS–¥sæ\Ò HˆAT3íe´ìê`e%~Ÿ€©³faµÛ¨ØSÆáðutàI=ýI÷–Ÿ÷ÏŠSµÁ¹Å¨ˆšj<ì«ÅbAUÕ¡=xÑq§z ¤à$˜ì,Þ&lŠ™ç2`“]E•‚A4ÍO8E×Ì‚j,‚Ói'-# ‹UFU£X;(vY'ö $›i¨oÆëõÑÖêÅît•“‡'-ǃaø|!|þ UE’-;ü¤ºì`‡lõHu¸€@4Ö¡¿¦ÍœÉþò}§½ì)ŸøÌgúnØY V­âµçŸ'ŽÐÔÐÀ˜üüÄò²’âD[ìòk¯ëuWÜpûJKñ¶{©,+cþâÅ#vüŒ¬L.¹úª>·—$‰%+Vp°¢Ã0h¨¯eÊ´éâ¦@ μñyû™#04¤é:³çϧd÷nŽ>Ò¯à¤iûJJ˜³`á # ª±%»wS¼k'-M„BARRR˜8y Ë×®å‚éÓzÝ®s"餩Sxð‹ðØôî;Tì-ÃÛÚ†Ín'oì V®JŠž³¯´”ÝÛ¶Qsâ‘pOZ*SgÌdÝW’™ÕoY­ñI¥++Ùºq#uÕÕ„BA<©iLŸ=›uW\AzFF¿ûðû|ìܼ…н{hkiEÓTÒÒ3˜:c&«/¾˜¬œÞÇ6叫üÚë¸øª+‰©*Ûߟ¢;hmjBÓtýöwHÏÌT½K˜¢VKÈ,sÜ£gW¥»w'>OŸ5 ·ÛMÅž2 à´°µ—\Òç¶ýøÇ ËÏÿëW;~\¯ëýíLL˜¾óþûã õu¼óú?©Ø³§Ûº€?vm»° €Ûî½·ÏëüÈQ¶¿ÿ>ÇŽ&ðcw8?iË׬aÖ¼yýßSšFáö”—–P_[K(Äíñ“›Ëâ+˜·hqŸQÖ:m~êŒÜ÷ùÏ›ö\Rʦ÷Þ¥±®Žh4ÊGïºkÐÞ®§j‚s‹Ñ ? {’ª·_k¨a²S=„ÛêqYe,hÑM>ìV n‡Y–ñú‚´¶¶„0 ƒ—Œ´Tòccq»]!g‘Q#*mA/>ŸM5hjj¡µµH$†®ëȲY–‰†#4‡Âtttàó¶Ó <ît'N» §ÛFÓÁýT9A{Gˆåk/&;g,6«BuÈçßé½6uÙg»‡æ¾=¥l~÷mÞ~핤ß[[šÙòÞ»lyï]>ý¥åcŸüTbYÁŠÕ Q3r°¢œYóæ'm_¸c[Ò÷²¢]=BëºÎž¢®ÜbKW®NÚæáûîf_/3h~?Ê÷q |¯<÷w~ô«'z¿?~ø¯R²{çˆÖ£ßïç{ÿú»¶nI¾‡c1ÊKJ(/)á{šïÿâ×LŸ5û”÷ßÔÐÀWü$ÕÇ%~‹„Ãì-.boq»¶n&-md~‚ë>z /<õ%Ý5€öÖ6 ·og_i)|ñ‹IJOÆj³³áÍõ¼ûÆ?OÚG+»¶l¡t÷.î~è¡>'•9t¿þîw„‚¡¤ß›ÍIÐÛ·rËw±°  Ï2´µ¶‰Dxê‰Ç9zèpÒ2OÚ©õçSã‚VH=»ŠD"T”™‚bfVcòóIMKG–et]§t×®~EÍáòÚsÏõ¨·Ábw8غq#o¼ôRR´Ì` Àòr”—³öÒK¹ú¦›zݾµ¹…§žxœÆ††¤ß;ÚÛéhoçðlݸ‘;ï¿¿_q¼­µ€7_z‰Í6œdi§Íç£~ÖÆÈ”ŒN[cûK‹pÙÜ6·EÁ.I‘Z4‚ßë%ê°b¨N§ «ÕŽÓ•‚†‚S9qâ(^O ‘H„̬ RRRp:(Š«ÕÀnQ©ó5ÐØØLuu ím~¢1 ¯×‡ÕjÅ•â&55•””dŒ„QÐï'‰b±»p»]Ôœ8Ή#Ghló±ú‹@‹ «ÈÎîBê©Ñùî‹ÆF^Ô<BÎþâ?ÿƒÖæ¦ÄwEQzxx=ñóŸ±bíELžfÎ’Z¼|…™O5n—¥»w%‰Šš¦Q²sGÒ>‚ û÷îeî¢E]õ·¿GGâûÒUɢ抵뢦Õfe¤ °;¦ØÕßÑÞÎw}„?½ò&6›uPçý4Å'%÷ut°¯´”в2î¼ÿþ~gH5ÔÕ±áÍ7¨Ü›ìÖÔÐHSÃ{”óÙ¯|…Š={xõùç“f†‚!Ž:ÄÑC‡¨«®æªoìõM <õä´45u{I´46ÑÒØÄîí[¹écw°¤ŸYTò7³ IDATuu|ðÎÛì+Iîü~VTp°¢‚ÕëÖqí-·t5”ÀÛÞ†Óí"ïT¤edн`³%·DÃáÏþéI×]’$Ú[Ûhom£¼t+Ö®åú[oíµ3±§¸ˆþòTÒs#¨9vè0Çf_i Ù¹yC¶KÃ0XÿÊ+l~~uT_Oc}=;6oâê›nfU,óšÔsüðþüÄÿ GzÝOñ®]<ôð#dåæ ¹¼…[Í SgÌ 5-Ô´4²ssinl¤pû¶>EÍ‘¤¥±‰ßýê±Äs²“Úêjj««)ܹƒÛïý‘Hä´ÿøÑ®ŽBÞ˜žCY–¹éöÛO¾ÐgÄ;±Ãëíjä§'w jªª7qb¿û?iõµµÔTWèñÃÑÇ÷pÞ˜1¢µ.@ œ'Ì!d,#™HSU¦Íš…Ãé$ ±·¨¨OQ³´ÐtVp§¤0uÆ öö»ïh$ÊïùËÄØÏ˜ü|fÍ›‡Óí¢±®ž’]»Ð4í|@Zz:^vY¯û ‡Büá×á÷ù;~'O!pxÿþD¿jû¦ð¶·QQV†ÍfcÆœ9xÒÒhnhà`eeb?¯>÷>üpŸe®>~œåå8œNfÍKjFŸò²=„A¢‘(Oÿö·|ñkß í¤~\}m-úõoc&ÓgÏfÒ”)È’Äñ£GÙ¿ošªñÂSO‘ž‘ɤ)ôZ†¶ÖV^þûßœÝnÇ’‚ªi=¢ç „=¾z06zvµ¯´41n8/î$àr»˜:s&+*¨«©¡¡¾Ž¼1cOËý±îÊ«(XÙÁŽ-[¨:jNX^yÑEŒïÖ¿Ïè#`C]+*™sæ•“K(àPeÞvÓÖ6¿÷3æÎé!l‡A~÷Ø/ñ¶µ`³Ù˜:s&ž´T|>ŽìßO$¡¶ªŠßýòù—ûv{ï ²·­][¶$MEQHKO'à÷“zŠŽ.§b‚s‹Q5µø`úpDMÉ0PbaNì/Çí´‘‘ê$7Õ…US üZ”‡¯ßG}m0íÞuM-45·ö‡Y0{2m–f|í>òòó˜8q"ùùù¤¥ebè:j¬¿7ÀÑCG8t䘺V‡úº6ÂQp»Áív‘’â"Åí&--ììLœYÆ®(è±{K ©<|‚@TLjEQ ‹º¤C{zvV®l(Æs%‡fks²,óÐ#rõMÁ“–Ɖ#Gø¯ï}‹½ÅE û{ûõWxðá/æìé³çp .°´pW’'gåÞ2~3‹ô¢eË)ÙeŠ}Å;·'‰šÝE@›ÝΜEÉžo7Ý~ÕÇráeW²tÍZì63”p4ã±?¶¡®–¢í[XyÑŃ:ç/~ýߨôÞ;|ûK_Hüþ¥o~—¹ r¾þÂsIçòЗåö{ïKxíØÆ¿?üy¡­-Í<õäã‰2 †Þ~+1› +'‡¯|çû¬XE4e÷ÖÍüòGß§µ¥yÈv`ÏþéÚ¿ß¼nK—²hùr22³ƒ476phÿþ¡ íßϳú†a;f,—]{ /¸«ÕJKs3…Û·±sóJvîD2 >Ú-ÝÉüéÿ~ƒ,+Üòñ;™:k&V«†º:Þ|ù%SÔ¬¨àÉŸÿœÇŽ1oÑ"V_r 9¹y„BA*÷îå­W_EÅxå¹ç˜1gNŸ9Fß|éDÂa.¹új,)À“꡽­Íï½GÉ®]xÛÚøËOP[UŘqù\vÍuŒŸd6rN=Êë/¾ˆ·­Mï¾Ë’+ÉÉËMn°CüáWÑáõ’™“͵7ß´™3P,êêXÿòˬ¬äÏõ…/’âIIü~Åõ7ðûÇ~Ic}=‘P˜ ëßäæ},iÛŸy&!hÞr×]=&·oÙ¸7þñº®óæ+/óéGéµ G4£)z<ÜxÛíÌ^0¿O/Ö°Å«;¢Žž]•vsNèÑhþâŬ¨ˆ¯³›+o¸á´Ü+*¢æä)S™·xàq`o[î”øÂ“¢„…C!~ÿØcÔVW›6µcgQóí¾–4Çäçó‰Ï~6)R–ßçã/OFsÍq‚ÞVÒœ,ºŠÕб[š©«ªæè‘cTUUáõù±ÚdåŽeì„q¸\)H’D0Ä×î# ¢©:H ’ÅF8Æï„PPÈÍÊeÊ”)Ìœ9…™ÓóY8>“'MÀåt ‡ˆ…‚X%™4·‹¬´Tì…@{;•{˨9~Œ¯=‹Œ3Å< ƒÎ:¹ër®šÜqßÜþ‰ûHMOG’$&MÊÿûÑÏ’BŪLöÞ+è*¶¬hw’7[Ñö­‰Ï·ÜÙ‹¼3gâ…ÖM\X°4!ZvâIKãkßÿk.¹4i™Íf塇¿’´îÁÊŠ­þþñ×§ŸW\¸Ž;>yRƒlÉŠUÜrç=] ¸7_?¥{úÝ7_KúþíŸý‚•k/ÂjµâNq³îÊ«øú~<¬s(Ùµ+!h^qýõÜzÏ=L›9“¬œlÆOšÈ¢e˸õî»ÉÈÊLz>½òìß1 ƒ¬Üzäæ.\ˆ'5ÕÌ{:a7Þv;WÄóïïÚÅþ“¼@» †¸çÓŸfÉʤ¥§ãr»¸`ÚTîyèÓ‰—ô‰cǘ»h!wÜw'OÆér’™•Åêuë¸øÊ+Ó{·®¦ï¤ôÁ@«nº™Ë®¹†œ¼\N'còó¹õkkNœ -#ƒ¾ø0³æÍ%Åã!Åãa΂ÜÞ-¾þþ}{{ìÿ×_£ÃëÅf·ñ©Ïý ³æÍÅbµ"Icòó¹ëÁ‡HÏÌÀ0 Þzõ•>Ëð¸èò˹éö1~ÒDœniééÌ_¼˜»|(ÑxÝÏ]1ÊŠ‹š·Þ}+.¼W¼³–žÎÕ7ßÌüÅKâvûFϾ·_}MÓQ, ÷}îóÌ_¼‡Ó‰ÕfeL~>×Ýr 뮸uˆžò­Í-¼ÿÖ[ñ†îîzà&O›ŠËí"ϫ™3ùäg?ËŒ9sxíÅçñûü}¿O%‰y„ÅË–‘ž™ÃédìøqÜ|ÇÌ]´Ð|¾8ðr=UvÇÃnÛívæ,\˜ø}Ѳ¥fc1¡,>Yät±këVZMán»K®¾šÌ¬,NycÇpé5WóñO}ª‡·êP‡B„‚!ü>uÕ5lÞ°_þøGÔ×Ö’3&{ú V‹å¬yÖœ8Áþ}åñgùEÉõH4ñžs¥¤ô»w|¹¦é„Cá9~wt]'4ë¾Ãëåøá#¼ùòË<þóÿ!‰0kÞ)&ÿP®û„ .葟³“5—\BYq±hŒýûö%r‰ú}þ„¾xÙò>sZ^xÙel~ï½a­ÃîíÛ0 I’¸úæÞsȲÌ57„ååD#QÊŠ‹XuQï‚вÕkú̹hé²D¨ß¦¦F&º'Ÿòûºd‡v{î¢EغMÄHÏÌä‚iS9zè0»·o§`åÊÓöLê Íœ“—ÛçqfÎˤ©S8~øÈ°ŽõÓï~‡ÈI¢]vn.7ßq ’êàL'ŽðüSÁ0 ÆŽDz5ÉáÐ#‘®ó´Xûuní¶<‰$& çøÝi¨­ãW?ýIß§ÍœÉÊ‹Ö1kÞ\ÑJ@ Î#$ ˆ Pšixûët™2c&.·‹` HYqqèM{ wÇû¼L¼`à>ôñÇy%'MÖ§(3aÒäÄxE}M ÄEΓ™5w^¯â^ÞØ±ÝêFbÖÜy½Ô™DÞ˜±´6™QÏB¡¾'7+ŠÌÔY3{]6yÚTR<ü>‘p„¦†úD~Ί¸+ÀŒÙ³û¸vù&&Æ×êkª{„°ídí%—%Б@7FÇ®º‹•ó—$i:]N¦ÏžEåÞ}xÛÚ8vè0LŸvÆÝcsúˆì7¦›@ ’–U=’¹;vܸ>ó¶fåd3yÚ4Ž8`޽•ïKšPÐ)Ó§Ê»t¤l`$0 ƒëßbÇæM¬¼ð¢“>¬mÎGFEÔÔG ü,€Ýj!ÕãÆiWù}HF.VIÂfs`)N§›ñv'ö”4G dÂ1 =ÃmDÐBt]G’$<v«  È 6ÅFzz:2Y™\®Ò2Ò‰F£Øl"‘»4€¯5Ãf³a•ª†/¤]W14‡ÃFjŠT”²böÓ½.‡Ã¹(hzÒÒÈïCüÉÎÍMˆšššì>wq6»hÜs«´pÓgÏ!RO >uæ,ìs,¦êØ1¢Ñ(ûJ‹Y¼|e|š«zàFÂaÞzí¶°c‡ÒÖÚJ8구CLF‚#ö'}ÿù~—ŸÿçwÜ®½­uP¢fgÈÚ^¢ÓfÏ’¨©ë:G2„ó¾âøá®¼y3æÌí·ñ7kÞ\vnÞÂò¾=j'OÚç²´ 3 £Õf%¿zë\L /ÆM˜Ô§÷XZ·°’“.˜ÒOy2øýDÃá“,Ç6:uÆŒ>·ïÞÀnjlìUÔ?iRŸB±ÙiÈ¢®º†H8<$ÛÕ4ÃqQ²¿²ævËË×ÔPŸø\Su"ñyæÜ¾¯¿Ãé$ÂxªŽ?å2;lÚåØñãû Å™“—KΘ<šê8P^Þ§¨9­ŸóÌÈÊJzöœ*ÊË3*/ë9ûráÒe=t˜ª£Gi¬o wLÞˆ?bÑuñ™3çÌí÷^ž:}æ°EÍÞhnldý«¯pâèQ.¾ê*2³²8ÓÑ4¿ÿñ454bw:øØ}÷õ˜-œÔ MÖ}©4ˆÐ³ƒ9þ`8´?-ÍMT8ÆE—]ÞoØi@ @pn!˦@ÓG&-˜ã9s,d÷¶mÔVUÑÒÔLVÜ»1r°ÂÌK¹`IÁ Æ’š»&†WìÙÿ÷“Dz“ÎôVWtÇåNé6v’Õfíc½®A]]í{\1-#£Ïq$I’È;¿Ï@kSsB¼jnlL¬÷ú‹/òú‹/|¾@ŸËfPz—ÎS•¥Ñ±«î¡gç”z `Þâ%Tî5Sœ•ìÞuƉšžÔTÜ)½ în‘œº{é4Ôw¡ 42ªñÔz{1t`ëo¹axÒR±9ìädgÐܤðùqØœš¦36o ²ÍªlA·8Hµ9Ñ$TKć¢{ÃX­VdÉB$CÕ QqÚœ¤ä§‡ÃXd ‹ÃŽ¢(X »EA2Àa•±H2Š¢à÷ùèø‰†#d¤¦¡Du\.—ù‚´Û0 C’Ð0ÎX÷ó³Ì윾íNî;¶€ÝfcÞ¢%ÅÃ-–îâÖ»?ÁžÂ¨q´óE5Ië_ù`† ]¼|%¥…]/´ŒÌ,¦LOŽ:Ä7¾ðêkkÎèúëèðíå1Èpœ'7Þ2³ú¾^é™C*‹ßçKÜ_9¹¹ƒÞ®½µ5ñrïO|ÈÎÍKœw0ìÕs)-½ï nv§ƒºêägWVN.’$a…Û¶qÍGnñç‘×Ûž({fNÿu–1³;¿ù£Çîš™{·¡‘åìܲ…¢;Ø·§”þ勌?îŒ}†ëºÎóþ +*P, wÞÿÙ9=Ÿ³Ý½NUUôóÝîpŒÈñ»3vü8¾ÿ‹_$Žå÷û©¯©eoi ¥»vñþú·¨ÜSƃ?2à³Y @ œØdkÓÀ9‚£Öó—,a÷6³¿[VT”ð|Ú[Z’SXPP0èqˆSî³õãÄàr ìib·¿O4P¿®{9Âá.gŒ€Ï?¢çÛ߸٩koƒ );\»ª¯­¥¾ÖtÀ$‰×_|¡Ç:±n}è½¥%\ÛmgT*÷)hú"ìòþ0M·1Èþ¢ö7áÿtÙÀp)ݽ«Ço…Û¶õ+6ŽÖ6ç#£rgɲŒ¦i‰Ð¡ K`ÏÎaÊŒ™Ä¢AlN4IF5 t]G–MÑj± [mV;†Ý…ÅîF—-HZ §nA…‘ådÙ‚,Ë8lv, «æŸn`wذeØeÇC4%¦ÇP0°Zd MGD‘05UÅŠ «tDU2²²‘])Œ?tÉaGC†a8Yv Cñz8™©ñçF§·f[üÙt6{kÚ†áÉQ°rUBÔ¬,Û@ÉIy2ÍÆMW˜ˆÎ³!*–¬\•$TE¢QþýKŸO4—®Zú+®"/??Ñ ùÚç" ~¨õ'‘,°]vÍudå B€É3ÄgBßSh,Côjv›f={ˆÄó&Xý»  ø{5-6ë ž‰Ã~xâ8²"«.nƒ™ðÔ]HíŽuå*ÝËj·ÛQ,·d¬–®2Å¢ÑA?G†úœéÌÍ1˜0¦v›½ÇyVú}>öÇg†A~ýÓŸö»~ñ®\yã az¤ˆuË»`wØU_#¢(‰¼³“§Meùš5üæ¿þ‹€ßÏËÏþÏ|ùËgäûO×užê)ÊJŠQ™}â“L>½ÏN¬bQÐT ß?@GÝŸhØûy>žÊñû|žY­¤gdž‘Á¬ysY°x1~üqêêxÿí·¸êÆE‹] @ 8pZMñIáyL›–¯ZVÜ%jÞÉÍËë3¬æÉhÝ¢èÍ[´ˆ¥«W¸'-µïñE•º5ˆÑ©÷1p­]åå×^ÇøÉ“ô:È:ÉÓõ’«¯cõÅ—ŒØþ»‡Âð¶µõ¹®3Þg×K-ôvîxÙ¢ý„zí¤3L1 <ÃílÆáìªËOéËz\)e½æ#aéªU§´½µ»çڞǚªÑþSCDac‘¸}öU´cÇ)…8Tì)r#=í½>º‹¿ÝËš~úBv§gfR°r%¼óÕÇã÷ùIñ¤œQö¯ë:/<õ{ ‘e™Ûïý$s,è· ‘•Cc}=mm­ýî»Ó‹=3'»Ï¶Ç©°Ì˜3‡ “'Quì8û÷í¢¦@ @pžà²B[ÚÃé¹ýʲÌÜ… Ù±y3 uu4Ö7àp:8OI4^šO—@iµZ™6sæYQ·Á*‚þ®ÉÕÝÇØR=]©†RÓÒΘóm;“º­§×® ÃHˆß§Biáî!—t¿6©©]ö`r´¿ÛòÁx ¦ —%+VðÁ;ï$ýV0Àähms>rÖˆšš è;i*G«ª1N"Ñ Š$a `±Úé̥Ȓ)nZ¬É"™¢¨ª‹„ñû;PU‹b5 Ý&u]GÆÂtTÕ‰ËåÀb±`KqšÉ–%=±®S ‡Ã„Ãa"1 ƒHLE¶ÚÈ3%5•P$†®êÄ$ ‡]‡#%j‚6;™>k6©éé‰pGH䘜:c&é™]a,ç½7_' RVTH{·Aá‚ɘc‡&}ÿÈÇïîù’ ψÕØñÉùH÷íQQÓér‘‘™E[«™0¼r_YŸë;tpHÇHéö’méï :óOú}>B Î^¼/;ilhLÑe¨aÎR»…hil<£EMOjZ" @ó)\÷îÛwÒÚÒ•W£×Æ™oh‚{ZF-MMI¹<û¶1sŒ!‡cáŽíñgâ,>ñÙÏö¹žªjüä[ß$P¸c{R#ÝèöŽ2ú 7cí}Lnð¤u]ÓÖææ̾ÓZ'ÝŸ+‘pøŒ5;ÅÒÂBEácŸœ ˜?q"õõÔ?ÑïzÕÇÍPËã'LÑãŸjÝGÂ!ÑZ@ ÎRíPã3¨‘fÞâ%ìØ¼€²â"ìGÂQeÁ’Á‹šÝÓ ?z䬩ێöv¡PÒäðîý»î‘æ²r»ÆÒ³2“ÎwÉÊú¹@k¼«˜b;½vuäàA:¼fÚ®œ1y<üõoô¹®¯£ƒŸ|ë[†Áòò©«º{Kþ>ûÚõugŒÝdåuEò«9Ñÿ8B÷q†Üü±g” —+®¿›ÍÎÖ÷7b±XXµn^vÙ±ÍùȨø³væˆNÈE‰hLGÎȇauS쨲M’Ñ0½9e$$ d]CÒbÑ0z4Lkk ¾v¢‘2N‡‡Ã6’E]ÅŒ«£©Q¡áHÝP±* ²d`’d` ¡ë¦È)Ë2º’b%¢AÞĉh:(N7¾¨Šnµ'úl"ü£"ì%›šSº…±n Bkà<» d™EË–'¾ïÚ¶%!^,Z–ü¢^¸tYâó†õÿL|ž4e*9yÉùø´“ô»Ïrêdc·}|˜ääå1`jô IDATgÁÂÄ÷þã…~:…9 »ö¿·¸ˆCû+{¬s°²‚ÃqAùT±XÆO2C`TìÛ;èP׳æv%(¯Ø··Ïõ4McÿÞ½ñë=eDBÈž©Lœ49ösoqñ‡VEêjìi}$»W™)ñP—奥§äi0~R—`s¨¢²ßë_}âøÎcÖܹ€™ƒ¡µ¥¥Ïõêêii4ï» ¦NÕº>zðPâØKW­ð^[²Â|6ª¬L'­K"m[?Ù'Ž%íÝ3Öf·%BÕ¬¬è·,UGŽžÖziè–3#5#ýŒ¹G“E‹Â÷ß?hAqæœ9ÔVW'¼1O¦¥©9‘/dÒ”©#züA×}Ù‰KËÌD @ œxl`‘Ì0¡‘‘Ý÷ä©SðÄ'O–±g÷îĸ@œOfÊô8]æ_ks •ñ4.g{{÷Ú¿o¡ ©9œÎ¤1ι »&2—áë'Wâhá ›#ø6<öÓkWÅÝBÏ.\²´ÿ㤦&ƨ4M£¬¨(i¹ËÕ%pÖ×ÔôºC••‰kÑÝÓn…B§7¥Ùä)SŽõõÔTUõ9Žpìð! >V7múeÃE’$.¾êJ¾ñƒðÕÿøA £µÍùȨŒÊ&Ø@è’LTVÀæ${â$t»ƒ2ª,Õ ‚ÝG ÃÀÐ545мø¼mD"!dœ.;N§›UCƒX,žcÓ†Ãi‹—Y' âõ¶ÓÒÚD,!¢E#¨j”¨ªQc¨š†!Éè’Œl³¡I2Ùycig C2ó|Ž@L䑨˓Â&¬èÄßòÞ»‰Ï‹—¯LZoAA—¨¹cÓ]Û¯ì)äŸäýøò³Ï$„N]×yý…çxì'?8cêàÆÛ?žøìïèàчî£|OiÒ:áPˆ›Þçûÿö(¯>ÿì)íÿÒk®OºG¿ùðç)ܾMÓˆD£ìؼ‰oé Ã:‡…ËÌÆEKc[ßß8¨mÆŽGþóZmxó BÞ›Þy7Ñp[¶fí9}?XmÖDÙ’Ý»9P^ÞïúCÍ•<în^qâR¯÷ïjÓKºµ¥…·_{í”ÊšâñpÁ´iìÞ¶•öÖÞ…¸[¶ôi±   ñì~óå—z­/]×yó¥`±XX²rå¨^óÂíÛõ1kþ¼×ïÌbEÛw$-ËÎ5gñU–•D{½Þ|³ÿ{y©iuÕ5ì+-íu¦úÊ÷ìZã·Ý;à:µÕՔĴϘ3«ÅrFÜŸÝE‹ÕÊÝ>Ä̸p>fÍŸŸèÈ¿óÏÞ'Ö¼ýÚ«‰6ǼŋGìøáp„ð Â0ïØ´™Ö&ÓKwÎü@ ‚óI‚ÜøP@½¤÷-%ú7ÍÔVW›}öSðÒ4ûì +ºúì/>ó4'Žëu]_G[ßÿŒ©ßw^{•ÖæäÉÖí­m¼þâ ]ýñ‚‚¤‰üã'MLŒ›E#Qžþí“} ›õµµ”!Të©Ò·Îu^»ŠEcTt“X°t`[éÏ()Ü´l̸q‰Ï[6lè1Ѹ­¥•מ~ÀcxR=‰ÏC,²,³|mWʵžzªÇ˜JÀàù§þœïš¿¤€猲Á¹Å¨ŒÐYmf`ãá |€.[iÙcÇC&¤iØ$™ˆ¦#‡"ØKÌ‚Åb˜IºAL‰Su¢± EB¨‘(~µƒ€?B0"7ªhjj¦½½‡Û ? (v» )j  .'š3ÃØF5Âá¡PÈ ?«š‰¢ IÆbµas¹ ë¦Ð“$¢ºÎpÒ ëñdÎu9Òœï¡h»‹’5qo,Y–ÂN'“¦LI„Qm¨ëYzól*X¹»ÃA$lÆ6xé¯OóÁ[ëÉÊÍ¥¦ê8AY–?i2ÕÇ}èupå 7±ýƒl|ËŽ9Ì¿Üs™YÙxÒÓ 45Ô'î㹋ŸÒþ×]qŸ3—åæ ¶†ºZþõÓ÷'ÂLvÒ=Lí©²|õJvî¢æÄ ÞøÇK476²hé2Ò33Qc*­ÍMì//'+'‡U]”Øî£wßÅo~ú3ÚZZyò?çòë®gÒÔ©XmVZ››Ù½u+Û7m`ö‚ÌY0ÿœ¿'®ºáWVÒÚÒÂSO>ÉòµkY°d ™ÙæìÅ@ÀO]u e{P ·ß{aÂäÉ ûxýÅøèÝw“7v,Á@MÓH‹‡É]°x {‹‹)/ÝæÿÏÞ}‡ÉYÖû?múöšÞCz¡—Ðé„bGQQ{åØPDùá±± GE"ˆ -I @ $^7[gvÚÓ~ÌfÌ’„’°ÏëºöÊì<ýžûÙìÎg¾÷=c[7oæðc¥¹ÿlÛ&—ËÒºu+ËŸ[ÆË/®à ßüf¯ãœræYüþ×S(øÃ/ÁigŸËðÑ£±›ö¶VžY°Ç~˜hö¾ç‰F8åŒ3÷z»ßwçlÞ´ øÀe—½®-í(wòIX¶Å˯1l÷a#°¬R[9¶Í©gÅ7ßÌâùó ‚€cN8ªšÚ[Ûxbæ –-.õ‡i§žÚk¨œ7{ü-6ðÇ_ÿ’QcÆ2vâDš  ªºÛ¶ÉçólÙ´‰% ²¸çÓ ÍMzô1úm]DDDDä¤) ›Ò¥¡%ÓÅR•ÝÞ2qÊæî2†ÁÄCyÃû9åÌ3yñùغyÙînn¸î:†Eÿ1Lƒlw7›7ndÓúõÄqŽ>þø·¼]cñ8üâê1rÌAT×ÔÑɰü¹¥å$ÇâqN8í´¶½èC—ð›kJ±XdýšµüüûßcôØqÔÔ×ú]lX¿–¶–mŒŸ<™ÉS§î³ëè*@{,šSû¶_=¿äÙòûƒ‡¥öuL4nÒdþyÛmx®ËºU«hÛÖJmÏÅvO<òP ¼ÿ皟0ò ƒ¨¨¨¢½­•—–/Çó<*«ªÊCÞîʈQ1óþXñüóÜpÝu >œ|>OøLßû÷j›Ÿð®ÓxaéR6­ßÀÖÍ›¹þ‡?`äØ1TVU“I§YñÂóå÷Ë**+9ýÜóöi_ÞÓ> oû%Ô´{Þ u]¯ü¦Ú&^àâå]ê*S]ŸbÁÃ7,ËÄ ]¼‚‰k¸Vi˜XL‹‚ëQ,¨©J’/æèÊæÈdZ)ä=bÉé…B5kÖÑÚÞF*• –ˆRWSKEM1;‚exžGày„¾ï¹x~ž¢—£àq×÷)øF$‚O)ó+¯è¾©PÓsK•¨gßÍ|ûN6ûD¿Ø´Céÿ¨±ãv,Lšz(=ôÀú·m3iêá;­W][ç¿z%×}ÿ;åçÚZ·ÑÖº­¼Ý—¾ý=0 ®ùÖ•}¢¾ñƒS]SË]·Þ¼ËsÞÑßÕ4Mþûç¿àKÿ0›z> ½?ìpñ‡/eèÈÑ{Ü–UñÖodíêÕÌŸ=‡ù³çìâ?ãwõþŦ¹—\þ)nùãlݲ…›ÿø‡]îüäÉ\ðÁ¾#þsˆÅã|øòOsëMbãºu<9kOΚµËuÇNÜ7!oeUGN›ÆÜÇcóÆüêškÊËN>ã NÜáí >ðA"ÎßY¼`Ë—-cù²]ÿÇvznÈðaœÿÞ÷q×­·ÐÞÚÆ-ºq÷ýT†ÁÝÿû]Ë¡GE±Pàþ»ïæ…¥Ëv9ÁŸ~ýk2é4÷Þq÷ÞqG¯ujëê8á´Ó^×§weíêÕ»ý4ív5uµLßè7pÀ^o÷%O?Mº«‹º††×= CëÖ–^Ÿzyÿå?d^Í7¯þqyx$(M<¿uËž˜1ƒg.äÙ]|’öàCåøSOÝ»Ç7 |Ïç…¥KyaéÒWÝfèÈ\øÁ‹E‘wŽˆõ hÉÂÚNß°÷ö=hèPªjjèì™.eØÈ‘å‘lÞÛqøèg®àï7ÝÄË+Jò\µr«vñÏ7úþÙ¾rú¹ç²yÃFž||Ö.ß“ˆÆ¢|ðã—í²=šùèg>Ë-º‘޶6Ü¢»ÛQ•ØÇ—»º£TyÙ”*…Zû²_mÿÀ-À¤C}]ljÅcŒ?%‹KÓ9=³`'ž^zÿª¹N>ã fôŒšTÈåË*.ÿ-~ØaŒ?Ž¿ÿé¦ÝcȈáŒ8‘ç—,ÙéýíSsíM–eñ‘˯à–ÿȪ•+)‹<÷Ì΢u \ò‰O’ªHõÉ> oû%ÔÜþf]¦;CEÏÌÛ ïøƒ}ǹÐ^¹ÜÁ1ºóHÆñ\ƒÛ°½ö¹ÏóÔ¬Y,{f1[7oÆs]Ƀ‡ãˆcŽeøèÑÌÝMH¾]sÿþ|îÊ«xbæ#¼°d ím­ÔÔÕ1nòdŽ=é$–?·gs—|þ›ÿÅ3ó°ú¥•tuvÐÉÏ副c$’Iú Èèqã˜4e ö>ø7“N—‡ëÙW xÍ?hÏ9‡‘ÄS?Îú5kèÎdˆÅcô8ˆC:š SÞëÇ2|—}þ ,[ü4ëÖ®¥;ÝEw&ƒçºÄI’©CF gÌ„‰Œ~‡ý¼‘ÿT­YÈacúï¥ÁŒ Ã`â”)åj¹Io¢¢0UQÁ¥W\ÁòeËX<>7¬'ÝÙIàÄ ››3q">¸O´é°‘£8ô¨£6j$O=þ8[6m$ŸËSQUÅAãÆ1íÔSË#bíÊÀ!ƒùì7¾Á³ ²äé§imi!ÓÕ…aš¤**è?h ã'̘ öÙ5¬ë„œWšs@žíW™tš•/¼” 5&¼ë&:µj.^8¿jœxÚi 2„§ŸÅú5kÉe»‰Æâ <˜C<ŠñO¦eËÖ×ìÇïùȥ̞ùÏ,XHÛ¶,Ǧ¦¦–ñû¨¿%SI.½â ž{æY>õ$[7o.¿wÖÔ¯?ã'OfêQGcÛÖ>íÇo¶ÈÛƒî«ÉÐ^aíºõxžG}]-Aì2ÔÜñTvµ¼´’OÒ™qß]¬X8š˜]L“À#j†Dlƒx<Žs°ì†!ITVÎæX»f=/¼¸œ–­mضM2YqH§Ód2‚À£¹3ãÆcèÐÁDc^±@ºu ¡WÀ/æpó9r¹Ý…"Y/$Úd¼"\xÉe yacE¢är9bñ8®ë¾Ê§Uv÷R˜¦IËÖmضÍàA÷KÇx©ã?Á&@Mâ3­ˆˆ/XÀíþ3ßøÁ÷ù§÷–åÏ=ÇŸû[>óõ¯ÓÜ¿¿^L‘lÉÀêž8ÇÔAULmòNÖžƒ{¦ Uµ1õ+õµI_ñROÒ©C÷ÏñìýuañxŒt:ƒaš°CEæ„©d’Bgã'L`õ²gpƒë˜äŠY0lÂBŠ Ë&šL€m ¤Ó‚"¶M}m–á†!~D‰ÕLjǣÔÖÖàX6é®.º3xE ¤PÈ㊄Oˆçyø¡‰Žcøð„N¯èb‘HÏóØÓú{£g»x|ÿÝ©»ªØÜ–ƒÑõºIED¤oȤÓÿù=c‡áUûºµ«KU¿ƒ‡U )"""""² M)è*–æ@\Ñ› j©]Þ‰r¬,LsêÍ…YêWêràÛo¡f,Z 5}ßߣíC¼ L< úLCs?Z×®$‹ãD¡è0v4Šï»xA€Qt ³9Ì‚‡AÛŽÇinl¤2YIÑ/ÍÍéº.…B;b‹Åˆ%ㄾKWWAàAà‘LDÉfóÅ<Ѩƒ‰a¸> 0-ò^Ïð±SIŠÅ°t®^iÈYÏó°¬=Ânû>bÑý{·¾2Ø|±gZE›""Ò¼´|9PšûÒ²œ¿BÖ½\ 5˜6M/¢ˆˆˆˆˆÈn ¯†œ[ 4–nƒê!Q»¼“tàÅVB¨ŒÀà*õ+õµÉ;Ý~­Ôèì좪rÏ<6 ƒ¢çbX&8&† fÃË/ŠF-,‹Ðqˆ$â„aŒ\¡HÞsÉtvøøQ'†m—~J9–a˜!XFHÿæFо‡ïûry0 ħ³£•\&mTUWâ8!Eß'Ÿ+àz!FÄ"È»¦…騏^€i„ojRèŽöŽ^m¸?í*ØT¨)""ûR†¤»º¨¬Úýoª+žžÏ?Àè±ã˜kó<Ÿµ«W“ª¨`üäƒõb‹ˆˆˆˆˆì†e˜zxa[)€ZÖ#k¡.®¶y'ØÚ «zÞ“®ˆÂAu{:¢ú•ú€¼ì·PÓ¶mâ±¹|Û¶÷¨bÓ°L ®‹e”* › €H„L±ˆmZX‘(†ã€mc…l7[¶n¡½3ï‡4Õô£uI$R$“Iâ©$Žã`š¡¹\Ûóð<—‚ç’ÏÈtwÑÙÙI&›&q0-ƒªd Ï0Ì77)„®gп±|ÑÅŠ9X¶MÑ-`Z&¥htO~ÈZaH<Ã¶í·¤“l6ŸoÕ #""ûžïyüì{ÿÍ„ÉsÐÄ ôë?Êê*Ç¡«³“%‹1ãßÿ ‰p̉'8¿xÙß½öZ½È""""""¯CÄ‚ñ ðR´`e´Æ``%$µÏÛQG6vCºPú¾)C«Ô¯ÔÔ.R²_S²T*E.Ÿ§P,bïÁ0q¦i†!a¡aRÛØDmc›×¬ « îDÈùàÛ¡è´utÑÖщeØtµ.'bGIÄSTVV“LVŰmÓ4{æÇ ð<—b±Hw6MGGííí¤³i@MM55µ8±…B‚â&^h’w]††EhZø^@h€iY¥!d÷ Z³/”Ûî­4¢ê°-«›FDDö=ßóyfáBžY¸p·ëDcQÞóáP[_§y›²ÌÒÈqÛr°¦Úó¥¯ê(4¦ Fóë½-lËÂæ t»¥ïã6 ­†Ê¨ú•ú€ÚFþc?‡šI¶µ¶ÒÙÙE}]-a¾þC/ÛqðÝ"fÜ!QYEms3k^z‘бɺ9<Ï'‹‰9Dã b‰$•AH2žÂtCÌÐİÇ"DÀõ|° 'Šš˜†1#Ï/ÒÙÙIwwŽ€Ï p]Çqñ×u ‚Ë20- lL›L6Ëú›°cqêêYßÒÁKkÖòùo\ŠiGhíèİlÛ¦¸¾GEE…âëŸUÓ4LZ[Û¨®VŠˆˆˆˆˆˆˆˆˆ”†¥V]úÊ{Й‡®bi>7Pû¢TÆJC‹VFúFˆ¥~¥> }ß~5Ç¡¢"E:Á0Œ7jnÙÜB,#Q‘À+t!䋌3–_XJ{ËVâ6Ø–A¾èaF ÇÁ ð}üÐ'ßÇõò„ù¾ïã{aÏ\š–eaZ˜`‚Yú>–LÑÑ•&›Ís=*“•´u¦iiëäØN戣õb„aFBÛ¶)‹8¶ù†Ú)¤TÅZQ‘²t7‹ˆˆˆˆˆˆˆˆˆ¼R̆X šÔ¢~%ò¶g¾­î™ÿj[k¦ùúO¡ººÃ0(d ÄcI*ªëÀ´8x(MýÍ(º®…‚‹ëúX˜8–ƒB@ˆiš8ŽC4Úó‘H%©¨¨ ™LKƈÆãDã¢Q;â`Xfi[Û"Ý+¦vòٸµ…¢çsþô (z>E×'™Le’w‹D£¥Yls¹ðú>Îa&m­í½ÚJDDDDDDDDDDDDäÊ~+ºcµ¦ëº¯»1ðlÓ&|<¯@—›Çí:Im]ù¢‹mDÈc…ŽQËÄ2L,Ë&‘°°m‡ˆò,ÂÐÀ ¿4ŸeµSM@Hx¡Gè»=Ï/bù!™lÃ21C‡l¾¬n Ë¡º¶ŠúÆfò®O>,F]Šž[ªB5 ÌlÛæõÖ¤º®[®ÒtG½TDDDDDDDDDDDDÞÑì·êÀµ55d2ÝttvÑÔØ€çy¯º¾tuvRUUEˆiEˆE R1‡|w'i‚ò¹"¦ëbQœ0Ä !q°, Çqzª4#8Ñxi¾MÓ$ Œòð³^Aàû.ŽW P0(xÅÎ,™î,¾ëáù[ZZéÈæ9hÀpbµuÄì$™¼Gg¶'%OR(dqŒ€ˆãPtý×lË´hëlÇ0 jkjÔCEDDDDDDDDDDDäÏ|«lYµµ¥Ð®£³Ã0^s›ææFÇ!N—÷Q,™?>K–,!–‚Í|‘\¶@&“¡½½ÎÎNòùÃ0èèè ¶¶FsiŠˆˆˆˆˆˆˆˆˆˆˆˆðVjTUVÒé&_(HXfiˆVvñ¯ÉÆ›©¯¯§¦º’tÇVîøëmÌ›3‹m›6pÐÈÁT&btrxEÏòÉærO!ï⇱Tëáz!F©BÓ ÍÒcÓ° Œ°t<ßÃóC2y—¶Î ™k7µb8|×Å-äèßÔĶ͛øÒg.ç¢K.ãý—^†«À+qÓ4‰Ç“ttt‰Ä^µ=<×Ãu]bÑ(U••ê"""""""""""""€†aøVž€çy¬ß°‘ è×ÜŸîBÀõ0›¨íà>ùî,Ù|E‹Ÿ!—îbýK/0gæ¿©O:ŒÒÌÀÆZZ6oJscú~€[ô \ƒ€¨íàDlú55RQQA"‘À4 lÃ$‰aÛ6¶m“ÉvÓ•íÆ|BÒÙn6oÞ̦ÖÒy(º>†WÀÆÇ1B"‘‰TÑT †ŠØ IDAT>¹ºÃ8ÿâ÷3í”w‰ÆIVVŒEY·n©Š¦m—ÏÓ‰”†Äõ<ßõiÛÖŽiš ÐÛ¶û\gyhuéß ºqDDDDDDDDDDDDÞÉ^j)ý{êÐýs¼·<ÔÈdºÙÚÒ‚išÔ76‰DÈ独ZµŠE‹±hÑ"Ö®]K¾èb…>q 4$M& ïÇÀºJ*£6›7m ­­  ?0(¸>®ë†!¶¦ÉÉÉx¢4Ǧe‹ÅˆGb„¦eGHwgèHwÑ]ÈSð|:³Z[[ÙÖ™Æ'Žë‡8¡K܉Û&QÇ&‘ª –¬¦3ç³è¹dC‹ÆC¨mèÇ”©S9õÔS>|™\Û6KÃà‹ø¾imÙlÛÒ @sS#‰D¢OvN…š""""""""""""û?Ôì倩T’\>G:¡mÛV–¯x™Ù³ç°jÕ*ºººðýÓ4èêhÇÂÅŠÀÔã¦1²¹† »ƒLG ímÛ0M›ˆaâ÷Ìiiš&žç”æÀìì¤PÈÓíÆ2LlÛ&u¢˜viþÊL>GWº›t>K¾X “Ï‘Íæ)æ‹XQÇ4‰‰ˆCÔ6ˆ:¶ia!#ͺÖNÖniÇs¶mÛÆ?ÿùO~øaêêj9áä4hC† ¡¢¢Ó4 ðiïèJÃñöÕ@SDDDDDDDDDDDDä­ÒgÆ8m¨¯Ç÷²Ù,ƒ4ÓÖÚŠçy¤R)²Ù<]]Ô×Ö`úy*€aƒP3ɸü¨C2£ày`˜† ˜F@Á4 \?p BŸB¡€ïº„aH†X–…mÚ˜–…çy<—lÑ¥àq}bàE±“¨mwL"&!ø¾KX,bÛ6†aÍf‰twS‰áû>Ùl–d2É­·ÞF4¥¹¹™‰'rôQGQU‘Ä÷|‰uuµê‘"""""""""""""¯`ö¥“ijl ‰DøøÇ>Bmmah”ÂÆ\·˜'j4ÕÕˆF(rD̘ãˆG±00 ±M°m»4ße4F,ê‹D‰%âØQ‹ÀðB¢çÑË‘ÉfèêNÓ™I“Íçð< ÃÃ0°m“hÔ!±HEl’ŽEܱˆZ¥am1J• ù|žH,FMm=ÕU$+RDb ²ù"ë7n&ðC<×gíšu<öèc¸…<Åb‘X4JS£ÆtÙ»/Œa477±qÓfR)¸âòó§›nfÞüd2âv 3aäˆa$Š9Ï+’îê £m‘X “Ð00Ë6±lÛ2ð}Ð p]“À,͵é{aixZÀ°L,ÇÁ'ÄòC Ï%t]ð}B #$f›˜a@Ô‰Ù¦aa‡¾ÁˆÆÈ t粤³Ý¸V”¬‰DhllÄ4M,Ë¢P(0rÄ>zéˆÅbD"š››0 C½QDDDDDDDDDDDDdì¾vB¦iÒ¯¹‰-[¶p饤²²’'{ŒB¦LGšÆ†Z,Ó ±‰øQº‹ÊT 74pÃÀ0Jój¡cbš>¥ ÌíDZ#!¦k†]š‡Ó |Œ‚K€YªÄ M,à µ°ýË4p¬Ó4 Û‰`Æbä .‘XœÚúzlü Àu}Ò骪ª˜zÈÁ\0ý"§T¡ÙT VhP P1 zF¦- MkZ`õ<¶,Ó¢X(`6‘ˆ…mÛÄl›Dªƒöt†ŽL7žÅŠÆ0 Ïó1|ï½øª««0M“úº:R©¤zžˆˆˆˆˆˆˆˆˆˆˆˆÈëd'™J%‰Å¢´lkꨬ>Ž$yº–Ï%YQE1ÛM*•Â.ºù"~PÀCÂÐØa¾Ê€XÄÆ ‚<Ë' Cè ?]×Å0 4L0-,ÛÀ²,¢N„ˆm¸Eb±–m±x”xE%­Y—ÍÛZéÊf‰T¥ˆÅT×Öñž ÏaôÈa˜¦I<§¡¾Û¶øNóÔÝ8""""""""";ê™õ Í6%""ïõ‘ý{¼&a³m›~ÍM¤ÓZÛÚÈqbcO$š^O67‹bºHÄÀõClÛÇ´{BÍ04ñ 0Í€À/U`AÐ3f©b3 CLÀÂÀ²KÃÐFl›ˆí`Û6žaa;&¾ïRô=â±$¶#ÓfÖÓ¡©_Î:g:‡N9˜X,ŠišÔÕÖRQ‘RïÙFnÿ ÑÃ÷}Z¶µ’ÍfËÏEÒI¯\Ķu/Ò-P, ÃË(UaüRˆ~àúaù{€\®ÐÓ(`&Ž!b;DzæÝìÎå‰Ä¢ø¾‡o@ª¦š¢a±`Ù t1κðCLš4¥|N‰D‚†ú:,Ëz[t–‡V—þ=u¨n‘w²ýc¡Z–EsS#¹|žŽŽNr¹ÅŠþD§ôgØÄ,™ÕKذt.ÅînBìž`34À B3Ä | B¼0 À ĶmL lÃ$b;DŽeab„†LËÁ‰D0"6v4A²ß>pòû¨ªm(Ÿ_<§ººŠx,¦-""""""""""""ò&Ð<Æc1âÍ1 Å"twwS´DFÁˆ‡vl$½a%k_ÀÍt5#øaˆø˜áûø¾Yz6j”†œµ"Ä"Qbv´hºn`Ù*úÑ0tý‡`U5bÚNù|R©$UUUD#õ,‘½Ä~;\D4¡©±0¬§»;Kw6K6›%¬Dªf© 'bûyÂL;n¶‹B¦ƒ\W+¹t'¹\†\w7ùî.lÛ&žª"™¨"‘ª YQ‹“¨Äާ0)Œd F,Q>®a$ ’‰Éd¢<Ì­ˆˆˆˆˆˆˆˆˆˆˆˆˆì=öÛéb à •J’J% Ã\.×pæðˆAU?̪~Äøò,‰8ÉD‚x<® SDDDDDDDDDDDDd³ß®¶½Š2‘(UVæ Ü¢‹ç{xž‡çùO„A€ïû@)´4MÓ40M Û¶°mÛ²q"±hT½FDDDDDDDDDDDDd?²ß)‹FHŠˆˆˆˆˆˆˆˆˆˆˆˆ€L5ˆˆˆˆˆˆˆˆˆˆˆˆˆôe 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjÊ;ʬÇgóá^Æä©G2jì$?zúÈÇY½fÍÛæƒ àÏýçN¿˜q“¦rÐøƒ9î„Søü¿‚ïûêûЗ¿v%CGŽå¤Sß­ÆÙ‹l5¼Üð»?ò£Ÿü”ªª*æÏ}œHÄ)/û¿¿ÜÌ·¿ûý^ëoÝÚB&ÓMScãÛ¦ >û…/sï}÷÷znÝú 8˲ÔIDDDDDDDDDDD䀣PSÞVn¿ó.Î=ûÌ^f:“áÇ×ü €Q£Fòÿ®ý £G¢eÛ66oÚB<ËÎyý†Üvûœ{ÎY 6ôMíkÎÜ'Ëæé§½‹oÿ×7¨¯«gíºu„A """"""""""""$…šò¶±dé2^\±€ ¦Ÿ×kÙ¼y Èf³|ëªo0~ü8ú÷ëGÿ~ýÞÒó¾ûŸÿâúÿù“&NxÓ¡æÌGgF¹æêïSYY ÀÈÃÕADDDDDDDDDDD䀥95åmãö;ÿÀÈ‘#˜Ê’%KÙÚ² ¨¯¯ã)sé‡?Ä¡SÙå9xžÇÃ3áÖÛîäåU«Ø¼y õŒ7Žwz2§œ|"•••lÙ²•^} ÿºïß„aÀÇ>qy¯ý]0ý<~vÍÕ¯yí[·¶ðç¿þ|¸<üîÂEO3täØò:—}ìR¾yå×vÚîÆ›þ̬ǟ`íÚu‹Ešû53iÂÞ÷Þ‹8ú¨#w{Ìc¦Ì†¹ïž0nì–¿¸‚ë®ÿ% .¢eÛ6FÅ×¾òE>þÉOpÛ-á°C§î´ŸE‹3ýâ÷pÈ”ƒ¹ó¶¿íòxûÄåÌxäQÆÃ}÷ü£ü|<öø<ðàÃ,Z´˜›6’Ë婬¬`ì˜1\tÁùœÞ9»Üç—¿v%wÜyßþ¯+ùèG.¡­­_þúyèá¬ß°‘0 yzþ\jjªËÛ¬Z½šßþîÌž=‡-[·’H$=j$ï¹è¦Ÿ.ŽãèfÙjÊÛÂwÞÀqÇMSS#Ùl–ßÿáO¤R)ºººпy»¦Æ†òã0 y÷Ùç±víºòs–eáû>›6mæÞM÷sï}÷sÍÈÅNïuü®tš^òQž]²´üœišAÀºõX·~÷?ø×]ûÎ?ï^zùe.zšúú:¶nm ®¶–X,VÞ¾¶¦æu]û²çŸçÎÜ ”æÒ, D" õÿ¹¶ªªª^ÛüëÞó•¯_E>Ÿïõüš5kY³f-÷Ü{L?~ï;½Îé•¶nmaãÆM\ñÙ/P(ËÏ8€£Ž<Û¶ñ<9sŸÜe¨ùÀC—?½ø¶µ¶R_W×kÏóxjÞ|¦wl¯e_¿ò¿¸íŽôzÎ4MÚÛ;˜3÷IæÌ}’ÙsžäÚk~ôª×°jõj>xÉÇØ°qcùùD"Ñ+мçÞûøÒW¾ëºåçŠÅæÍ_À¼ù ¸ïþ>|˜nF‘}@¡¦ðZÛÚ˜ùè, Tݸ]UU³gÍà†ßý‘ýä§<öÈØöÎ]ß0 Î>óÝ,~f N?£:’¦¦Fòù5Ÿoÿ÷÷Y»vßÿÁÕœqúi¤RÉò¶¿øŸ_óì’¥D#¾yå×8ãŒÓ©«­¥èº¬\ù>ö8óæÏç¬3ß ÀÑGÉìY3Xþâ N;£TIxÍÈÉ'ð†¯ÿÄã§•¯óÒŠ™>ÆÄ ¸ãï7ïrý'fÏá³_ø2a2zÔ(¾ô…Ï0õ)Dc1Ö¬YË­¿¿Ü| wÜyaòóŸþx·Ç~böþü׿ÅøÔ'/ãÈ#'à8Éd‚C¦̼ù ˜3÷)>ÿÙ+vÚþÁ‡Jç][[C[[;3y”÷\tA¯už}v)™L7Ó¦õ5Ï:ó žyv)]x>'žp<Ç %^\±’^} ³çÌåö;ÿÁÅMçðÃÝå5¬^³–âÓlÚ¼™÷\t§Ÿv*µµµd2™ò:K—.ã‹_þ:žçÑÔÔÈ·®úÓ¦KÄqXÝÓf7Þôgž˜=W7¤ˆˆˆˆˆˆˆˆˆˆÈ> PSxwÿó_xžGE*Åi§žò¦öõÕ/q§çb±'×\ýCÞûKHg2Ì_¸ŸV^gûð¶ç{6—|èå磑ãÇeü¸±\qù'Þò¶ ‚€«¾õ]Â0dØÐ¡ÜqÛÍT¤Råå'Œgâ„ñôëןþì:îüÇÝœ}Ö½®uG¿ÿãŸп?·üõ& ¸ÓòiÇüù xzñbòù|¯ªÏ+V²jõj¢Ñ(ï½ø"~ý¿7ððŒGv 5Ÿ˜3€x<Ρ‡ôú÷øiÇrü+‚NÓ47v 7üæ—vÔqd³Yf<òènCÍûxÛ¶¹ñ÷¿Ýi_ÛýäÚëðf>6‹0 û\{Í›?¿üø¤ßíz¶msò‰'0ó±Y»]oÄða}ä»]>qÂxª«KóRΙûT¯e<øPRöЩS‰Çãäóù^C¸ær9=½€v:¾šd2Qz½ ùW]ïƒïïn—í8Oêö6Ù•ÊŠ &Œ§›RDDDDDDDDDDdÐð³r@Û^¥9tÈÙ¡’rOµ¶µqûÿà‰ÙsyùåU´µ·“Ëå^s» §ŸÇ–-[¹îúÿáÙ%K¹ôcŸdÐÀ\|Ñ\8ýürÕãžØÖÚÚk~Ç èßÿ U®ß°€ÆÆ†ÝVin7|ø0 …åprGcz*!wÇ4MŽ9úHî½ï~æÌ}²üü¦M›Y²t'?HÄá¨#à‘™òÐŒGÊs‹Î›¿×uçÓ„Rè?ÿu/3™É‹/®`ËÖ­d³9‚ xÝmRW[KccÃn—oÞ´y§6ÙÁƒòôâgtcŠˆˆˆˆˆˆˆˆˆˆìe 5å€åywÝ}P ߬ûþý_ùúUd³Y À”ƒ'“J%1M (Í¿¸;W\þ Î<ã4~÷û¹ëŸ÷°ný~vÝ/¸îú_rÎÙgrÕ׿úªáÙî\ý“k¹ãλv¹ìÑ÷3tÈ×½¯\¶ÐÆãñ×\7™H”·µï:Ô¬ª¬|ÍýL;îXî½ï~ž]²”t&CE*Ń=CÏ41à”“Oä‘™2ã‘G ÃÃ0˜=wny½W^çŠ+ùØ'?]N·¶¶†±cÆPYYãDxjÞ<ÚÛ;^õüªª^ý²;„Ú;¶É®$’Iݘ"""""""""""û€BM9`=6ë ¶µ¶bÓ§Ÿû¦öõâŠ|þK_Åu]&OšÈµ?ù£FÜi½¡#Ǿê~†Â¿ÿ]®úÆ×ø×½÷ñýË–=Ç]wßÃ¬ÇŸàŽ¿ß̰¡Cß²6«©­ Û}Íu3ÝÝåÇ©=ë¦[šW3,Xȉ'σ—BÍÓO;µ¼Þ)'ÈU|‡––ž]²”É“&–‡¬=þ¸ÞUš…B^ö)Ö­ß@mm ?ÿéO8~Ú±†Ñk½÷¼ÿžš7ÿMµYb‡ø•ó}¾’[tucŠˆˆˆˆˆˆˆˆˆˆìšSSX·õ ={Ô‘Gп_¿7µ¯[n½×u1M“ÿýÕ/vhn¯à|=’Éï¹øBî½û®ÿùO‰DÚÚÚ¹æÚëÞð¹ýìš«Y½òù]~½‘*M€ýKíÔ²m¯ºîÊ—^JUµµµ{ܶýú53rÄpž|j>ÝÝYæÍ_ÀéïúO¨ÙØØÀ¤‰˜ùè,Ò™ Ï=÷ïž]²”ªªª]nÿ¡|œ+ÿë;<2óQZÛÚÊÏoÝÚ¯~swÝ}§½«w[]]]šõüÌ|”bÑ%ɰjõê}Òv?ûéÕD#Ö­ßÀïù÷?ømmíär9^Xþ"ßþïpíu×—Î÷ÔSxש'¿écyÄá8ŽC¡Xäö;ïØe=vÌA 0ß÷ËmöÊ¡g·ïo{ úíï~ŸE‹ãû>™L7 =ÍÇ>q9ÿ{ÃïinnÚ+möÕ/Ó4éîÎòÞ÷_Â}ÿ~€ŽŽr¹/®XÁ5×^Ç÷~pu¯°UDDDDDDDDDDDö[M š•+_âÙ%K¸p/ = pþ¹gsûÿ`Þü<öÑeÿ—ì—–––$I¡Ì3'ÇstÎ8ýëù¯|/µµµOÛöØcŽÎÙ?ú~^vøainjJuuufÏž•ƒšÿ¢µáᇚË.¾ Ÿúä_å%ûí›)S¦¤¦fì¸Ç½þØü×¾—3¿õõ¤ìžÚãò5¯~Uªª6ü›Šc^ódÏЩSÛ²ï¾ûl°Ü§>ùW9ãô¯çðÃMSSc*++3sæŒ{ÌÑùÙ9?ÎG>ôg¼^ÏÅ)'¿9_pnÞrÒ›2wΜTWW§­mJû‹Có¯}9_ÿÏ/gï=÷ô€A¡T*•4›â²%cGï¤-ÚìÿÊ IDAT¶e›;7ÒS(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kUš€mÙHq4=½Iqt4##ÅŒG3:ZLRHeeE*+*RUU™ÊŠŠTWU¦©±>Õ•~°¹5Ùæô §·o =}ƒ)ŽLP²”‘b1#Åb‡‡Ç—¶wv§ºª*M µi¬¯K]MµFx 5Ùfô fͺî <dVUV¦¦º*5ÕÕ©©ªLuõ†ßÃÃ#.f¸8’Á¡á Œd]×HÖuõ¦¦º:3ÚšS_[£‘^BM¶zCÃŬîèLÿÀÐø²Æúú45Ô¥j‡‘­®®z<ð¬M’Œ‹ééHïÀ@††‡óتµi¬¯Íô)-©®ªÔè/ ¡&[µUëºÓÕÓ›$©H! uij¬KEáù͉YUY™)-inªKOß@zûÓÛ?˜ÞþÕ™ÚÚ”©-Mà"Ôd«4úÁ¿LCýÄCÞVWU¦¹¡>Ý}ýYµ¶+ÛÏžæl¢B©T*i6ÅeKÆÞ©<êÓÙÝŸÕ©®ªÌÌ©S6Z~ÙŠ•ùÚ·¿ŸööuãËvÜa»¼ýä7f·]7í¤ßÿ§üÏÏÏÍ£ËVŒ/›5cFþæ Ó¦µM¸íøÜŸ¥RæÎ˜š†º70)mîܨB“3Yut÷$Iš6ÒK2IÖ­ëÈW¾ùÝñ@³²²"ïxë›ò™O}b“Í$Ùk÷Ýòùø›¼õ¤R(’$+W¯ÎW¾ùÝôööMüf+ÆëÚÑÝël"¡&“R_ÿ`†‹ÅTVT¦¡¾v²ýýùÚ·¿ŸŽŽÇ‡ªmmÉ?|òãyÕ+Ž&ŸB¡cŽZO}âÃijlH2l~ýŒ³2<<<á¶M cuíÌÈȨ ° „šLJ½ýI’ÆšIòËó/.¶ªª2ÿÐ{²ÓÛ=ï:ì±û.ùÈûß5Œ>ðÐÒ\xéU¿á**R_;V玽56…P“I§T*¥· ÉÆCÍÕkÚs͵7Œ¿>ímoyAÍ'ì¹û.yË}É¿K÷FÂÊ'êÜ÷ø901¡&“NßÀP’¤¦º:ß¿þÍE)džyÝm×rÄa/}ÁësÌ«dά™I’ÁÁ¡üö’+&,_S]•B¡¡‘ÑŒ A °1BM&þÁ±P³¶ºjârý¹åö?Œ¿~ËŽQêS(ò¦Ž}ÃM·¦T*MX¾ºª2Ii< à™ 5™t‡†“$Õ 5ïºgqŠÅb’dûys²Û®;½hu:hþKÒÜÔ˜$éîéÍýzhÂòu55I’¡áa`#ª4“ÍððXPYµ‘¡gïºûžñç°ßÓÖß~çÝùåy&…BNyóñÙß½'ÜßDå …BÜ¿\sÝcǾçÞì±û.ϸ¯ŠÊ±º=~.<3=5™tFFÇ‚ÀõÔ\±jÍøó}÷ÚóiëÏþé/³|åª,_±2çüìÜwcå÷Ù{÷ñç-[1á¾j*+ÇÎ¥8â‚l„P“Iåɹ* -ÛÝÓ3þ|j[ëÓÖWV=ŠŽN0榖Ÿ5cæøóµëÖM¸¯BÅXý‹ÅQ`#„šL*…Ba½Ç‰tw?j677=mýÛO~CfÍœ‘íçÍÉ;N}ÓF÷·±òÓ¦µ?o_×1ñïñ¡s7%LØÖ™S“I§P(¤TM©Tš0Ü|êºâèhªÿlýì·Á¹6ŸÉÆÊWuZ²luFŠÅLijJcCíFËwu÷äëgœ•%KYoùÛÏÍû훽÷Ü=S¦4gj[[FFŠéìêÌÚu¹gÑ}ùÃ=÷æ±å+×ÛnÏÝwÉÇ>øî4Ôo|(ÙîÞþtõö¥¦ª2;Ì™á†&­Í 5)Û›sSô eÙªµ©H!³¦OIEÅÆ;Œó›‹/ËÅ—]•‘‘âs:nmmMŽí«sìѯڤc³jmG’dûÙÓR[]í†&­Í™ÔI­¡¶&Í éîíËšŽ®Ìœ:eã7}UeÞtü±yå‡ç—çÿ67ÝzgŠÅM 7kkjrØ¡åM'¼n£ÃÍ>att4k;»“$m-MM€gIOM6Y9öÔL’R©”‡—·g¸8’†úº´57>«í‡rçÝ‹rÓ­wfÍš5ééëKOwoR(¤©©1ÍM ™3kf=x~öÛgïTUU>«ý¯éèÊàÐpjkª³ý¬in$`ÒÓSž¥B¡93¦ä‘íéëHUEEšë7yûÚÚšzðüzðü¼nëºz384œŠBEæNŸêb<š€­AMuUfÏz¶«·/ݽ}[´>¥R)ëºzÒ70B¡y³¦¦²²àB<BM¶uµ™ÑÖ’$éêíϺîÞ-RÑR)k:ºÓ70˜$™=mJj«uŠx®$-lUZ›RUU™•k:Ó×?‘á‘LҜʊ͓ß³¶³;#Åb*+*2gF[êjª]€çAOM¶:uµÙ~δÔTUehd$«Ú;ÓÕÛŸÑÑÑí˜ÅÑb:»{³º½##Åbêkj²ÃœM€€žšl•ª++³ÃœéY½®;=½éîíKo_šêÓØP—ŠÂ 3¿eqt4=½ýééH’ ÉôÖ–Liip^ BM¶j3ÚšÓÚTŸÕëºÒ?8”®Þ¾t÷ö§±¾6 õ©ª|n•‡FŠéíëŸ73Išë3­µù9ï€ j²Õ«©®Ê¼™SÓÛ?˜öŽî Œ¤§ =ý©ª¬JMMUª«*SQQHe¡"••©¨¨HJ¥GKÍèh)#££)fph(ŧ e[WS“ém͆šx‘5Ùf4Öצ±¾6ýƒCééLoÿ@FŠ#éyÖûª©®Nc}MšêS[ímðb’ưͩ¯­I}mMf´5g¸XLOï@†‹ÅŒŒS,ަ8:šb±˜¤ŠÊŠT=þ_eeejªªÒÔX—ª CÌl.BM¶iÕ••ikiÔeLw3 ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&Ôd“UÆGFµÀ¶j¤4öøDv´95Ùd5•cCEm°­{¬«Ú|Çj²Éê¿1»†´À¶ªûñ¬¨¶róS¨É&›V?ö¸¦O[l«V?žM¯ß|Çj²Éf6Ž=®ìK A °ÍéËŠ’dVãæ;®P“MÖP5vsŽ–’Ek´À¶æžÇ3¢9MæÔ¤ŒíÞ6öØÞŸüiöØV,nO:“ŠÂ“™Ñæ"ÔäY©¯JöŸ1öü¡Îäm°5+•’ûÖ&t½ÞfR[¹yëP(•J%—‚gëÁŽ'Í É^S7oc^|½Ãɽíɺ±×{MM¶oÙüõjòœ-ëyrÜä$™Ý˜L«Ošk’†ê¤² &“‘Ѥo8éJÖö'+ûÆ–WÆFóœÑ°eê%Ôäyéëµ¹¼'q#l]* ɼ¦d§Ö-;j§P“ÄP1YÝ7–Ö÷'ƒÅ¤èΘT* ImUÒX•Ìjë™YU±åë%ÔdÒxè±Uë½ÞyÞL° ¨Ð@9jeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@Y«*‡Jtw÷¤§·7ýýýÛôŨ««KsSSš››Ü™ð¸-j eõêÕv%’ d`` ]™1cFjkj4 Û¼B©T*m‰¯[בu㯻»»sõï®Ê%—\’x Ë–-KOOÏVÝøMMM™;wnvÝu×{ì±yÅ‚W¦¹¹y|}Û”)ik›2)Î¥8:šÎî¾töôeph8##ÅŒn™[ €ç¨¢PHUUejkªÓÚÔÖæ†TVlù-7{¨9<<œU«Wgpp(IÒÞÞž3Ïøv~ò“ŸdxxÛî±Y]]w¾óùà‡>œiÓ¦%Ijkk2sÆŒTWW—e‡GŠYÙÞ‘u=al] …djksfNmMuUå–«Çæ5W®ZÞÞÞ$Éõ×_Ÿ¼ÿ}Ûü\𮾾>gœyfŽ<òåI’ææ¦Ì˜>½ìêÙÑÕ›‡W¬=¥¹1-M ©«©N cËtÖ˜ ç;…RÒ?4”Ξ¾tv÷=¾®çÌHKSý–©Ûæ 5;»ºÒÞ¾6Iò“³œÏþóîŽ |á _ÈÿzÇ;“$Ó§OKËS†¦ÝÒV¯íÊò5ë’$ÍõÙnö´”JI±8êÂl*+dž}tÅšôô $IæÍš–i­M›½.›-ÔΣ=–$ùýÂ…y÷»ß•’n|_œB!guV^±à•) ™7wnjj¶ü0´=}Yºlu’dÖ´ÖLokÍÐðˆ °ª©®Êªöެ^ו$Ùy»Yin¨Û¬uØl³zvvu&Izè¡|èChn‚R©”|ä#yàOJ©ToÃ-ihxä)æ”L›Ò"ÐØŠ dÆÔÖLokI’,]¶*#›yôÎÍjŽŽŽ¦§glÍïœyF\ýM400³Ïþq’¤§§w‹‡ÁËW?9äìô¶– ]$€­ÜðH1³¦µ¦¡®6££¥¬lïØ¬Çß,¡foo_J¥RV®\™_üâ®ú³ô“Ÿü$Ë—=–R©4o ƒCÃéìéKE¡ígMÓC`24\̳§'IÚ;ºSÜŒ½5«6ÇAÇzf^~Ù¥[´¡«ªª²ë®»fÏ=÷ÌÎ;ïœ9sædúôéinnNEÅX¾[*•ÒÑÑ‘ööö,[¶,K–,ÉâÅ‹óÀdttt‹Õý÷¿ÿ}ÞrÊ[308ææ¦-R‡Îî¾$I[KSF °í)ÒÒÔ®ž¾tõö¥­eóäV›%ÔL’üîw¿ÛíZÈk_ûÚ¼ãïȱÇ›©S§>§ý¬[·.¿ùÍoòßÿýß¹òÊ+S,nÞaW¯¼òÊ¼å”·Ž·å–ÐÕÛŸ$imnHq ¼lÅÑÑLij|<ÔìߺBÍ'ºž>öØc›å¤jkkóš×¼&'tRŽ;î¸Ì˜1ãyï³­­-§vZN;í´,[¶,]tQ~ñ‹_ä²Ë.Û,=8—.]º^[n Ã#cÃÍÖTW 5¶QuuÕI’Á¡Í7Uáf™Só‰ÐoÅŠ/ú±N8á„Üu×]ùÍo~“w½ë]/H ùçæÎ›÷¾÷½¹è¢‹rß}÷åØc}ÑÏ뉶ےCàŽ<¨Ž–šÛº¡á­,Ô,•Æ&`ìêêzqN¢¢"Ç|.\˜óÎ;/»ï¾ûfkÀ]wÝ5\pA®ºêª¼öµ¯}ÑŽóDÛ=Ñ–[–<6åesvÆ«˜ìUWW—Ÿþô§9ÿüósÄGl‘:TTTdÁ‚ùío›sÎ9'---[õ *ÛØvm‰¬hR‡š'žxb/^œ“O>¹,êSQQ‘SO=57ÜpËÚk¶%“2Ô, ùÌg>“_ýêWÙa‡Ê®~{íµW.ºè¢|ò“Ÿt‡Àó4éBÍÚÚÚ|ÿûßÏç?ÿù …$cs=>u¾Ç§¾~¦ç›£Ü¿þë¿æŒ3ÎHSS“; ž£ªÉTÙººº\tÑEY°`Ázaâ‹­P(lÒñþ¼\EEE>øÁfêÔ©yë[ßên€ç`Ò„šÕÕÕ9ûì³³`Á‚$ï¥ùçÏ'Z÷\Ë=uÙs)÷–·¼%¥R)ï}ï{ÓÛÛë®&…‘âhúúÒ;0˜ÁŒGËó²ÊŠÔÕÕ¦±®6õu©¬¬pñ¶2“"Ô, 9ûì³óæ7¿ùË”J¥ †ŒÏµÜ í”SNɪU«òñÜ]”­‘âhÖuv¥·0Ã#ÅISçžÞþôôö'Iª«*ÓØP—¶–æT 8¶ “"ÔüÔ§>•SN9eÂ2›Tn‰@ó þð‡³xñâ|ûÛßvçee´TÊÚŽî¬ëê_VQ¨HKS}šêSYY‘ŠŠŠTV¶èçèS•J¥GK-ަ8:šž¾¾tödx¤˜Ž®ÞttõfÚ”–Lm5¯1ÀdWö¡æA”/|á –éèèÈÂ… 3kÖ¬xà©®®Þ¬uìïïÏí·ßžŽŽŽsÌ1©ªÚp³VVVæ›ßüfþð‡?dáÂ…î> ,ôö feûºGdž—m¨«É”ææ46Ô–u½ …Bª* Éã½1ëëj2cjÒÝ7ήžô¥½£+Ý=™=}jêëj\l€Iª¬Çå›;wnÎ;ï¼ÔÔLüEôYg•7¼á 9ì°ÃÒÖÖ–ãŽ;.?øÁÒÑÑñ¢Õ­»»;ßýîwsì±ÇfæÌ™9òÈ#süñÇçœsΙp»B¡¯}ík©««s÷[Ôh©”å«×fÙêöGGÓX_›æÌȼYÓË>МHsC]¶›==ÛÏ™ž†ºšŒGóèÊ5YÙÞá¢LRej~úӟμyó6Zîšk®Þ××—‹.º(ï{ßû²Ï>ûäg?ûYFï}ôBùñœí¶Û.úЇr饗¦··w|ÝÙgŸ½Ñí<ðÀüÛ¿ý›»ØbFGGóÈŠ5ééH’̞і¹3§¥¶¦z«9ǺššÌ›5=³§OI’tõôåÑí-•Ü“L¡Tzñ¿Ý}ð¡%I’ÝvÝe“·ÙÿýŸÀ· IDATsíµ×¦±±q£ewÞyç,]ºô×uÔQùçþç444äöÛoϽ÷Þ›x Ë–-Ëš5kÒÕÕ•¡¡¡$IMMMZZZ2cƌ̛7/»ì²KöÙgŸÌŸ??íííùÜç>7áбµµµéèèHmíĽœŠÅbŽ<òÈÜxã›Ü&zàÁ$É.;ï´En–»þ¸4I)»ï8Ï;&±ÑÑR]¹&ƒCé¨(dÞÌi©«Ýº‡fí̲Õk3:ZJ}]mæÍœZ6sƒLF÷/]–$Ù7ËñÊ2Ô, ¹í¶ÛrÀl´l±XL]]]ŠÅbÙ\Ä%K–d‡vØh¹_ýêW9ùä“7y¿[>Ô\’¤Ýwœë “ØòUkÓÓ?ŠBEv˜;#ÕU•ÛÄyäáå«3Z*eJscfLmu3Ûm·Ý6ÓFCÃ#ééëO’̘6¹ç’¼æÚsùU óªWñœBÍ$™ÑÖ’e«ÖfmgwZ›SQQðFÚF]{Ã-É+úþweÝwÙà>îÿÓCùú™g¥ÿñáΟh—G[žG[žën¸%ý¿ßŸ™3¦¿ ÇïèìÊOq^n¾íÎ§í·¿8˜G—­È£ËVäškoÈ{N;5‡<ß&‘² 5›ššòÎw¾ó×?Óp®Ï&D|±Íš5+###©ªÚô¦}Ýë^—Ï|æ3eucl f2ÖÓ÷³ŸùÇ ËÜrËmY³zµO‹2vÉ%—mR¹Ùsfçôo|m›l£ŽîÞ$Isc}êjª'õ¹Ü~ç=Ï{õu©¯«IÿÀPº{ûÒ:‰{®òÜŒsÎÏY³f5·€k®»)IR]]áááüþº›rÊ›O˜ôçÕÓÝ“«®¹6CCÃÙ~Þœ¼âˆÃ²Çµ¥9ƒY²äÑœwá¥Y¾be.»òšl7oNŽ<ì îkÉÃæÛßûqÚ×®MKsSºº{^Ôº?üè²|ç‡?I©TÊ´imyõ+ŽÈÞ{í‘Ö–ætvuçö;ïÎÅ—_•žÞ¾œþÝæ_>÷÷inZÿ󳳫;ßúÞÒß?Ö–æœü†ã²ç”RÝw~qîo³º½=§ç‡ùÌßÿUªŸò7óó=þÒG4÷ßoŸöÒ³ÓNÛ¥±¡1]]¹çÞûrÁÅW¤··/ßÿ¯ÿÉöÛÍÍœY3½`’(«PóðÃOkë³ëAôýï?çž{nÙœÃ\þð‡yÿûß¿ÉÛÌŸ??Ûm·]}ôѲ8‡m%ÐÜT>Çy6«*+Ëê<*ˬ>/”U«Vçæ[nñi>ÑR)]=}I’)Ïs¨Õ-Ý£ñ¡%§}íÚd_m-MéX›Î¡æ¶jñýÊÀࠆغ{zsÇ]c?P8ú¨WäÂK®Èu7Þ’“ÞðúIÿïU[Û”¼÷/ß–þþÁvÈë­knjÌŒiӲמ»åóÿúÕtttæò+¯Ù`¨yÍu7期ý:Ã##Ùq‡írʛϗ¾væ‹Z÷¶››“ßðúôõäÄדªª'¯EkKsvØnnæÎž•3pvzûú³ðºóúcŽZo]vUº{zSUU™¿ùø3oÎìñu¯xÙ_d‡íæå_¾ô<¶|e^{cŽZpÄ vüöÛ'§žtbvÛe§ì¼ÓëÕ«©±!óæÌÎÎ;îÿÏo§X,æw ¯ÏÛN~ƒ7$Lejyä‘Ϫü¢E‹òñ¼ìõ‹_übN:é¤L:u“ÊWTTäÔSOÍ—¿üå-^÷ÉhÞrË­ùÑÏηߑîžî̘>3/ùùÀûß›9sæä=ïý@®¿á†$ÉwÎüv^ñò'ï³[o½-ï8í]㯿ý­oæU¯\$Y¶lY¾ô•¯æâ‹/_î¹ççÜsÏÝÜÔ”›n¼nƒõj¨›ŸóúnÈÙ?9'wÝyW:»º2¥­-ΟŸÓÞñö¼ô¥opÛ×wbZ²$IrÔQ¯Ê·¾ùõ –;é”S³èžEI’Ãþâ/òÃ|ïÛ©¶¶6Åb1?ûÙÏóË_Ÿ›‡~8¥R)»í¶[Þü¦7æä“ÞœŠŠŠçu-î¹gQ.½ìòÜvûíyðÁÓÕÕªªªÌ™=;/}éÁyûÛß–½öÜcÂ}¬^½:çÿæ‚\~Å•yô±eY·vmêë³ãN;æÐCɉ'œ=÷Ø=¥R)çž÷›|õk_O©Tßþèc^·Þþþþïþ6yÚXð3ÎüN¾ñÍo=yïÜtC6X«¯¹&çÿ›ÜqÇ]YÛÞžºúúÌ›;' ,ÈÉ'½)sçnx.³§ÞSo=å-ùüç>“Õ«Wç‡?úq®¹fa[¶,…B!;î°}^ýêWç/ÿòi~†ÞæÝ==ùùÏÿ_®úÝÕyàÇæ«®Î¬™³²ï¾{çåG™cŽyM&lÓþþÁ”J¥TUV>ï^š5ÕcÛß}ï}¹üÊ…yøÑÇÒÛ×—Ö–Öì·Ïž9þµGeêÔ¶ ÷ÑÝÓ›+¯¾6wÝsoV¯^“¡¡á´µMÉŽ;ÌË‚#ßàsÝ=½¹ð’+sÕ5׎/»êšk×{=eJk¾ò/›Þ뽡®6…B‡†32R\ïËs¶~£££¹áæÛ4ÄrÝ 7§X,¦µ¥9¯}õ‚\üxvÇ]÷äà÷ŸôçwÀ~ûL¸¾¹©1ó_²O~·ðú<ºlEFGG×û7¸§·/¿:ï ŒäƒÈ{Þqj–­ØöØcùìg?›ÓO?}“·9ñÄ·x¨9Íþè¿ò_úÊúí¿ì±üôg?Ï¿ým¾{æYúðÃÏiß§¼õíÏ«GXSss¾÷ý³òÕÿ\?\³zu.»ì²\vÙeù»O}2ïúËÓ6K[ÕÖÖäÃùXþþÚõ–ßyç]¹óλråWåëßøÏÔÖÔ<§ýý›§çÌ3¿û´å###yhÉ’<´dI~õësó™ÏücÞú–“7¸Ë.»,ÿôÙ/¤««k½åÝ==¹ûî{r÷Ý÷déÒ‡sú7¾–Ÿþìçùâÿù—¼º{zò·Ÿü»\½pázˇ†ÒÙÙ™E÷.Î~ø£|ásŸÍÞ0ñ0‰wÞygî¾gQÞûÞ÷§«»{½u‹ïûcß÷Çüæ‚ßæ'gÿ(3¦¯?¯ØïÿSÞ÷fõªõ‡>.‹YúðÒ,}xi.¼èâ\zùåùöéߘ°}ƒCIƆž}Þ÷QMmοð²œ÷ÛKÖ[Þ¾vm®þýõ¹áæ[óñ¿'{í¾Û·¿{Ñâ|çÿ¾þþõ–¯Z½&«V¯ÉÍ·Þ™—ýÅÁ9ím'§ºúÉöÊ«¯Í¥W^ý‚^ëB¡Æ†ºt÷ö§o`(-M›Þ>ƒCC¹þ¦ÛrËmwfùÊUéîîISScÚ¦´f×vÌQ¯|YfÏ\HÃR©”Ûï¼;×Ýt[Zúpº»{ÒP_—éÓ§æàùûçÈÃ}Ú0ŽOøý 7ç‡gÿ,ûï·O>ñá÷dÕê5¹èÒ«rÏ}LggW²ývóòª—–ùûï7~¯\uÍu¹éÖ;²|Ū ¥mÊ”ì·Ï^9ÒÖöô‘Ö´¯Íß}öÿ¦®¶6ßú꿤`0—^ñ»Üzû]Yµfmjª«2cÆôöÒóêW9ÂÜ~çݹ溛²ôáGÒÓÛ›¦¦¦ì¶óNyÝѯ|Zo©?·dé#¹âêßçÎÚŽŽ4Ô×eö¬yÙ_’Ã=8••­çððp®¸úÚÜrû]Y±rU†††3eJKöØuç}Ô‚ì¸ý¼õ¶¿î†[rÞ…—fMûØgüÒ‡Í{?úÉõÊüûÿ!Ó§­ÿ㤵k×媅×ç®»eMûºTVVdÚÔ¶<ÿ,xùáÏxý’±uáõ7åú›nͲe+244œÖÖ–¼dß½rìk^ù‚ôîÎ5×ÞÛî¼;Ë–¯H_ÿ@ZZš3wÖÌ~èÁ9äàùÏÞŸuöOsÝ ·ä”7Ÿ×¾æ•yhÉùâšk³ø¤««;55Õ™3{f9è€õŠ#Ÿ÷^s’dþþû¥©±!ûîµGþ°hq®¹î¦ CÍ?,Zœ¯}ëûI’Ï|êÙiÇí7Xn`p0ýë±áåß~ÊóêþáÜ¢ûîÏ¿»6-YšžÞ¾455fÏÝvÉk^õòìºó޹äòßå翾 Ž<,§½íäô3艴<õ‡9ãC46äïyG|hiŽ?ö5c÷Pq´lþþš:µ-Ý=½O›3tåêÕéîî|þû=ãöÏß?7Ü|{–¯X™U«×lpnÍçrüMþ­iìÇ@%ÿ/“JY…šûí·ß&—íëëË/~ñ‹²mسÎ:+ÿôOÿ”Ù³goRùC9$õõõéÿ³/ú7—ÉhÞpãO 4Ÿª§§7üÐGÒÓÛûœö¿Ï>{§§·7wß}O†‡Ç¾4›6ujvØñÉ/蛟ù ì»ݓ˯¸büueeeŠÅâzeþãK_ÉË_~dvÝe—½½~ü“sÆç­¨¨H©TZï‹Ô«.Ì—¾ü•üÓ?|ú9íÿG¹^¨¹ÓŽ;eJ[kV­ZeË–% Y¾øÅÎK:0»îºëÓ®ç'þê“ür÷©ÞpÂqI’¶)SràóÓÞ¾6?%¸Þwß}Ró”`vÖÌMŸ+ktt4ûØ'rÓÍ7¯·üϯÝàà`þþþ1•UU9þ¸×=ãþþxÿŸòÁ}x<Ь¨¨Èèèú_J?üðÃù×û÷|õË_Zoù§?ýëš³çÌÎìÙ³ÒÛÝ›zh¼>'½é=¯ÁÇC͆úºç}=´ôáÜuϽi¨¯Ï/Ù;mmméîêÎmwÝÞÞ¾ åôïü(ÿçÿöi¡Ùƒ=œoœùƒÿb¾µµ%{ï±kjkë²jÕê,¾ÿ”J¥\wã­ÎGÞ÷dàÐü—dæôi¹ïþ²ðú±yøöÝk~蓽kkŸ} ßPW›îÞþ %Ù´Pó‘Ç–çÌV­·¼³³+]Y²ô‘<ÿ%ë…š½}ýùÎYgçžÅ\o›îžÞ±ÞFKÉeW^“¼ç=c œ$ËW¬Ì½üS¾yÆ284ôä±»ºÓ¹hqî^´8o>ñuYpäáùò×ÏÈ#-_oûÕkÚsÕ5׿ÖÛïÌ?ýíÇ3mÚÿÏÞ}‡5y®ÿ&@Ø{ˆ‚¨Èp/ܳZ÷ªZ»\vÙ¡­]¿ÎÓs:ާÃ.k­V­ZµîQµV¸p â`ƒ²CHBÈúýD6ý~®ËËŒw<ïóŽ„Üï}?ÕW(Q©’šŽV­CN^žñuµZ yj:RRÓ{õ/š_~Ûˆ“§£«ôEôÅ\ˆ‰Å O?‰®a!UÖ¡×ë±sï_ع·bL\@`Ø–"®Ç'áø©3x~áS5 KT*¤¤ÝÄÏ¿n@æmÓý‘—W€¨¼œ>wÏ̃^=ºß;w1zè![¢´T ‘H''ÓóþŽÌõ‹1±øé× ÆóI @¯×C®P"íæ-üs" /<=þíÚVý΢Tâ›WãF|’Éë¹yù8yQ§£±pîœ&›é™øæ‡ÕUnÆ)((DAA!®\»ƒÿÃó ž„««s-ÇX6þ‰MÛv™\•J-’’Ó”œ†sçcðúKÏBÜÈÌïøÄdd–eF”ÃýûöÂå¸k¸rõ:òó êÌø¾¶l߃}T9vÏD_ę苘>y²sòšmý7>ÞžÕVJèÒ)]:Uœ3f‚+”n>rv4=oRR+2Û×p€€J7;¤¦e48¨YÓúë£D¥BZzFYß{ó¯A""""""¢VÄl‚šÎÎÎðõõ­÷ôûöíCnn®Ùv¬J¥Â‘#G0{öìzMoee…ÀÀ@ÄÆÆ¶x[[뚟¹ÜäùãÍÁ‚ùóàêê‚”ÔT|÷ÝØ»o£—ÿÓ߆ ‰ì²Ë ˆO?ù¸^ógefA(âõW_Á”)“àè舤¤$¼÷þ‡8þ€²õwîÆ+‹›¿ŒrnN:tćïÿºv ‡F£Åá½÷?0føèc>úècôíÛ»J–e9N‡üü„……â·–!44 …{öîÅ'ÿú·1Xþ×_‡ P(Œed333wõšq9 ÌÇ«¯¼l|.—+pðà!?qÆ ­s»J5wgÞPk5Æ ¦‡‡;ú÷íÙ´Á²l³R¶^ÓÉŠ±|ÅJH¥E‹-1zøt í{{[HqóV&’ÓÒÑ1(Àä8øî§5¸Ÿ@€‡F A¿>=áæâŒ’®'$aûîýÈÉÍÃÿV¬Â»o¼\mÉFÀû~åxyy`Ê„1ðoç ­V‹ Iظe¤E2ìØsÑ/##ó6&Œ…Þ=»ÂÙÉ…RþçŽB‘¬[wîÅÓs«q[—¯X ‘H„¹ÍDHç XŠÅȸ•…Íî25ã®áÓ/¿Ebr*zõÇèáCàåé…R‹1qغc/Ôj5~Ûô'ÂB‚«múÇÐ9lF 7W(”Jœ»ƒßÿØŽø„dü²v#^^4¿ÆvþoÅJ”ªÕ˜6q,ºw …“£#¤²"\ЉÃö=PZªÆÚß· 4¤3¬­¬/=;ðÝʵˆ¾ƒ¶>ÞxïÅ5®#19ßþ´z½!;bêıhçëNkñ X¿éOdçäâ›Wã÷^«RÖzõºÍÆ€æÀþ½ñÐÈ¡ðpsƒB©ÄøDlÛµ?ü¼¶ÑÇq¡´Ë¿ý Ò"ìlm0qÜh„‡ÃÎÆE2.\ŠÅ®}‡švËW¬Ä»o.®1+ÿ|L,ŽEA§ @<§ì»¹¥…jþ.éèè 4m•š²þºèõz¬ßü'TªRˆDB ÜŸ µ"BsiHx¸¡ÔXyöXyp£òÿ•_ß»w¯Ùwî… LÚ^îÎí+ìçç×âml­ÍĤ$ãX’0tè¼µì xx¸C$!0 _|þŸǬl) æÏÃܹOÂÉÉ øâ³âR '..®EÚ"ðÍ×Ëѽ{7…BˆÅ–˜0aÞ|c‰É±¹gï¾F¯ã·–aÆôi&M˜2y¢ÉXšWã®™¼àÀAcàæÎ}K^{íÚµƒ­­ ‚:tÀô©SðõWÿmtyÜúX·nƒñ±›«+~øn‚;w‚@ €•XŒ‡O?­(y[$“a÷î=µ.ÓÖÖ?|·ááa …°³³ÅÌGf`j¥ K­V‹7âÏ•w”ÕöiëSe™“'OÄŸÿ§^ã –-„wç’?mòx“€&8ØÛaÎ#SÏÏF_0®®ÞHÀ­,Ã>vttÀ“³§›4ÀßÏLh|~$òd³Ÿe¥MÕeߺlݾRi^Y´S&ŒA@ûvpwsEÇ  2óŸ "€uæ<®Å'›93¦Œ‡¯7$k8;;¢_ïîxëõáììµZÕë6Õ¸~½^±•–¼üºt†½-œЧg7Ì}|¦q§¦ÝÄìé“0yüCðñö‚Do/<1{B:ÎŘثµfFËJ¼ôÜ| ìßÎÎN°³µA§ ¼üÜ|cVlbr*zvÇsóŸ@`{?ØÚHàîêŠQÃaü˜ ™‚i7o™,;/¯ÛwJ:³§O2–zµ‘H08¢/fM3 1W®âê„Û)+–cÑ‚'ððC#àíå ‰Ä^xhäP̘<Þ¸-WïÈ’mˆ5ë7C¯×ÃÏ×//Z?_…BXXˆÜ /<ó ¥8ôϱ;>¯Rpþâe@D¿^˜ûØL´ñò„……övèÕ£+ÞxeÄV¿¶mÛ±Ò"D"^{éYŒ2î®®H¬áéáŽ1£†añ¢ȼm’[e¿Ë l×^|¡]:ÃÑÁöv¶è€WŸÚ˜AyîÂ¥FµUY¢Â¹ 1`’i-[¢g7ÃwÁã§ÎÖ™µßZ­Ûv¾Gz{z`éâçÜ)¶68:Ø£kh¼±øyøCY¢jÒºÔ ä %äròòòq)6?¬ú kÖÿ@€‰ÂýZÕ;÷ÆwqqF·;²°ËûËÎÞ¶Îï$¶eÕ.Š‹åwmý•©T¥+”Ë‘y;'OGã“/¾ÆÉSç ‘Xã¹ùOÔx ™'³ jU”תücpM¯• ÍYJJJ½¦+ß6ï.ÕZš†ýÑäù¬™3ªí×™3fÜÓvNŸ6¥ÊkÞÞÞ ho|^PXØ"m é?ÿ*¯Oš8VV™(11Í“-ì])û³Hf:ffÔéS&ûmîSO¶ø¾Ê¾¤ädãó Çîš’—C BÛ¶å%ÿ:x¨ÖåŽ1¼Ú2Š˜f‡J+Žƒ6ÞÞ&ûäßÿþ «W¯iryêêÆ&lÌ2B‚«ÏŒé`ÌÌQ–¨p«¬¼$\½V´íÓ£«Éx™•õéÙÕ¸¾Ÿi‘¬Y÷»…ÈXÕhëÎÔ,-Uƒ1}zšdcÖæèñ(€—‡† ¬>xá`o‡ñcF’SÒqóVVË: _µÙca]:ûÎÖÖ¦Æuu/çNY¢ªµƒ;v¨¶”ªƒ½:u¨(ýðèáÕÎߣ[XÅçÍmÓ±aÏž¿µF ¦L¨¾„óÀþ} )+™|6úbí lï‡Ð.«}¯ߊ±º3³²uŒ$§¤##Óp,O›<®ÚóÈÇÛ aem8sÎ4Øwê\Å÷•©ãÇT»G{@™« IDAT ŠèÛ¨ö•¨TÆu è×íÚVŸiÔ¡=úô4”à=yê¬ÉMw?vdµÛi<ökC³ëÊ9wÞX:9âŽLëþý Ïóò w=¾ÙÎûËq×Çþ„‡G3xM® "LÿP“×õOäI¼´ä]¼´ô=,}ï_øúû_pîB è‡wßXŒIãBkyò4.]6ÜŒ5kê„*×r¥ÒpSŽ¥EÝ¥‰ÅeóªTª»¶þÊ~úu^Zò.¿ñxçÃϰjíïÈÎÎŤq᣷—¯…DDDDDDDµ1 ¡t¯.û¯.û»÷2›yDfÔô)+Yà»óÿòÇåÏËÇè3gùeãZUn÷Ï+¿îââÒbmkÍMHII5yÞ¥K—j§ë|ÏÚèèèXcIeJcíië™!ÖTAÕÓgmmÀÀŠàLzzÅø”J¥ùùÕþS(U–uäÈ?Xúæ2ŒŸ8½ûöGHX7‡„#8$GŽücœNwG))©"˜ØÎ·]å\›ÓÓL°°šì «x¯òxžÕ «a¬`wÓ±>5•ŽkkkÌ™SQºº¤¤Ÿ}ñ%†|_|¹¼Ñ׿»‘÷äâì\%òòµ­rÖKNNE‰ðŒÌŠ ]»¶5—¶´´D›6•—‘×¼;¾ì¬×ÕÝ;I©©()ûñ½G·úý^ZªFJZ: kXpµ7í”ë^‘q[swP‡šƒ©ÎeYÒíýÚA$U?sE&u‰ª¤–õ´¯y=e㥊Ŗðóõ©áX©XòŽ ElÜuC;ýÛÕXÞS$ÁÓÃ@í´.k.?)±¶‚­¤¬ ¥:D.—e–‹D"ÔÜ'm¼= Ÿ¯99&cç&§¦•]ÛÚ˜ôý‚;6ª}‰É©Æ1v»†u©uÚîᆀd‘¬©i7«ÿb(¢SPÍmq+»IC£ÑBSϲ͕-+=Û)(И[®S‡@ãM å%j›CRrÅwˆðÎ5N×±C`çQSÿ:vò4Ölø‘'O7kVêÝw=ë6n žÝëÛ8ã6Ö÷CIXÏ*õZä %ö8„5þÀõ‰üKˆˆˆˆˆˆê´iÛ.ìØsÒ"¤E2ü¹{¿±Ù½žçAd6cjº»»×9^¯7þ ¬i¡@PShµ û±ÏÁÁ¡EÚÕÚš€¡ìge®5„œïá1]s`N(µx{k>¾*÷“¬R¸o¾ý«]Sí ¤…ÚU=j¼q¡r¶U þŸg陯`j`€?ÒÒ«Þ Ñ©C{D)ÀùK±Ëaog{×Ïû¼²›ÎŒÙÀ5+.NNÈÉküÍ£†ƨს×ëQZªF´IÉé8u×ã±fýˆOHÂü'fÜ%&¥àÛWC«Õ"<$³§O®vºòÒÔõ)é]ª1Œ+mmm}×Ö_Ù‹Ï<À0®q‰J…ÜÜ\OÀ‘È(\Ž»†Ø«×ñÄ£Ó1¸‘YÒDDDDDDô`8u&ºÊk‘'Ocr-žZjž‘Ù5ës—våNmllŒ™æª>?ÒÔ´}„»Òwµ•%knb+«f_‡ª¤¤ÞÓêjùA_×ÈûË}ôñ'&ÍÀÀL›2`+±@ Àò¯¾Ftôù:÷ß½:,ìÓÝ ©-!¥±ÇH$Â’×^Å”I±jõ¯Ø»wJKÕÆýµmûDž8‰ ¿ýZcFpŲ AMFË&^õëÊhÔÕТŒçYy:]óf0i5eãÖ#¨)—Wü­ÅõÛ¯ª²}b˺ÇL´²C¡T¢X^\˱Z÷uM$hz!†ú\?…\O±Bn<ï¬ê1–¤u-ÁôúôkS—ä1ë³!JËJ­Z×q-°jäµ¢´Rj]}a]©¯eÅŠêÛÑŒýy¢¢ÔøÞ‡±÷ÀášÏM­§ÎDcÔðÁw½%*u½Ïckë»ÓVVbxyxÀËÃ}{bËö=ØwðNžŽFŸ^Ý%ŒÍMRr–¯X •ªƒðì‚Çk,gng'³¸Žë¼ÞxM­ëf™†¬¿¦¿1l$´ó• o ÔËW¬Äõø$üþÇvtm–à9Ý„B¡ÙÎó ²h­ wwwÇÍ›7ͺ-•yÙPž®†òwåÙšùRCöQkÊÖ´·7ÍB*,”V[Ö¯º©­MmãžU.ïY—‚‚ßËË«XNCØ“J¥Ø»w¿ñy``þØô;$I½ÏûJYe¹Í]n´–kŠIŸäæÕ«¿lll 7_ð¼C‡øô“ñêâ—ñÛº ømÝz””³ssrðáGŸ`åO?Ôº K ”ª5Ð61x ÅŠÚÇõ,®”ékSéÆÇJû_&“׺ YqEF¤­¤Y÷»FgÈÔ×#P(©´=¥êú•2µ¯”¹ZZZ÷¸q%%†izSLkcc-\®@ÏîaXøÔónkY&Ÿ££¾üäÝÏ/‹¡T–@­Q×~­od ;»ŠëgIÇXIIiµÇsKP«Õ8}ö|ƒæ9vòL£ƒšªZÊ [Y•åXó¸¡U7bÂØQØèèõz\º|Õ,ƒšIÉiøïŠŸ ,Q!¨C{,~nqìÞêx•ek4ZJ‹ŒËU¿;Ë{ÖR­¥¡ë¯KKK<îØ)¨EŽ www¼úÊ˘5sž~v“'NFA£Ñ˜3w²[B®,\Y;›¦2 ¡P*aSÍ>Öét¸™QQNÒãâ‡j¯JåZ“SÓ1 _¯j—¯V«‘q«büͶm¼›µ_ Ãu·<ÈQG§Šç3oçÇ{¬ƒƒ=D"´Z-nee×:m¡´J¥!`}çXƒ÷gGääå!óvŽÙ·µ|lPiÙþ©­\iuœ •!»Ž6¤EÅjŸk¥z²²nû–ÒÈ™Y·+®)-|Œ»pò²›"ÞzýE¶÷«qÚ¿þ>ŠM[w!#3 IÉih_ñ™_ùŠ_Ûyy5ßÈS>ö¬TZUii­A²"Yq³õ‰••kk(”J””(ÍîØ7•%èÔ/=7¯ÎÌj¿ŠÊ©iép ©þ»CjÅxÔþþmïÚúë«òVŠT½ """""¢ÏÔ‰ca%ãÐ?Ç ²°À¨¡1fÔ0³˜çAd6ù¬999Ðëõõþ×½{w³ï\ÿZ·€ÉsÙãD67OW'xºVŒÍ–/•!¯PÖ*Ün]Mï¨ßºõÏj§Û½wo“×ec]¼©-{ïnrtªØ/ñññÈήúÃÿÆÍ4h™ñ ¸r%®Êë›7ÿa2Fm×ðÐ-÷Î,I5å“’“wµÆetïÖÍøX¯×cõê55N{gðÿÎjc÷‘«‹ úô®´íÚ½»ÊØ­ð÷ßG™™i|> D‹ûmÚ´Á´©SLúKQÇM!6Ö†Ò~Å ¥ñÚÓcâª}=&6δ°‘HÐÆ«"¸Ò£[˜ñqô…KP•VŸ!u&ú’±ÌnÛ6^pt0½Ñ¢riL…²i™Øz½²òöÖ£ôg{?_XXƼs¥~²B!ÂB‚Ëæ‰«µÿ/\ºl|Ü)(ð¾þòÒ©# -=Ù È8¿ë_‚ÊÆ ­-K²KçŽÆã%úâå†hgò¤¤¥£X^ó1_v£BC´÷3fØ_¸Tûqy>ÆÐ~++1üÚù´h_;i(QîãíUk@"úö6–/Ÿ¯œµUEP¹òx¢wŠ«áFð÷5îÓ«µL—•]ë>kªüüãõ»¾7ò´”ÊÅÎñò¢ùõ (º¹ºÀÛËÓp¼]Š­qºè²÷ìáQÍØÓ]}eddVúüwQMƉÿýç|ùÉ»õ 4¶Ô<"³ j¦¤¤@ ÔûßÈ‘#;sÃÂÂj݆òµü_m™lÍ¥µ6;u BÇ Æç{öîÊï¾7–›-’ÉðÃ+±eËÖ¦÷‘GE`ædÔ)ùç(ôz=JKÕ¸t)¦ÆàLSw®(AWZªÆkK–"11:9¹¹øñ§Ÿñë¯k¼Üů¼†£‘‘Ëcã¦Íøêëo+.B!ÆÛ eú¶5Ͱؾc'd•ÆÒ:}æ,ž}î…ZÇí|øá±&ãÉ­úe5þ»ü+ÜÌÈ€J¥Böíl¼õÎ{Æi¬ÄbÌ|dú]ßÿIÉɘ1s6Ö­ßP% ]TT„¿üc|îääûÚ3¬­­,! ¡ÓécÉ5Ŷ]{‘sGð8/¯¶ì0>ïÛ»»Ix_ot (;?‹ñëºÍP«MÛ’–~ ü¹Ëø|d5e'+¶õÚõ„:ºµQ¨J¡×ëa!A,®»pD‚®¡†¬£§Ï"9%­^ë< áxÌËáŽW;´H†]û ã ¶ómSgЧµ‹èÛ"‘z½¿®ÿ£Ê±p§»Œ¯ŽƒáxÊÉͯ±\iP`{cfÛνÈËËoP[ûö4Ü´¡Õê°kßÁjçQ–¨pøèÉFmƒH$DD¿Þ€¨³ç‘’V}iþñIˆ¾`jŽè ‘HÔbû;;'×ãË·ºË¦ØÙÚ gwç£/ ¤ÒÍ,žžÒ§Ï]¬v~Y±Gž¨qùá!ÁÆñQwî;d,ƒz§=þnÔöJ‹dµ–Ž/?NþØ¾Çø¼{xˆÙœŸ•Šá!Áxñ¹y *³>lPÀ©³çq«Rvpåký™s†j+ú÷©Rq¡)ë/(Ö9\¡Äî²ë­½-:¶ç_„DDDDDDD­„Ù”Ÿ½zõjƒ¦ïÙ³'<==qûömóìX ôéÓ§AóÜ«1B[k)ÚW_]ŒgŸ{ÁøüÛßãû~‚ŠŠŠ ×ëáê₼üü&­gР8uæ CVâ¢ç_„XliÌ&;qì(¬\ÄwuÛ&Mœ€ßÖ­7>?w.ã'N1) ..Îȯ%S¥Ê1–‘aÒgwzü±9ðònXÙdO„†† 6Ö!téR †  ???ädç '×…€Ä¤ê3‘œðòK/à³Ï¿4¾¶òçUXùóª*ÓöêÕÃäyxx8Œ¥x?þÃÒÒjµΞ…wßy«^Û2rÄLœ8;wî\¼x 3fήÒïå–-{£ÊXœwƒ^¯GlìÄÆ^Á'ÿú7<<=àîæZ”Ô4“lÕ)S&Õ¹<@{[ erCbÝøŒ ‰R¼ûÑçèÜn..ãRlœ1(d#‘`ü˜ª7žÌ{l&Þÿ×Q¢RáLôE\OHBHç H¬%¸“‹¸k7ŒÁïÎ1°,PSY ¿¬¬ÄP©J!-’áƒO—£[xô:=nÞº…W^xÚ˜áU—²rŸN¶õ.cüÈÔñˆ»~Je ¾øúGŒ= ]ÃB`g#R¥BFF¢/Å`Ä*û¡¼khôïÓQgÎcÓÖ(((Ä€þ½áæê•ª×o$bÛ®}J‹ ‰ðĬ÷ý—g<2e<~ß²×ãñѾ˜QÃèkkk”ªJ‘›—kñ 8{>O?5í|ÛÜõv¶Çá£Ç¡*-Åêõ›0kêDØÛÛ#¿°¶66Æ2Ë ž˜…}ù-¤E2|ôÙW3r(BC‚áè`­Fƒ‚Â"$¥¤âÜÅôêŽC×Ñ©c B»tFlÜ5:r #†„›‹ JT*$&¥`ÇžMÊ<ž4n4.ÅÄ!+;ÿýö'L7ÝÃB Ÿ‡2¢/^ÆÎ=A¯×ÃÍÕÝ¢ûûØIÃg¨¥…ú÷éY¯y† èSg/@¥*ÅÙó—0¨¿á;•½-‚;vÀÕ ¸‹5¶`ä0C*KJŸŒí»@¡,©ñÚmii‰‰Æï[v 5í&þ·b%¦Mzí|} Óë‘‘‘‰¿ŽDâôÙ &Ÿ÷õyâ9†îá¡íÒ mÚxÁÞÎBÅr9RRoâïc'˜è×»»IÙÖ»!5=üiø,ëÝ#Cö¯×|É)EOwwŒ6‰•JÔWûîäh2.æà}q$ò$2og㋯~ÀôIãʲÏõ¸r=[·ïV«ƒ£ƒ=1ä®®Õo‘—_€^ÝÃÑ1(^žî°‘Ø@§Ó¡ PŠø„$øû¨±<ñÔIÃÒÒDDDDDDDÔ:˜MPóÚµk())µuýƪ3f Ö¬Yc–û裚Œ×SÉÉÉ÷¬½­1°9dð`¼ôâóøú›Æ×´Z-¤RÃ6xxz`ÙÒ%xåµ%MZÏ#ÌÀ¶?·›äúgC…„t©²m€iФI0 –¾¹¬^Ë|ç­eøfÅwÆþ©ÒŸC†àÕW7ª½ÿ÷Þ»xjî<ÈËÊôÉå “r³3¦OÃÓO/À¨Ñ5gÎ}êIËñÝ÷?Ô~îÃ4ø$[bÉë¯âÝ÷Þ7y½®Ì¯š|üá°‘Ø`ã¦ÍÕö;`¸iaé’×0ó‘– >eßÎFöíªã14/½ð|½–áì`‡B™ÅÊ(KJ!±n\ ~ÆÔñ¸y3‡Ç¥ËUËÐJ¬­ðâ3sáäXõúçîæŠ¥¯,Â7?®FAA!¤Ò"œ<]eºðÐ.xfÞœjb±%&›¶2:sóòqèȱÊ'I½¶CQ¢‚B©‚@8ØÙÔ{ûÝ\]ðÒ3óðÃêuJ‹ðç®ýøs×þ*Ó ºcï'fÏDŽÆÃGqàðÑ*óØH$xfÞ´÷÷Ń`ä°AÐhµØ¶s22³°jíï-Þ†î]CÑÞßÉ)é8} g£/ß{ó•çÔÁ˜ö÷óÅKÏÍÃ/k7BZ$ÃÛ÷˜dÙUÖ£šÞ žœ¯¾_…ä”4üs, ÿ‹2yßÖÖ/?7?ü²……Òo‡•XŒW_Xˆ?¯AjÚMlؼ6o¯2·'^|vž1K±%hµ:œ8}ЫG8lmëw¾u @/ÜÊÊÆ±§AM˜3s þ³ü;Ȋ刘3sê]ï÷äÔt\½Ø¿þ7Ùøû¨qlßÛ99XþíÊz˳§WÜ`cii‰çŸ~ÿ]ñ3òó °ê·Uæ±µ‘à…§çÂîŽã¡©ë ÈÎÉÅÞ¿þÆÞ¿jδµ¶²Â´IcpD_Qëa6AM•J…ÄÄDtéÒÅxg}åÿŠÀBùë³gÏ6Ë ¦H$Âûï¿o|^¹ÝÕm‡@ @aa!ÒÒÒîi»[c`ó¹gŸA×®áX»f.]¾ …B//oŒ> O/œ¤¤¦Šíìl±aýZüðãJþû²²2!‘ØÀÛ˽{÷†mÙXf͵mëÖÿŽ˜K1(”Jáè耰PL›6£Fª÷1€9sfcÔ¨‘øéçŸyÙÙÙ°´´@PP¦N‚iS&×;[íN¡!]°uË&|ÿÃO8y" ……ptp@§N0ó‘é=z”±‰µŒ÷â ‹ðÐC£ñûïqæÌYdݾ •J{t êˆI“&bìÃcªÌ7}ÚT¸{¸cͯ¿áJ\JJ”pssG‡À >´AÛbii‰ÿ{ïLš0›¶ü‹b™• Úx·ADD<6g6ÚÞQv÷njïïU?ÿˆâü… ÈÌÌ„RYKKK¸¹º!$´ Æ‹Q (Ãma!‚ƒ ŠŠÈ)¢wã2L;bpD_tê€#GOâæ­L(”%prtDxhgŒ=ÎÎN5Îïçëƒß~ 'NÃÙè‹ÈÉ̓\¡„½½Ûû!¢o/t ëRkFgG'>zé7oA«ÓÁÙÉAþõ.©™“o¸Î9ÚÛB$lX%öŽAøðí×q"ê ¢/Å"77E²bX‰ÅðôtG®¡ð÷5=>ÄbK,xb6ú÷é‰c'N#%õ& ¤…[Šááá†ð` 2À86âƒbÌÈ¡èÞ'¢Î!6îò !W(a%ÃÕÅíý}Ñ£[Úúx5Ëú-,Dxõ…§±{ÿaœ¿xù…[ZÀÃÃŽv¦×¹àNøàí×qêL4¢/]FvNd²bXXˆàhï_ß6 Fï]«¬ÇÞÎË^}‘'N!êìÜÊÌ‚F­““#ÂCƒ1väP8;;ÁÇ˳QAMpuuƲ×^À™su&·²n£¸¸6 |}Ú WÏ®دw‹–€ËWâ •2éEôkмƒöÇÆ-;˜œŠŒÌ,ø”UðöòÄûË^Åш»Šœ¼@¯‡³³‚;á¡‘ƒáé£k j <6s ÂC;ãHd’SR¡P*agk‹€öþ9l:u@T57^Ôeì¨áðöôÀÅØ8dÜÊ‚¬X™¬¸ì;… œÜ1½{vƒ¯w³ô{úÍ ãwÒ°.ZüÜ.ßG‡ŽD"úÂeäæçC«ÕÂÍÅa¡1fÄ8U?ünyvÁã8}ö®\‹GNNdÅr˰´°€­­-¼<ÜÜ}{÷¨öæ"""""""2o}s TUIRYÙ¨µN÷Ûo¿aΜ9õ^®F£Á¸qãpðàA³êÔ'Ÿ|«W¯nÐ<›7oƬY³j&¡,ÐÞ¿YÛ;¯ÐØG{³/E[“£ÇŽáÙg+2ÙÖ¬þ}úôâ™O$V‹”ŒlC Jg8;Ø=ý'•!¿P¡Pˆö>&cU¶ìý#;'ÃGà±fȨl.þ’SÒÑ£[ž_ø$w$5‹øÔ[€ðŽ~-²>³ú%÷ôéÓµ¾_] ÈM›65˘veccƒ?ü°ÁómÛ¶Íl¶ÁÓÕ ž®wÏçKeÈ+”µÊ*£,S¡œ‹‹¯2ôÀ²‰àæl8·s Š ,)}àú@®P!¿ìzæåæÄ€&Õú½S&3\/ÊÇWm Ôj5ÒÒ P Ø;’ˆˆˆˆˆˆˆîfõknddd­ïWWÓÉÉ ¿üòK½ÇâlNîîî8xð |}6šL&Þ={ÌêÀh Íú$ïØ¹ËøØÖÖíÛ·çYO4'{ØI ×Ë[ÙùPk´̶«ÕdåæúÁÁ¶kDT£ä”t(KT/÷VÕn­V Ow„tîÈIDDDDDDD÷ ³ jÆÄÄ !!¡Áó7GŽ“ӽ˓H$ضmú÷ïßày###!—ËÍîà0÷ÀæÇŸ|Šÿ{ÿCœŒŠ‚J¥2yO­Vã«o¾ELÌeãkcFnñ±ÄˆÌ‘§›3Ä–ÐéuHËÌA‰êþÏØT”¨–™^‰µnNKèAVPPXëÍQZ­[vì6|Y Ñ¥sP«Ù¶ë ‰€áƒ#=V6‘9²0·}ùå—øþûï<_ß¾}qìØ1¼ûî»Øµk´Ú–É>˜9s&>ýôSøù5®fð®]»Ìöñt5ŠËÇØÌ—ÊÌf|M…RíÛwbó[  áãã''GˆD"$%&¡HV€uttÄsÏ=Ë3ž€P(@[/wÜÌÊA©Zƒô¬\x¹;ÃÞFr_noQ±·ó ÖVb´ñpåýD¸ÃGO &6}zuGÇÀxzºÃÖÆZ))騾÷nÄÆ2< /œœ[ͶM; ÆŽâN&""""""¢ûŽÙ5W­Z…>ú®®®UÞÛµk.]º„^½zaôèÑUÆBëÒ¥ ¶nÝŠ¨¨(,]º'OžlÖ¶Ž=Ÿþ9BCCT”Cõ** V«Íj<ÍêÜØ4G:éééHOO¯òž—·þ÷åðñiÃ3ž¨ŒH(@;/wdææC®T!+§2‰®Î°²´¼/¶Q¡T!_*ƒ²,ÕÉÞîW „TÙ IDAT—ˆÊddÞÆŸ»ö×:MxhÌš6‘EDDDDDDDdÌ.¨©Ñh°~ýz¼üòËUÞûâ‹/püøq888`þüùèÖ­üñ*ÓEDDàøñã¸ví>Œ3gÎ 66 ÉW>ÕÕÕAAA Eß¾}1|øpøûûטíSß, ¯¾ú ¹¹¹f xº:•e:™OvÓ+/¿Œ.ÁÁ8{î)…M””œèP¯éƒƒƒqåÊ•*¯çççã±ÇÃþýûaee…ÀÀ@,X°‹/®×rõz=Ö®]‹¹sç6¨ý7nÄ#!ÑP- ½ÿ=9Xbn¤Ð#ÈχgÑ}F¯Ó#§P ©¬âz$áh'­"‘B¡"óŠY§×C§ÓC§ÕA«ÓA&W¢H¡€^W‘5ïêdg;î`"""""""""¢»,>õ ¼£_‹¬ÏÂ;áêÕ«X±bžþy“×]\\°{÷n¼ÿþûøøãÑ¡C¼þúë Ä„ ê\nBB^|ñÅ·ç­·ÞÂØ±caowÇ’üî»ïêÐ4ÌV º „x¸8ÁÙÞùEÅ+J ÕéP “£@&oUÛbii[k+¸89@$ä5‹ˆˆˆˆˆˆˆˆˆè~ 4׆½öÚkÈÈÈ0›R¯×C àƒ>À”)S°sçNÌž={öìF£1™®|¾Êó¯^½ÅÅÅ nKRRV¬XQey•×SÛz«›N&“aùòå<‰È¬XZZÀÓÕ ¾^ðóñ„‡‹#ì$ÖUÆ06«6[ˆà`go7gøzÿÜ]Ð$"""""""""º˜eùÙróçÏÇÊ•+«}O*•¢k×®P«Õpqq¿¿?Ö¬Y——×·o_œ={¶QÛ€øøø»2®’F£ÁôéÓ±sçÎÍgåg ¿6úr¹³f͵k×ðñÇC$A(ÂÍÍ ‰‰‰ÐétHMMEIII“Ú“““OOÏ&-#99o¿ý6<""""""""""""¢zš{óóó±páBètº*ïàã?œ={2™ ¹¹¹ˆ‹‹Ãúõë±hÑ"ìÚµ VVVðððhr[Ôju“æ—J¥1b222xäÕ“EkhäÉ“'1kÖ,¬^½¶¶¶&ï½þúëÈÎÎÆ_|Ø»w¯ñ=??C ßßÿý®´£)ãiªÕjÌŸ?)))<ꈈˆˆˆˆˆˆˆˆˆˆˆ@ØZºe˼þúëÐëõUþýç?ÿÁ_ý…ÀÀÀfmCuë®îßÓj4<úè£Ø¶m8""""""""""""¢²hMýé§Ÿ Õjñßÿþvvv&ï9±±±ˆŽŽÆ¥K—••…’’ØÙÙÁÓÓ®®®˜1cF“ÛPßlÍòéJKKñôÓOcëÖ­<Úˆˆˆˆˆˆˆˆˆˆˆˆˆ¡U5õz=~þùgܾ}Û¶mƒH$2yßÊÊ ˆˆˆ¨2ovvv“×ßÐò³EEE7nNœ8Á#ˆˆˆˆˆˆˆˆˆˆˆˆ¨‘„­±Ñ»víB¿~ýpáÂ…zÏÓ”ñ0³Œ‹/bĈ h5‘°µ6<::C† ÁæÍ›À8–eùãÊc[w'¨YÛz*?ÿå—_ЫW/DGGó#""""""""""""j¢ j–—‰upp¸«Ë-..ƬY³0}útÄÅÅ_Æ fùÿw–ªmŒÊË­îù… 0yòd,\¸:î®nkyßYXXð¨%"""""""""""¢J 5 «ñòòj–åoÛ¶ aaaXºt)JKKkhCÓƒšBaõÝ%•J±xñbôë×»ví2ÉÞ¼[ÊûÎâ.lQkÒ"AM±X ðññiÖõ|ñÅh×®Þ|óM\¹rÅä½üüü&/_.—›<¿té–,Y‚àà`|ýõ×Ðh4Ͷmå}g)¶äQKDDDDDDDDDDDD” jÚHlC‡möueggã³Ï>CXX† ‚?ÿüÇÇìÙ³›¼ì÷ßgÏžÅÆîÝ»ãË/¿DVVV³o×!†¾“XKxÔÑE oŽZ©wÐétHMKGff&ˆ`¯7±ã'àíí ¿v5–Ámn17RA~m¸Cˆˆˆˆˆˆˆˆˆˆˆˆ`ñ©·áýZd}- …°·³ƒ——¦OŸÎ½Ü@Ó§O‡··7ìíïY@“ˆˆˆˆˆˆˆˆˆˆˆˆè^i‘LMÐjµH¿™Û·ocø°¡P*•ìýzH$8ü÷xzz¢o[ˆD¢{Ö–òLM"""""""""""""à>ËÔ‘Hgg'¸»»cÅwßq׃@ Àw߸¸8ßÓ€&ѽbÑ’+stp€RY‚Áƒ‡àÃ?Ä{ï½Ç=P‹O>ùƒ †-̦]-q'""""""""""""óÔÒ>[|€Fw7H¬­ñèœÇ°fíZH$îõ;H$üöÛ:<2s$ÖÖpwsc§Ñ«ÅƒšB¡ÞÞ^pvr€q42óæÍ‡¥¥å¿3,--1wî\üs4ý#"àìäoo/©DDDDDDDDDDDDôÀèõzý½Z¹ª´999(-UC&“!òè?Ø¿?qëÖ-ß×ogg‡6mÚ cÇŽ;v," „½½=ÄbK¸»»ÃJ,6«ö–§³ü,у­¥ãF÷4¨YNZTy±%*Õ½ó­­¬`kfãgÞ˃“ˆˆˆˆˆˆˆˆˆˆˆˆÌSKÇ,Ìa£àèàN•JF ­N ½N_ïlP‘P ¬¬¬  yÝÁœ# !‘H¸WˆˆˆˆˆˆˆˆˆˆˆˆˆÈˆ©DDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰êðò«KÐ%¼'ÖmØÈÎhA¯-]ÿÁ>jl£—yìžœ·]{öCPp8úD ÆãO-@Jj*;˜ˆdÀàðÞù?vÆ}ä·¨"Ø,Š‡Í¢xdikœîÐU&}›Ÿ×ÓÛ,ŠÇÅtv^*†÷k‰ó¿›PkïMûš{DDDDDDDDæÀ‚]@­Ís ò؉FÍ»nÍ* QïéKKÕØ±s7`ÛöxìÑYÜ­ÄÚuðÞû™¼–ƒâb9<=<ØAåçÓª,l‰–aÕS^˜ÝÇÞøú¢u·ñëÉ"¬[à©=ìª÷È5¶_(Æñ%2¥ÈJtp°¢“—cBm±p°œmêwï̵¬RÌúñnÜVc|¸-6?Û¦ÉÛsS…!Ÿ¥C¥ÑãÀ+m1(HÂþ€zqC6V—¢o€5þzÅ–¢û›³Š´Ø+ÇÁ+r\Ë*EŽL‹…K|],ÑÍ× ‡ÙaBW[ˆ-žâ†=1Å8T‚vçâÃIn÷m_dJµøl~9.5f Z[ àé ‚›92 ®f–âjf)~?#CG |3ÇcCmy U£¨D‡w¶ç‚½ÅXõ”B}¬ Wé UêãÂl±í¼ ¡m¬ÐÞÍ’FDDDDDDDÔLÔ¤Vç_¹\^åõM›·à—_×vlÛ kkë*Óø¶õiðúVÿüT*¬¬¬Øù­Ä™3ç P(ï¾õ&BBºÚx{£·7;¨ŒJ£G|v),„0É,Òé¸L$–¸Wý~Ûùb\HSÁÊB€9ý0©›:y‰a# -_ƒõ§ŠðãÑBdjðÈ·ý®_µ&x{[¾ù»àn'BNñÝ)øù|$d«áf'¿¦ºsgßç>ÛŸÃWX<Êâj¾Ù8J„øl†;žX•…å 0«ºxßÙtGo(ñèO·P Ð¡­³žâ„qá¶èè)†°Ò)X¢Öã¯89~?-ÃŽ‹Å˜öÝ-,䈯fy@À¤MÇã•Æ.þ3ÝÝ|­ŒÇ”£Ä‰þHo{Lên+f¼5+5©ÕiëS}YJ77Wãã°µµ¹këd@³uÉÈÈ0>- hRUW3K¡Õ]¼Å&AǤ5¥zôö·6 „”û`¢,„À³CÐÆÑôcÄÍN„íÜáíh÷vä"1GýWä˜ØÕ´„m¦T‹Ç~¾…¨Äˆ„Àò™8zC­ÑÅMÞ®<¹_.,ä'}?“•èyCQçtS{Øã½yHÉUã“ÝyX¿ðþºÁaûÅb<þs&ôzàíq®X:Æ¥Æ2»Ö–Lìj‡‰]ípèªϬÍÂÏǤð°áñ®<¨*IËW—4«ýžÀ€&Q³ã/½DtßQ(•ÆÇöì”—ž ½£Äìåò×}ªÏd³Nr«Ьì‰ãã˜ôªej=!ETb œl„Øñ‚ r„²ô]}\ ¹J‘˜?È‘;ú>·ùœÌXfµÖ/<`Á@Ãñ°ýb1Òó5ZŸHd~r^Ë*ÅÂ5YÐëõ ½ñö8—z:2Ø;^h ;+þµ×ñJ*—Åv²±Cˆˆˆˆˆˆˆˆî!fjÒç­bÉoaô¨øéûo¡V«ñÛúß±qÓ¤¤¦ ´Tï¿ý cÇÆÐ0x2nÝ£³Á¿>þ Úe¦¤¦âûƉQÈÎɆ­­-‚;wÆÌÓ0iâx\޽‚ “§# ½?þ>¸¯ÚeÉdXùójøëÒoÞ„P(€¿¿?Æ}óžzÖÖÖéÚr¹g£"áî^}I͘˱øuí:œ?™YYp°·G@@{L›:S'O„……E“ût:þ:t7ýë7â‘——w7w„…†à±9³0p@D­û!9%?®ü'NœÄíìlØØØ¢cPÌœ1 S§L‚¥eÃÆ%S«ÕX·a#üugΞ3¾Þ¡s˜ñqhhvoßÒèmÖëõ8pðþüs'.ÆÄ ?¿öövðmÛcÇŒÆ#Ó§ÁÅŹÚö½¶t¶nÛŽ·ß\Š… æâä©ÓXýëZœ?²bÜ\Ýзoo<½`‚;wäæåáçU¿âÐßGpófÚûûáá±c°pþSMÎ .^†ù˜.§<ØÖ¶ñËw±­øñ¿ºPåÒ1.È”j°x¤³±Ä­Z{w‚šN³…Sís»cäØx¦çÓTÈ’j`# “BÚXáñþÞ¹jÆw¦T‹ïŽàPœɹj¨4zø8[ G;kÌ舡j¿³Ó;ÉHÏ×àø›íÐÝ× k¢Š°ö¤q·J¡ÑéÑÖÙcÃìðÚhg¸ÙúðÒM¾?Rˆ#×È’j`k%D˜ rÄŒ^ö÷t=åŠUzü%Ŧ³2$å¨!WéàãlÁ6xvˆ:y‰ëlgvVØ]ŒßNIq!U……Î6"tkg…y1©›i¶ï™ä,Û–ƒ¨Äãk¯$˜Lóããžx¼E€ý‰¼¿3°ñl–<äÒàãK,C§Óá-Û°yË6$&%C¡ÃÓÓƒDà™…óáç×Î8}ä±xbîÀ7_}‰ ã®qÙ…èÝ4 æÌž‰O>z¿^mznÝmÈUz|2ÅͤŸT=Öœ,†ÓEHÈ.…\¥‡›½^"„·µÂ¢aÎi#F¨Ëgz`áÚÛøpWF›÷¿Eá™ßncl¨-¶.jƒ[R ¾:T€¿®(–§†@ø¹ZbT[,å /‡Šó¿P¡CÛ%‰Ðé÷&¸âͱUû¼T£‡ïÒ$ÈJt°7?„½uÕûî¾>\€7·æB Ò? „‹mÅ4ÓUØ-Ãñx%âo—¢¨D±A–˜ÐÕ/ w†­Uý²)ÕZàÇ£…Øq±'+Ý$óB¼ñq÷vV8ñ¦a?ÿ{_>>Ü•±……_w¨v™:=°ëR1VŸâÊ­RäÈ´ðt¡G;k,ìXíµ¦¾ †ìô]—Š‘œ«†°lLëi‡;W[þ›ˆˆˆˆˆˆˆ¨5bP“XÙÙ9P(Xøì 8q2Êä½¶ {óÀÁCxñåWQZZQ¢®´´'£NádÔ)ìÙ·ùÿìÝuxS×ð7I“6u£^(î2Ü} wllãÛ€ ÌÃa°áƒÃÝ]Šw)R¨»¥qùý‘6mhRÚb…½ŸçÙó”›››{Ͻç&Ë›ï9ynãqX>üx0¢£c̖ߺu·nÝÆ¦ÍÛ0îLddX¯ 1 ˜3o!æ/\dZ&Ÿ€ø„œ¹€M›·â¯E ¬oùm™,£¿‹cÇO˜– …BDFE!2* ûÂÇýûaê”ï!æþbzמ½øß¸ñÐhÌÛ,äÂE„\¸ˆ½û T©’:Ÿr¹Ë–¯8::"-ÍlùûeWìíU¬ÐÇœ––†Q£Çàtð³u’’’‘””Œk×o`ÙòUX0o6Ô¯ku?<|ˆÅ-Åo¿Ï6[mÛwbï¾X¹ü/ØK¥4ô¤¤¤˜­wûÎ]ܾsÇOœÄúV(ü±:׳ §™•jHÁÆ i¦åÉÆås%cåéT@ »›GúåûµÎ<È*ûåGEB`~?¯g®áï×1i:ÜQZWr°º^R†ÃþŽÁþ›æóó*5$e¨q3R2^’\AÖK2ŒX…Æ|gÅkð(^ƒÍ—ÒÑ¿¾3æ÷ó‚Tl=H¸¥Â/{±÷†ùëßÕà~l2¶\JÇ©o‹c×5ÆlˆƒNŸ½NŠ\S¡ œ UàZ„ ?uõ|£¯s?Vƒ‹"ñ0^“ãÞ<ˆÓàA\*V§aá‡^ø¨¾³Õý¼¥Â¬IØvÅ|øáx™‡nËqè¶Ÿ·tÅŒžÙ}øø=9"’µp³"YnÜñ7³9!lÍï?žŽ"Ô,a‡ÇJ»+/T¨)²aÐÐ8y*ØlyxxÖý»›·nüÙ3M?ˆhÒ¸!ü‰Í[¶åjîÙ·Z­±ÿõèÞ5_ûsô®ç)QÑW‚/Z¹™õ…^‹#qé‰ "!PÞ[W{bÓ´¸ôD…KOT¨U•ýŒs¿zÎøag".„)ñ(^cq>Ý»1jœy¨@·?¢®Ô›ŸÃh5îD«±þ|ŽŒ D/ãó]í…¨dlóã÷äCÍc÷¦íitÀ¡Ûrt¯éhñX v ;³@sí¹4 _kþWhšøòS.?UaËåth1,}–L¥Ç‚£Æ!¬]¤B¤d^_îÙ›}]òÿ:]©ÇÀæ÷¡OÒ"[ óéââ‚à“GŒm±t~ùíwÀ‰£,V§ä˜u:>5gÏ…@(bØÐAèÞµ üýý!ËÀù ˜5w>ž> Ç ¡#°{ûf”-k¹ZgÿÁÃHMMEçŽ0tÈ@” *¤ädìÝwsæ-„J¥Â×ßL„F«H(į?MEÓ¦áèà€‡ã×3qáâ%\¼t›¶lÇ}{ç»Ä©q#RkyD²ɹךcxN™*ÿ‰c²\q›â%ªïŒ 1’ä:„ÆjpøvF®îè]9¬0ÎYXÉW‚ï;y ~))¤bÆkðwp*–žJÅÚsi0 X6ÐÇê~Žß4…Û»£wgx;‹ð4I‹¹‡’°>$ÉZô\‰+OU¨êo‹Iú°oö9rtD—ÎѸqCtèÜ11±÷íDìØºÑâ¶RSSÑæýV˜?wfö9rv Æè– IDATƨOG --.Y†È¨(ˆD"ìܶ •+U̾¦jÖÀŠe¢Ió÷‘’’‚ÃGŽ(Ô<:.Ðô÷“D-*NzŒ²Þb\›dZ~?VƒSÃPÁG‚Ë“KèÐJ¥3gÏ3ý€¤WÏî˜=oôz=¶nß‘Ÿ ·x¿xé2€üWiê À±»rÆó•åÈ]9NÜWÀÁV€M#ýàíl>¤,³*Òñ™ªÅ²^’ÌûƒÆâë €À‘±ðuÉÞfõ[üÑß)r=¶]‘áØ]9’åz¸Ù·ßº¢~Ý›•Ö€s”fC4 ÀžëÆPsT WLÛ•ˆ·2 ÓÃÒ@Èc…i~Ë÷Ÿ©Âv³âÖ´ \ûëïfƒß{ÃõN…*°ïFF¾BÍ—iëe™©Bsù ³áýÝl0½‡'¢R´Ø|)?íNÄð¦®Ï æ³üy"Åôã“ý¼Ì†Z.înƒÏ[º¢¢¯DòC½„lú/«W·Æ|ùy¡ž›ššŠÃGzvïfhæôåçŸÁÎÎú—ð[¶í`¬ÌéÓ»§ÅuZ¶hŽ:µkYÝÆî=û R«!‘ˆ1î_Y\§wÏîpr4~™º{÷ÞB·Éæ-Û¶œfNÆ(•J9vÌ´<1) §N‡lìÞ­«ÕŠØOF +𜚯ò:X·~ TÉ ôï×Çâ:îîøâóQ€k×oàÞýP«Û1lˆÅå9çïlÞ¬‰Y ™ÅÉÑÖ<~Vèc¾f†¶V ;Ë˃ò•ÿî1üÆ=DзÐà—§¿%vüÑßÁã‹[KñUy’`ü‚¿„»ØlÒœþ9gj·¤§cÛä/à8z×8&|ßÁÃ,ÐÌiÌûîðw3{«‚S­nÏÁV€áM],>Öõ½ìÐcT ËGƒÒv(–9fhœæ¼ŽFl¸n|~s7³@3‹ÄF€O›ÕàŠ\Cdæ\ïë¶–ÏEU‰iÞ×{1ê¾FrV,Z ïòboo?úÐâc%JGïžÝÇOœ4 ííí…–-šïù[·[|‡ ïÞµK¾öåN´Ér=ÊyK̆cÝ‘9Œo—޹MHÏ ŸžW*1^rµÞêkmâbhæÔ¯^v¨›}®ê”´3õ™ã÷̇Q?ÿX‰Ø4ìÄ|ÒÌ’2ôfU×€1¼ŒÃÁÖ *X°Ý ³j;~à–õóS«„Õ Ö·ìp°~)©Õmd†ˆÏÎmøº^'䱩 ã²ì­>¿bŽŠÙÐXË×CívVƒb(áa "Óò8ÖüÊymd]/Q½ZØJ¬‡õ5`œçøÆÍ[¦åýúô6ݯ^»žëyY¡fãF áãã¯}‰É ‰Kzšÿ$,3¬­âg¹'ÉŒÇýl¨™u>¥ÖÏEË Ï=OÏž+!Ð,³:óÙPsÇUcˆ×´œnöB4*c\o÷uóþ“5ŸfË öfœù‘uœ µáµÞ´úìýnQ>>â“}žîæ3¸ÏPp'sÝvU×G™få¥üÀGDDDDDDDï?KÿiË—/ôs##£L—,”çºÅpî|H®å1±±ÐëõùÞ†5QÑ1€ /!¨LÅçî{BBB¡Ú$11 ñËò,Æ‚?èµb2÷J•*ùÜã½rõÚ¿bcã ÕƒƒRÏ9GžpvrBZz:bbc-®ãU¬˜Õ9>E¢ìåžžžV_G$2†2}ឬðòÙ žKOŒËkÏ_eOÌlc€­ÑÉrBcÕØ3ËN¥bÍÙ4ì¸"Ãÿ z€ík9—I™!•»ƒåP36] }f®QÖ;ÿU¤O“Œ×½¯‹(Ïð-çv•’2ôftYrйÎoޤÕÛÙúz6™ëé ÖƒšWù:ÉÙU—íçEä«ãÒ,Wj–ðÈûãˆ8óaÃKȤO~[¥‹½Õ`‰:S…›¥Àùy”Ježçü!ij?ÎèÓ»'.úiii8|ø(:´o عk C‡v°µÍU³GfEr|ºùõÞ¹º#ÖœMÃÆ iÒÈ JƒÖˆd-fLB€› "’µ8p35m¡7ã6ÅC¦2àÓf®Ï­F.Œ’žb”ôãq‚'Ch[ÅÁT¥Y³¸­iNÖ2^b”õ#4Vƒ½72PÞG‚ã÷ŒmZÞG’«úxôº8¾#‡PLïQ Ûºärù§Ý‰øeoÒëï#öÙíø[O/ näüÒ¶í#\Vjó.aVë """""""zð§ÛD…ä“cþÃ'OÂó\7>!Ñâro//ÓOžæ½+Û_ã¾ÂÙ³ºwï±X ƒÁ€o'NzîЮCá«Vúöé ÀX­ôû¬¹zbžž¨_¯nf›m4U'=kíú HMM-2çº_æ0»ááXµú‹ë$$&bá¢?•+UDÍ÷jÙk÷f„ñú¨`j^Í jæ=üedŠö¹¯q5\…õ!Æ «me‹ÕS¯BV°‘˜¡·Z‰Ù·®qåq,<š’¯íV°EÍâÆvùyO¢ÕjÍÙ“j û‡7u}§ïR±}êÛr}Hº©ªÎúýàÕìG±Ã#géy ~` €Ä" f‰‚øjµËV¬´øØÃG±uÛv@ËÍàìœ{¸ÑÖ­ZÀÓÃjµgΜÅÁCG=ºw-Ôñhà˜±/ÉðÆÿ»î¸95© ÊâÑôRøëcoÓ ÊûH°ÿ«$Ì-ƒGÓKavŸb¯dØÙœš—·‡HhœWséÉTèôÆý(ïc>OiýRRx:Š Õ‹Ž¥@olmh\Ö|®Ïœû›57ç³Þ’ãTè› õ²†œ KÐ`Ê΄—ÚGzÕv6Ýow^“Y½¸•‘çõ<}Æ,ŒýUž?ž""""""""* j½€¯ÿ÷D"är9úõ€ƒ‡Ž@¡P@§ÓáÉ“§˜;ÿLøn2¤R©Õm ø¨?üýü_ý«VÿƒÄ¤$ Ä'$`ãæ­è× „"ëÃ$úùúbâø¯ç· S×^غmž> Grr "£¢pîüÌž»­?è€Ûwîú˜;uh¶mÞü¹d† ‰c'N"&&IIÉ{òGÇ÷“§¢U›ö¹ÛlìW …Èȣwߤ¤¤@¡Pà~h(fÌœƒi?ý 'GÇ"sž[¶hn Ÿúå7üüë „†>€B¡@bRvïÙ‡½?D\\<Äb1~ùij‘¾nofVjVñÏ c§@TñÏ;Ô¬øýc4ÿ=ó'#ø‘)Z¤*ôˆIÓáÜ#%&ïH@ëYáPk p°`rg×vl Ëd÷µ`+ÕIÚ¸¢V ã1~»%£×ÅáìC%"“µx¯Á¡ÛrŒÛEÇÍÏ%}`k#À“D-ZÍ ÇŽ«2$Èt« ¸©Æÿ6Äcê.ã0Ñ«;¢Su‡wþøcWOyŠa0½þŒÂ¸ñ8ÿH‰Ø4bÓt¸­Æ¿!éè¿4ƒWż’}¨[ÒÎ4ÄçØq¸¡‚Nĥ뙜;€?pÕ,a©¸àa»T*ÅÜùàç_gàÞýPÈår$'§`çî=øðãAP«5HÄøzì‹Ï‹Åè™9Ìì?ë6àqXºwë\¨ãÞÔþ®6¸øD‰);Šôõâl'4UJ/?eì_ÏVi€P|PÅØþ9›h\Všë|•*&6ÍŹàH26_J‡Rc€ZkÀÝ5¾Þ^F¾¶JqKzÖr2ãìƒÉè±( nÉ™¢E‚L‡‡ñì»™/×ǡƴ°m{dsWøº? ^ƒùG’™¬…RcÀÓ$-–žJE§ùp´µþqÇ®ÝøsÉ2ìÝw_Žùš숈ˆˆˆˆˆ¨H³a^•*•1kƯûÍ„GDbÄÈÏs­Ó²EsøûùbÍÚõ·áà`eKáãC‘˜ˆ¦ýŒ¦ýl¶N``Fö)&OýÉê¾ ø14j ~Ÿ=÷CCñ¿¯Ç¿²ãžõûtØIí°}Ç.=vG·¸ž¥`²VÍ÷0ý—1á»ÉˆÄ¨Ñ_åZ§K§¨[·¾›ôC‘9×Óž@€mÛwbéò•XºúºˆÌæ|œ AºR²Þb8Ø>?è y¬DÈ㼇t,áaƒ%|P=Àöµ_IOcÈž¤ÅáÛ¦*©œÄ"àß~è¿,!•X~:ËOç® þ¦­»Ù¿+ùJ°ãs|´,wcÔè·$Úâ>t­áˆeƒ|þ÷@©»GûcÀòh\~ªÂ¢ã)¹Âà,YCоl~.6ÙÜKÁÍH5êÿ’=÷äNß.û<&Ëõ¦!O›•³/Ôëýµhþük©Õû€­D‚ùóf¡BùrV·Ñ·OOü¹dNŸ4lP~¾¾…Ú';!–òA§˜u0‰2fôò‚c>úq¼LG[a¡ÂÝÂj]Éç)“9Ï£¥P0Î ºö\âÒë=;Ÿf–¹}½ÐûÏ((4 Xn ΂ìªÇŽÕ0©“'êýüäõ“¥} •Äâßtì»™ašK4×{H+eÝ„Ø4ÒÝF"^¦Ãø- ¿Å<Ø®ì'Áü~Þh5Ëò<ÖÙû"ËÈà;"""""""*Òj½ ®]:¡JåJøkérŸ9‡ø„H¥R”/W={tCïžÝñýä¼+÷*V(Ãvcɲ•8tä(ÂÃ# P<0m?hƒÆàèñãÏÝ—Ç uë–Ø´y+Nœ<…¨è¤¥¥A*µƒ¿Ÿ?jT¯Š¶¼Ÿç—íùáà`¹³f oï^غm;.^ºŒ˜Ø8¨T*899!¨DqÔ©S ]:v°øüÞ=»ã½êÕ°dÙ S›9:: |¹rø°_otîØ—/_-RçÙÎÎsfþ†î];ãß›qýÆMÄÆÆÂÎÖAA%Тy3 ðÜÜŠö£ÙUš–‡ž­–òúAX’ŽÓˆLÖ A¦CªBg;!<E¨h‹*; g-'ؽư$K¿ºÎ˜±? »®É“¦ƒsî*g7ˆMÓ±éb:nDª—¦…H(@ » ÚTr@ÿz¹Ѧ夸4¹þNÃö+éKÔ@¦2 ˜£õJÙa`C«áË»ªT11Ž}]Û.§cÓ¥t܈P!&MƒÁOGÊûHЪ¢úfUû*üÖ³J{‰ñwpîǪaàfƒŠ¾æÃš®9› .ë:)øþˆÅbÔ«[5Àº7bë¶xðð”J¼½¼Ð´Ic|:bòÜNP‰hP¿.Ξ ôʬÜ,¬¦å¤Øô©?>^UgÒ°íŠ 8£y{Tó·…›ƒb‘) BcÕ¸¦Ä[rœ¼/ÇÕ)A(]LüÚ®—ÖíñÓncEs » Þ+nùžó~Eã°ÕªÌyR[W²Š·«â€SßÇÌI8u_$¹®R!*øÚb@g|Tß _?ÖxUmX1ȃ¹`í¹4œ}¤@Tб¢ÒE*Déb4,#EïÚ¿&k·Åå)A˜w8 »¯eàI¢"¡ñ½ë8ã³®Ø`'@©É=¾m‡öm±qÓ< Ç—£GñCiƒáUÍrEïšë÷UÕÊ•`cз'aÃÆÍ(S¦4ïß]¨mlß± _ýp)$îîlX" ¢Rµ¨<) *­ßwôÀÄöì+d¬Ü«öCÆkð~%{ìøÜÿîÏô³ðç’epttÀÅs§agg÷ÂÛŒHÖbÒöl¹”­þùë{;‹pfB Ó¦DDDDDDDDDñºs#Vj½ Æáàœ _©Ÿ=¤œ³“•È ?|ÚÜó'cɉ|ÞÒµÀÃ:Ò»gûUÆk S:{¾Ñ}Ñëõص{/ C»¶/%Ќթ+û`zbØ3”x§FªB½ÁX­èçjƒJ¾¶hZNŠú¥¤±kÑ[‚¡&Ñ+¦T*qáâe@é’% ½¬¹×ü!‹Ù°Dyø¾ƒ¶_IÇ“D-&oOÀܾ^l”ÿ0™Ê€o6Å>oኚÅmßèþ;~‘QQ€~}{¿ôí{;‹0°¡36tæÉ'"""""""¢wŸOô’“S P(ò\gþÂÅHKK4oÖ4×ãz½±±qynãÄÉÓ8qò´Õm‘9[Ö ÷ƒ­KO¥âü#%å?lêÎD¦hQ·¤~ìúf«4Õj fϨW·jT¯ÆDDDDDDDDD”œS“òsjævüÄ)Œýz<ºtîˆ&M¡|¹²pwsƒH$Âã°0¬XµÿnØ(_®,öîÚ‘È|î2•J…ªïÕA»¶ u«¨T±"|¼½agg‹Ø¸8ìÚ½³ç.€J¥‚T*Å=;P¼x Ÿˆè- Vk Õj`gg‡Gã§_Ãñ§ ‰°iý?¨Y³‰ˆˆˆˆˆˆˆˆÞJœS“è-“˜”„«VcŪÕV×)„%‹æ 4³¨ÕìØ¹;v GG,˜;‹&Ñ[$ôÁtèÜ9G6qü× 4‰ˆˆˆˆˆˆˆˆ €¡&Ñ hP¿.æÍ™‰“§Nãöí;ˆŠŽAFF\œQ¡By´iݽzv‡T*µ¸ [[[¬[³Áõ7Ô´Thµ:899¡dP 4nÜØÞÞœ Ç~T(È ù¢²¯lÛR©ÅŠCRRlmmQ¹RE :¼ßš}šÞÙ랈ˆˆˆˆˆˆèUàð³”o~–ˆˆˆˆˆˆˆˆˆˆˆˆ€×Ÿ ÙäDDDDDDDDDDDDDT”1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDD,_ ‰ IDATDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDE𠛀ˆˆèå2 Ðh´ÐêtÐéô0 0 ÿɶ‰„°‰ Û@ ð¼Ð;w}ñþþOìûDDDDDDôj1Ô$""zIôzTj5Ôj #SVx ×ë¡Ñh¡Pª ‘ˆa+‘@(ð¼Ð[}ñþþOìûDDDDDDôz0Ô$""z ´Z-ä «òA­Ö@£ÑBjg ±Ø†ç…ÞÚë‹÷ö}bß'"""""¢×‡sj½ •Zƒ ¹’_ž€Á`€\¡„J¥æy¡·òúâý‡}ŸØ÷‰ˆˆˆˆˆèõb¨IDDô4-”J¢”*54-Ï ½U×ï?ìûľODDDDDD¯CM""¢BÒéõPðËó¦Pª ×ëy^è­¸¾xÿaß'ö}""""""z3j’J¥æð†/Á`x©Cò¼Ð«¼¾xÿaß'ö}""""""z3j‚^¯çÐv/‘Z£})5ÊV¬†º ›âãAÃöä /€WhÓ–m*SAe*">>>_ÏÑhùåù˦վx?æy¡Wy}ïÚuξOìûDDDDDD” 5é­3`ð0SøPÐÿNŸymû¹}Ç.ÈårlÛ¾jµ†'î%ýÕXLš2 ׮߀\.‡J¥BxD$ââã!‰Þúã[ýÏ: < 'NžFjj*4 âââqéòx{yñ(b´Úw£òcÖœy¨^³ª×¬ƒ»wï½Ñ})h(!“e Eëv*SóüñN—¢êãUÉð΋Þº}Ϻ¾&~?Ae*¢{ï~ÐhÞÎ÷çwí:gß§Ç3à;>þ¢Ù÷‰ˆˆˆˆˆÈ*†šD¯H›÷[Zµl‰DüÖǹó0gÞÂ7Ìž9{{öî´ý  Μ:Šû·¯ãð=˜6eÒ[ßFé2¦Ï˜([¶ öìØ‚Ð;×qæÔQü³j9¤R);UÃáì^E›l.¼I?LÃã°0”)S#?ÁóBùº¾Æ;ÅŠÃåËW1gÞ·òýñ]»ÎÙ÷émêûDDDDDDôæØ° èmóËOÓ‘‘‘kù†›±bÕjÀŽ­agg—kÀÿ×¶ŸŸŽ†Á?†­­í[ÝÞ,þ §Ncİ!o4œ=vü$ÀÖÖ3~ýÎÎ΀2¥K½mrr¹0iâxT®\ àçë ?__vü"È`x7¾@¯Z¹2ºuí pquykÚô̹óض}'`úÏÓL}¯0çE§¶]S`ënDj¬ÐC* ¸» KÚb@}{”õzþG¦x™KOËpðŽ áÉ:ˆ„ø: Ѧ¢-5p€¿kîŠòØt=jü[ ý]ÐÇ=ß³üC‡‹OÔX¢À…05¢ÓtÐê p‘ QÎÛm*Ø¢]{8Ù½Úß´©µl¹¢ÀÎëJÜŒÒ E¡‡‹Tˆ >6èQCŠ>µí!à•´g~®/g''Lþ~6ø°Ž=:T±ƒà9ýîÜc5þ>'Ç…'jÄËô /'j£o-)š–Íû3mª\Bä8tW…{±Z¤«ô°—QÜMˆF¥m1°¾=Jy¾þÿý|Ù}ŸˆˆˆˆˆˆÞ†šôÖ ð÷³¸ÜÓÓÃôw™Ò¥áà`ÿÆ÷õm4e² œ;R$ö%"2P¼x )Ð|—Ú(2óø Jf IE›ÁðnG›6­Ñ¦Më·®MgΚ ¨S»jתYèó’ªÐcàßÉ8¦6ïÛ*nGkq;Z‹Uç2ðK|\ÏúûÊ©PF¬KAŠ"g°b@ºRûqZü}^¿¸¡A)‰Ùó$6‚|í«Zk<8K ÁLÞ•†egrÿè'1C³Ô8ûH¥Ár¬⎠ޯæ#`TŠV'ãV”&×>?T#ø¡›®(°f ;l/½=ó{}uh×3fÎAxxæÌ[ˆÅ ç½Uïoúþ£×ë±qÓfÌ™·†—°3o¢ï¿i/«ï€F|öo2vÝPš-NÓ!:M‡c÷UèPÅ}è‘°`÷§IZ¢<\¾r—¯\ øøÃÚÖè ©¦@ó£ºöXß%ÜEHÎÐãh¨³§#^¦Çøí©x/PŒ*~¹+òîÅj1hM2äj*û‰1©êI ÑpòßïLELš£þMÆé±^faž—“O~òyî~þ{QŽ1›Sáã,D«r¹0ó×)™)hVÖŸ5u@_1lm€ðd=6^’cÉé D¥ê0j}2Ž~U쥟´Æh ÀðFÞȾ."„'k1ë° ›¯(pö‘㶦bq?W‹Ûy‘öÌ/¡Pˆþýú`úŒYØà"£¢àïç÷V¾?¾.ÉÉ)ˆ‰ŽFð¹óسw/=z ???DEE½•}ÿM{Y}ÆmMÅ®Jˆ„ÀèæŽè_Ç>."øùÇòÜf‡ÎÝqëö”.UGîŒýf¶lÝŽR%ƒpôÐ>‹ûвEs¬Xº±±qXº|%ŽŸ8‰ˆÈ(ø£yÓ&1l0гþå³^¯Ç†›±eÛÜ}•R _4oÖŸ__ >GÇü¹3ѹc‡ç¶Ñå+WñËôßqñÒeÓ²ÊÕk™­óûo¿ WnfË :ŒmÛvâêõëHJJ†““#ЮmôîÙîînù>WqqñX³v=<Œû¡¡€K—¯ ¨LEÓ:ÇÆw¾1ý;#CŽ}âè±ã¸qã&ââ ×ëáééšïÕÀà›Uvä¤ÕjqøÈQlØ´?FLŒqX8¯bž¨\©Ú¼ß ­[µ€³³s¡Û('FƒÖý‹#äÂEÓò2ªšþ®R¥2voßlö<¥R‰õ6áÀÁøwÿ>d² xzz t©RèÑ­ :´ogu(Ĭërò÷0dÐ$%%cá¢?qèðDDFÁ`0àäуhÞº-ôz=ÆŽù£?™k;jµ5ë6€L–±XŒ+ÎÂÑ1÷¥K—¯ÄϿ΀@ À• gàêšbܺu»öìCÈ…‹xøè1d2¤R;” Âï·ÆÁ`oo_¨>¼xá<´kÛÆôœ´´4,]¾ ÆÓð…øû£c‡v:x $âW7täÎ]»1iÊT´nÝßO˜€ùçÏŸ‡««Æ3M7Æ›7ñÛŒY¸ OOOŒó%Zµlaq{7o݆›qåê5ÄÅÅA§ÓÁÝÝ U*WFßÞ½P¯^Ý<÷gÂw“°wß~‹mX÷*T(Ÿçó ŠkׯcÀ€0ö«/qõÚ5¬^³7oÝBbb\]]Q¯n|úÉ0,þJÚ4kèIww´mó~¡·s9\Cw•M#;`jÇì*p';!yØ F€íÿH€Þ¬» Ç/]rÑ;iWäj*úØ`û'pÌ ÙìÄt¨b‡î"ô\š_g܉Ѡv‰‚}™™¢Ã”Ýé€_»ºÀÅÞ¼ÔJoæ—š”±ÅÚÁîfÕX•}…˜ÚѰ48wb´¸§E9 Cê¦)õ˜L†}·TˆHÑÁ^,@9o>¬m>µó®®ÚyÝ8|/|÷>kîhz,Èà ú¸ÂÍ^ˆ¥ÁØ~MOš8 F€øµ·g–Þ={`æìyÐjµØ¾c7>9â­yÌ÷µ…»Â`0 Cûvøå§iy®¿wß~LøÎ8Oõ“¾G·n]ÀØç 5[·E‹føtÄôé×ÿµ}†{Y}?û¼{n*±é²qÈÖÄ =l…(á.B›JvÖÐ.Ò¼‡k¾¡Æª³ „„©“9äs1GjŠ1¸¾½Y¸Wàó÷œ¾!ajl¼d¾~vô®•ÝOK³Á¬®HWp-R‹Ðxm®ç«´Ì=f 4kJðïw³ Òv•mÑ ¤­ç' 2E‡µ!ò\¡æþÛJ$d+4çöpEÃÒæ}²¸‡ –öwCµŸb¡Õë/*žj>Œ×bá N=P#.]W©õKJ0¦•*ú¼Øÿ¦ïQÑÀP“þ³âââ!—Ë1üÓÏ|æ¬ÙcåÊ–A‡öm±eëvìÚ½“'M„­Äò—/>­Ûw=ºw-Ð>ƒ«VãÏEóó¬<ˆ‹‹Çã°0|4`("sTÙØÛÛ£xñ@T¯VW®^Ù³ç,†šÁgÏš®YFƒ“§N£}»r¯—Ù·ªW«jhnÙºc¿™`þ†dc™,7nÞ›·°{ï>lÞ°ÎbXú¼>cþÜ{÷C1`ð0ÄÆÆ™­sï~(îÝÅ–­;0òÓá¯ì^“5 µV£Á÷“§àÂ…‹ÐêtÉ"0á»)ø÷Ÿ¿ñÙ诠Ñh R©‰ ßM¾=;ááîn¶­uÿnÀo3fšþíêê¡@ˆ¸¸x;Ž£ÇŽãóQ#1|Ø«û#•Jáä˜6iu:S%t~Hl!”R®Àö;1õÇŸa0àââ N‡„„ìÙ»'Ocý?«øÒÛ4ë|7hPâ¤/„©!+ Ÿý’>K1*xÛàNŒâu¹ïãñZœz üØÉÅÀåTÅOŒ»S¼ µ0fs*Ò”zt­.EÛJ¹ç‹ÎPéñEsG¤* h]ÁÖâð’P§„Kƒý6C{þÁd¹]þLDhœ1øp‘ áå$ÄÝX¾ÚœŠ«ˆ„ÖÇøÜÛ{:1¢‰£ÅuƶrĆK ¤)õØrY‘+Ô|Õ홓»»ªV©Œ+W¯!øÌÙ|Eåý1¿üýýР~=œ9{GŽCºLfÖÿŸµmÇÎÌ÷$|ðAvh(àäè??_Ô«W´i*•+#!!áµ~v{Y}>Y›búaƒXºÙ Y®ÇõH ®Gjð÷Ù ¬쎪þ–_kÙ™ LÚ™–}MÙ ”þÞÒaß-%¾mㄯZ:¾’¾Ë3+,ëIÌÍœ–ô·˜ßŒÒ@©1öëA ì-‰ëj/DÛJvX~&-£iÊìûB_Ëÿ{éf/„¯«áI:¤)¬Ï*ž¨Ñe2Ò•z¸Ù  /Óc× %ÜQáŸn/¦ïQÑÀP“þ³âââñÝä©>s ÔG¿¾½€´´t”)] ýúô–­Û‘–žŽƒ‡£S‡ö·³}ç.Æ/üºwíR }ÀÐ£àææ†iS&¡^½:prrBxxDfåÙ&$&%áûÉÓ°võŠ\ÏÿnòTS Ù¥SŒ>Å‹"55 ÁÁg0gþB >*•ª@ûõù¨Oðù¨Oð÷굘2í'À¡ý»­ÎSªÓéðɨÑ8{.B¡ÆB÷®]àïï‡ Y·\À¬¹óñôi8 ÝÛ7£lÙ2ÏÝÍš"øäÀàaŸâØñ¨Z¥ ¶l\gq}@€NÚáêµèÙ½+6¨oo/(•Jœ;“§þˆ§OÃñãO¿¢}Û̲ù áú›°•HðÝ„oо}[x¸»C­ÑàÁƒ‡8~âB.\@Çí ÕF–¸¸¸˜ŽoÉÒøå·ß'Ž€Åkö£C˜WWWŒùâs´lÑ ®n®HHHÀÁCG0á"ܸy  Ãî[ •J-¾vØ“§6b¢cbЧW´ýà}¸»»C&ˬöjÜW®^ÃåËW¡R©rÍ{ðq¿ÝÝÝ””ŒCGŽæ 55 B.\4mÒØì±Ö­Z xñ@|Ц5Ú·ý•*U„­D‚èè,Y¶+ÿ^ƒ»÷îcŪ¿ñÅç£ Õ‡ã¼wC‡Dll$1þ÷ÕèÖ¥3ÜÜ܃‡cöÜù˜üïîV$` ¤`ßÞ]ÆûEÏÞHNNÁØoÇ£VÍ÷0cú/xú}?•J…ÓÁgÐ¥SGÓv"#£0sÖÀ{5ªãç§Á?sŽáè˜Lž2!.bá¢Åh޼ʖ)mq&?“¿Ÿhú÷éà3ølô—ù>‘ÐxmÞ»Š;w¡_ŸÞ6lÜÝÜ R©°ný¿˜;!ÒÓÓ°ø¯¥Ï­ +¨¤¤d<Êü¡FZµ^h[Ÿ4qÄðÆŽH–ëáá`½K£3~ao)`Û9‡Ÿ«J¿üáW“ãÔÜíø©³åù„ì„ø´iÞ¡‰Á¸“½¯•}r‡4?îK3š¿usAÿ:ö • »n(0fSªÅ60½§%ƒŠÊ~bˆEVî{öB4*-Á¾[Jœ{fÓ×ўϪS§®\½†+W¯A«ÕZ¼÷Å÷Ç‚èÑ­Μ=¥R‰C£»•`EFF!$ä C»vf•òÕªVÅé“ÇÞèç¶—Ù÷àÛm©8tW ±˜ÚÑÖ‘Â63л¥Ágÿ¦à~œýW&áÔÿŠåª’ OÒá‡ÝÆ@³n {»!ÐÝxáG¦èðå¦?Tã·ƒéø ’]« óÓ÷µzàÐãgH•ë!•ž{t°Í}¯¬˜}?9ÿXƒv•sŽ©r=bR? ©(Îã=F€/7¦¢a)1~ìè‚@w àÐ]%FoLEšB¯6§âô¸bН­ïQÑ dÐUTt4¶m߉/>…ukV¢S‡ö¨Q½š6i©TŠÚµjš‚‘Í[¶YÝÎÎ]{M7„OÁ*G ¶lX‡îݺÀßÏÎNN¨\©"¦ÿ<Í4|f𙳦Š,wîÞ3U1véÜóæÌDåJáäèˆ?ôéÝ[7­‡X,†^¯¥m¹mÇ.œ=˜öÃ$LüökT(_NŽŽðññF—αmó¿ðññ†J¥Â¸o'¾²}ùzì¬]½ݺv†··ÀÎÎÍ›5ÁŒ_¤Ëd¸pé’Ùó²†íÚ¥|Üž°•HP¹RE|6rþ^±ô…+C^ÄŒ™s˜±XŒukVbà€þ €“£#Já“áC±jù<|ôsçÿau[ûÄ“§áX¹ì/üöëOhѼªW«ŠF š6iP©Õ¸tùJ®ëöðᣀÁ?;~:yÛ•«× —‡ÄkÖÔ<ÔtqqÁÉ£ñÝøoð^ê¦Jh__L™4õ3‡P=rôx¡û0ü½f­©ªõç§âÓÃàíí‰DŒ? 4‹Î+pð_¡ñ­6&&÷ÿîîpwsCƒúõwïÞÃg£>…X,FÅJñÿöî;°©² ø“Ù6Ý-«… ¨ldWöÞ»,AĽ>'~"ˆ{ò¹EDPdBÙ²¡ìÙ"£ t·éLšï›¦+IW žß?Vr“ܼ÷=oÚœœó6±¬;W¯\-õ8{öñ[o¾aMh@Pƒ˜÷î;Öj±;vÖÞ/bá9Μ=‹qcÇàµW_A€¿Päææ†Óµ¾¶²•iÎP´ŸtìØ¾æ¯G‡ Íó)Åš=š–ÿ þ¬¥ÝjQÅáêjŒù1 -æ§"ìíTD~š9Ñy¸¡4VùܲT&|´]h=ùro‡çi‹É d˜°5Nƒñ?gaí©BxÈDøz¼_¹j¬ÜBþlÙ°÷Ù¨ä  BÆBÛݲí‰kƒD"Á¬™Oع.‡Ź¹¹åZk×Ô›7­?‡††Ôêk,Ô›ñâš@# &´/_ù|%Sˆ±  f-ÏÆ æâðUÌf!9p-Ë€_bTèýU†µÍee}º=y…&„J1­‹g•îÛéãt4|3m¤á±ß²q!Õ€ ØùBrûÝÀ¡+:, šqílW|Mì °[ a—ÓÐìgP®Y’Zƒ*ù–§-!!ŠçÖ›wåû£L&ÃÈ‘BÕ÷é3g‘x=±Ü1&“ ,ï1mÛ´±¹ÆÜnÎŒý5§„¹ ááN¶ç{ˆ¿Ã[ -_7œ-Ÿ”œÙÍ óàÈ«uÑÂFËÕFþ„ú ÿžXÅ$|ecÿJ‰V°7s ðu~=¬FJ® ™¹…&ˆ×áÙU9˜ºDim3[Us7æ!%ωx¾íªðo'ù᥾^ÐÍÿs†®Ÿd Í‚4<ôiNÞÐaB6=O7Ç–uó´¹ÖŒnëa½ïÞxKÇ>Õ&5éž6uʤRû`•5nÌhÈåB¥ã_ë£ËÝ^”dòöòÂàý«uÝ»EÚ½­ä¾€e'N Õs-[¶pX!ZTyW[4uÊ~}û8ÏúYÞµ{Ï-¿Þ2™ r¹ÌzÞ%#$Ož<±ã'c÷Þ}0›Í.3WO> ½^¨`êß·Ãc‹Æ9K©Ä¹Ø8ûóÿáIvo“J¥ˆŒì@ØC®¤mÛw"»v†¯¯/:YªvþSº5aQ•^·n‘H$Uz½EmË^§ªÄ°Z­Æåøx@ß>½Î͇"»Þ’ëX¯nëÏnîBÕ_ÀÀRǵúÕëË'¤=<<аĺP–§BHºij±ò´H“ˆÆð÷÷³y[ÉýS5ZSŸ7;;Ç:Gí XSZ3¦/ÍÆ¹$=ܤ"|?ÉÏæñù–½ä6œ-ÄÖ8 ^îç…ØÿÖÇ¿sëãò»õ±p¼/|<ÄPë̘ýG®gUîK7³X~L¨t~¾·§ÃdbeHÄ@¡Î„lµí*ÊKéÅçÕÒΞx^n"4©c¿EãÀæÂÜÍ)4añAÛÉìmç5Ø_ï õA«`™Ý5¦yî·´ÙÍט¨4X˜”^*µIDAT«»ëyIâ/\RqËØ®á¶[OË$Àõ…翜溱ODDDDDDµ‡›‡Ð=­ùý÷;¼Ýß߃ ÀÆÍ[°æ¯õ˜=«¸*Éh4bÓ¦­€áÇ–Ûs°²5´Ÿ (Ùê´l Ù¤¤d@Dx¸ÃÇ mT«c˜––n­Œhìø\êÂÇÛyùùHMK«•óÉR*±fí:8ƒ+W®B™ÂŠ۾E´´t|¹ðkœ=‹?‰F 1aü8Dƒ  ·u®]oˆˆp<ÎK\Ûã`·B¸Hîݰ}Ç?8söT*µuϸ;„Ö³½{õþÛ³ŠÁŽ»0çÍו¥gΞôêa»tÿƒØ´ebcãp3)*•ªÊU²Žb8-=Ýš˜.9&6ã$¤Ñ-¹Ž^%>ˆ/Jp”[;¬‰ò‚â¯õÑØ³w’’’•¥¬0ñ[[J&.Ë‹Kd œü倎Ïþž¿¦n(xt™ÿ¦àå&¢©þèfûCöB½°6g˜ðé_LíR\õ%—Š0¡ƒ¡RŒù1 j?PãýQ>žÃ·{ `0 ‹Qí«¾W^ô“ÐÍHË7ád¢ž*ÄÆsl<§Á¼á>˜Õ½tõW–%ñ “~ ûYž@/1`gùÑÆßì-ÀùæoÍGºÊŒÇ"¨ç-ÆÍl#þï_<·²›Øp¥÷ǰÐ0tìØÇŸÀ¦-[ñÌÓO•ŠÓu–/ny{û`ÐÀ.ù;›3c?-_¨œ<” CÐ)•¾O„[é «Ö™±ü˜ÛÿÕ QiDf¾ÉÚ¶ºªûEñ¾"¬ž÷âë(ÅÒGý1þç,ˆ×á·£j¼ØÏõ½+þ^k¡ÞŒVç`£eŸÛ7y—[7JziMV/„·»óGø`hKwÔó– @kÂá«z|þO>>ß™õgÔXýD ‚}ígkCüíßVÏrîJuͶV¨ÍØ'"""""¢Úä&ÝÓ|}+þ tò¤ñظy âãpúÌYkÍc¥TÆ­~Uƒ‡‡{µî§V ßšWx:þÀËS¡¨Õ1T—HícèˆÂS¼ü|d+ÿÒ–­ã?¯¿eÝÇ1¤QC<Ø®-¼¼ÁµÄDÄ'\AÓ&8zì˜õÃüžeZÜæà™ç^ľý{žÞ׬)­ ¾øøxÄ'\©Q «Õ…•Ž…§ç-¹ŽRiõßv“SR0û©ç¬­#=<<ЬiSøøx[ç÷©Ó§œÞîÕ.‘è¶ÄBѼKj§ÙÄ¡+:Ìü] ¥ÚŒ`_ –M°[¹ ¹Ùj#‚}%¥p%um,Gd„1WtØs¹â*Ú| ž*Þß²:UšÁ~ÂÂ.ár<ÙÓ ooÈÅ’5ænÊÃ!2t*‘¨-JĸI_WGUVR1ðËTLú%ײ øa_~ØWPê˜!-Ýѽ©s¢…Š1owq­§#b±"‘f³£Ñ©sɕޡûÄñã'šš†#GZ÷¾ÍÍÍÁž½{#G «ö—´î¤ØWk…„˜»LÊ=ž¶Ìwnnf1q±ÒÚ2Y!¡y|=DXö>rM‡|Må“oU}Oyq<Îîá]*¡YÒK}¼q > Fp(A‹1íÏǤ#fü&TªË¥"|åëð>kObåq἞⇞͊ç¿BŒ!-Ýг©ýf"!Àw6æáç©þÖUûëLÑ¥­aò¸6cŸˆˆˆˆˆˆj“šDˆìÚaa¡HL¼Žµ­·&5‹ZÏ6Gû{5Þ* äTX…XÛÔ”ø¦»Ê’LtDeI¸xy97‰téòe¼ðò«ÐëõhÛ¦5>ûø4³±'XxÓæ'<, ï¿÷.Þzã5lڼ˖¯@\Üy¬Þˆ}û`íê?и‚êØÛ=Ϊâ¤VMÆ944¡¡!¸~ýbŽEŸÞ½°cÇ?€Ö­Z¢ap°5"‡ãÊÕkøg×n4mamYÛ´I‚ƒ‚J=ßžý!‹ñö[¯cÊÓà&/]÷åÂo°ðëok4f Eñ°Ú Ú±µöuesßÄ뉋Åxó×0jÄðrɇ “¾-ûÕÞJE-o³³³þؿĨðÎÆ<MÀCMäø~’¿µ*Èžº^b$åQßÛqöáúRÄ\Ñ!5¯â5yýµÕ夎ÎùbŠX$´Ž\{Zƒ¼B~;¢.•Ôt·$ tœžZç8‘(ÅÎçëà×¶ž×âF¶î21Z4`|{†¶rÇü­Â~±¥‹j<ÉÎɱVt;»ú×UÞ‹ôë×>†¼¼\DGo²&57mÙNX£ÆŽ¹'bßÓ] ¥ÚˆÎar¬z" Zñâš\É4@,>틉í=à.+=¡û/Ì@\J哚Uý:^ÅëS_ûkUQKXHÍu3‡¯ê0ó÷ldªLhä/Á¢)þh×Hæxí<$Ìï¡òR ÍRcî&BT{|¾3›c5ÈV›ào§*Ü`‚ݶÀZË~½eÇÚ•bŸˆˆˆˆˆˆj÷Ô$ª€H$ÂÄñã›¶l…Á`€N§·&wÆ}[Î+¨ÐõúõËÌ̪Õó¨S'ÐÚ&7>>Áá±ééÈ/ªvBœÜîsåª5Ðëõ‹ÅøáÛÿÙLhª+ñ¡rOO&NˆÂæèµXøÅ§ËeP*³ñÉg_Þ–ë\œŒOp<Î%+CÕlœ{vï8rä`סš§l{Âþ–ªÍÝ{öbŽî_¦õlNN6mÚ6Oš…ǦO+—Ðu¡ºÆcV·NqUmbq’‘‘áÒëPzzŽ;.¬9cFcBÔ8›ÕT¹yy¸Ûµ½ÕéôP©ÔN{Üù[ó1'ZHh>ÕË «¬0¡ Í-UœEí,í‘Z²w•ÙO®¨Ýc›†2‡m‹ü›jÀOTø`[žÝ=3! jy¼Ù¥Ï×ÏSx­:ƒ¹…öãFNÅIDO7žéí…MOâÌœú8òZ],™€¡­„ÎG¯ û¶µ‘(©ñt$[Yœ ópnbÃUÞ‹¸Éå1lˆe-ßc}¾èè €ŽÚWتûn‰ýF–Jæ¤Üêí˘’gÄÁaOí¬À£]6“lÙ…U«&¬jì·hPCiyöã¶d¶ÌA2pK¬~ÎB¦Ê„žMݰý¹:&4 Q)ŒcEçܰDâ59×þùfØÿ¢×YÇËucŸˆˆˆˆˆˆj“šD•0>j,¤R)²³spðÐaŒ‰A~AD"Æu[Ω];¡bô\l²ìtâä©j?‡DZüá”^¯³}ŒD‚Þ½zvîÚ]nïÏ’¶mßaý¹KçNNë7„¤UPƒv÷¿<{.®Z=jäpLš0Wå1r†ÛµµV©íiiÏß–qV(hÕ²Ež·G!©w™YYÖ}2*ÔÐOHj?qiié8þ_@¯ž=J—””l#>h¿Âù\5¯UI^^žhbù€~ïþ=vü¤K¯A)©Å{¾µµT‹—u-1©©i¸Û}¡’’“jüxf3ðö†<|¿·1ðù8?¼3Ä•ípÙËR•”œkĉëö×€×…J¸&u7ÉÈÓ˜sE¨,îwåڀƧ0wS¾Þ£ÂþxÃךb©ÒòS”NÜWâ¼â’m'znf‘\ARÓl>ö\J7XÇihK÷ZÏŠÜH*žC ê׿+ßKkù"–V«Å¡C1ˆOH°Vw7öž‰ýŽ¡B¢îj¦iùö¯‹ÁÎM%ãÀÞ~» † 㥦±ì'A³zB lÝ‘gݳ¬µ§ ‘¥<²qé¤ÉCMäÖV°«NÚNŽütÐñ~­‡¯êÐø¿©hÿA:öÙØëRoÞXŸ hè'Á€ænµ>ž9vì@&“¡MëVwåûcIM›4AÛ6E{ƒ®Ý{~~¾èß·ï=û;­]Mfà‹ùv›¹\‰nŸe`ILéÊÐ’{ÏæÚÙ3óƒ¿óKÍýŠT'ö`ŠeÍÚsYk3îLfà³¹øyˆÑ%¼|vÏe-ž^‘£ xº—'>ëg·ý«-]#„ó=q]ó)¶›F°5VX[B$hèg¿ªsùQÛkж¸âö¼}ïw«µØ_±r5f?ý[ˆ­pâºg!抌|¤ÍvÎÏŠ9*´Önݺe¹õêny,k¬¥ÃÄ¡C1ÖßgF ¹\vÏÄ~“ºR̈ÖýeGÔ˜»)¹%Z7_É4`ö9اŕLBüKÿÉt}|=„[~D]ªes®Ú„çVå >Ý€sêbš¦ :ÑV'ö`F¤'î³Tk>þ{6–Q#Oc‚É œKÒcìY8m©||©¯—õ E”jž^‘ “ˆŒãíÁ>Uϧ{zÁM*‚É,œÃÁÌ%^ïÍl#žZ‘8KÂó•¾^åÃd¹ƒLKÔáÃmù¥¾ qâºoE _Šh(EÿÜk%öoܸ‰7ßž‹mÛwàµ7æàÆÍ$‘ërˆ*§gn •«×­-m%wn¥O>Z€ôŒ œÊ´dŒzÐɹF|ôw>v_Òb÷%-D"”úP?ØW‚¥Óü­míIÊ1Ybò‘Túµ¼ØÇ Ê~>¤ÂÅ4žø=ÛæqÁ~üúˆíó˜7Â'oè‘”cÄü­ùøp{>|ÝÅPª…É;C¼q!݈¸d=Ì(Ÿ”Šï&ùaÂb%²Õ&Ìþ#ÇúZŠÆB.áÃQ¾ÈÎOGrssqö\¬0§ºv¹kßË4p>ýü dfeY×늾¤•––Žá£3ï½÷±àƒKýÛ²_£y‹æ.û0w˜²T&l8«ÁOTX£B°¯ù#”ja²IÄÀ;C|Ê%Ðdàµ^˜‡ itû,íCä(4˜pçOSü­_‚„–¶?OõÃ3«rq-Ë€¨EYðq£®·…:¡tÑk{¹Ÿ7&v,ÿE¢¢*U/7>ã‹Ù+²ñí¾„úKa0›qCiù}ÎM„o'ûB&A­Ä¾ªÌþëUÙˆˆˆˆˆˆj“šD•$‹1qÂ8|¹Phõ:lè*UuÔ¬^ñV¬úë¢7àò¥xhuZÔ«[=ztÃS³ž€‡¢fU,ÿó‡‡aÕŸk‘på*Ìf3‚ƒ‚ЬYÓRÇ%PÇŽ‰•«×àì¹X¤¥¥ÁÝÍááaèÓ»¦O›jÝÒÙd2~_ú ~]úÖo؈„„+‰ÅBná©Ù³Ò¨!bãÎÛLj~õÙÇX¿qöí;€k‰×¡R©  •!mZ·Â¨‘Ã1xЈD¢j‘34 ÆÚÕ`ã¦-øk]4â TfÃÇÇÍxÇFÔ¸15n;[RÏÝ­ó¾ap0Zµji÷87¹ZP‰Õ«gw›ÇõíÓþZï~\„Ç"'7>>ÞhÖ´)ÆGEÔØÑ0›ÍP8©z²u«–Øù÷f,Z¼Ûwþƒ›7“ ‘ˆ‚‘#†á±éÓ “Éàææ­Vë²kФ‰àëç‹åËWâr|<Ž?Ž õ1yÒ<2u ê¢aÃ`\¸x»vïCBÂøx{[ïo6Ûo][ÄÖ‡·zle;fÔ¬ýk=223±cç. <°ZSÔÆ@…UT%ÇÑ–ç{{¡{9~Q#æªéù&¸IEˆ”`H+ẅTT*—c©øòvC$ªük‰€÷Fú`l{wü~DÃWõHË7B«7Ã×CŒûH1¨¹;&wô€·óò‘àïçê`á®lûWƒÔ\#Œf3"#äx¢›'·pÇ;óZƒíhÛH†Ý/ÔÁ’v\Ð"%×ÑŒ>ôj*ÇÌîž•ÚÓYãéÈê5Yç÷èQ#ïÚ÷Dz<<<0dÐ ü¹Vh­Ù¥sg„†„V0ïÍÐé¯F£±\+wÌ.û€ÐBöLJýÕ^ƒ•Ç qêºɹHÅ"4«'E&n˜©°îYYÖc‘žPˆ±è€ÿ¦êqðŠ ý$xì!žìî…zÞb„H›¬Ç¶8-.¦éáë`ÉêÆ>4ò—`çóuñkŒ Ïi‘i€ZgB]/ :…É1=R®mïýY 5•Zß*sÅl5èÿ€;¼"Dz#j쾨EB†ײŒð ãÙ%\ŽG»*ÐÊNµ·F'<¨—»Ã[»cƒ_ ~اÂÑk:(Õ&Ô÷£GS7¼Òß áÒZ‹ýûïk†áÆ`ç?»1h@?ÜW ¿ËQõ‰Ìf³™Ã@•qö’°ÿ]›ûÂîÙ1سw?¦?> °fÕrtìÐÞåÏ955 ]»÷|û¿/1lè`Nf"'ÈÍ+à Ô_¯ 1›Í2|4.\¼„È®±â÷¥¼.T¥ùe6›Ñ§ÿ\KLD¯žÝ±ô—E\ûÄØ'"""""¢*ºÕy#î©ITë7û*†……Þ MÈÌÌ´þìããÍ‹HDw<‘H„×þó æðQœ:}†ƒBU²í︖˜‘H„ÿ¼ü"„±OŒ}""""""º0©ITIYJ%¶nÛ˜l'2‘“¨Ôk…9‡T*…§Â×…\v~qýaìcŸˆˆˆˆˆˆŠÝ꼑”CNd[÷^ýQ R¡dÞà€~˜ùÄ —9G³ÙŒƒ‡bpðPŒÃã^záY&4‰œý*ƒŸŸ;Ly]È•çׯ>1ö‰ˆˆˆˆˆè6þÇ! ²-$¤âáaá7vŸñ(D.´iÓg€›·âø‰“¸v-YJ%´Z- ¡Sǘ2iZqÏ "§“I¥Ð@Çpò˜ÞŠëôF û.”òQP­Ï/®?Œ}bìÑíÃö³Ti÷ZûY"¢Š¨ 5ÐëYä 2™ w^rùùÅõ‡±OŒ}""""""Üê¼{ñU“‡»›KUoß©D"<ÜÝx]莘_\ûÄØ'"""""¢ÛƒIM""¢jâ¦ÎáìD¯ ÕæüâúÃØ'Æ>ÝLjÕ€L&…»›œQMînɤ¼.tGÍ/®?Œ}bìÑ­Ç¿ôˆˆˆjÈÍM±XŒBܪºrD"nJ¥¼.tGÎ/®?Œ}bìÑ­Å¿öˆˆˆœ@&“B"‘@«ÓA§Ós@Ëep“Ë!‹x]莞_\ûÄØ'"""""¢[‡IM"""'‹…ýÜÜÝäÐë 00M0›Í÷lµH$‚H$‚D,†L&…T*¹å{œñºp~qý13öûŒ}""""""ºã1©IDDäd"‘r¹ rÈ8¼.Dœç"""""""r1‡€ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥ýñ¿ÃáÞ¸IEND®B`‚sequoia-git-0.4.0/book/src/assets/github-impersonation.jpg000064400000000000000000012002221046102023000217470ustar 00000000000000‰PNG  IHDRë&ïZ„iCCPICC profile(‘}‘=HÃ@Å_S¥* Š8d¨N¤Š8jŠP!Ô ­:˜\ú!4iHR\ׂƒ‹Ug]\AðÄÑÉIÑEJü_RhãÁq?ÞÝ{ܽ„z™iVÇ8 é¶™N&ÄlnE ½"ˆ„G·Ì,cV’Rð_÷ðõ.ƳüÏý9zռŀ€H<à Ó&^'žÚ´ ÎûÄV’Uâsâ1“.HüÈuÅã7ÎE—ž13é9â±Xlc¥YÉÔˆ'‰£ª¦S¾õXå¼ÅY+WYóžü…á¼¾¼ÄušÃHb‹ BA(ÃFŒV iÚOøø‡\¿D.…\`ä˜Gd×þ¿»µ q/)œ:_çcíšã|;Nã>WzË_©ÓŸ¤×ZZôèÛ.®[š²\îƒO†lÊ®¤) Àû}Sè¿zV½Þšû8}2ÔUê88F‹”½æóî®öÞþ=ÓìïU;r›ýÞ”pbKGDùC» pHYsssÖƒïPtIMEæ3îŠeÆtEXtCommentCreated with GIMPW IDATxÚìÝwxåÚÇñï¶$› i$¡$¡&ô®é¢TEÁ®pl  6l¾¢xQ)‚CT¤†.B ¡ÒH!Ò6eËûÇ&k–l p®ËsÈîÌìÌ3³³³¿}æ~?¯]kB!D™:t¨4ƒB!„B!„¸.êOöVBˆ*z£Õ>i!„B!„BqÝ”ÒB!„B!„B!Dí’°^!„B!„B!„¨eêiõ¥„¢Š6n”6B!„B!„×OzÖ !„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2 ë…B!D­Ø½wŸ4‚B!„B“°^!„B!„B!„¨eÖ !„B!„B!„µLÂz!¦j›Á$)„¸ÍO¢¦j\–œ[…B!„âv!a½B!„B!„BQË$¬B!„·¤»Bز[B!„BqSPWuFo¿]±´ÔdÙ;BˆÛRRr2;vîáPh()É)œ8u€ –-ðõó¥[çÎôï×›†~~ÒXBQŽ»BXôõrL&ýûö‘FB!„BÔiji!„¨’’“Y¼ô~ûc“ÍçOœ:͉S§Ù±3„ÿΛÏ}Ç2áù§%´B.\L·ùo!„B!„¨«nú°~ÅÊU|¾h £FŽ`ú«ÓÊnàáääæòËêÿáçë{ÓoÏͦßà!èòóÙøË:<=ܯ:íþÿ0åõ7=ê~^›úòM·­O<ý,§cÎTjž¿ÿÂÞÞþ¦ÙF½¾ˆO>û_ŸŒ{ò‰ ÏyŒÂ‚:uì€Z-¿–¶}Ç.Þ}ÿC²³³+<Ïolbû®Ýüߌ·пïu¯CAA¿ý±‰½{8{6ެ¬,´Z-þô¸£;#† ÅËÃã–Þô<„¦þüï»oåÀ¼¾\¼”W®âÃY3ЯŸåñg&Lâxt4þ¶žúõêÝvû),â(çϧѯOoˆOH$-í-š7¥^q{!„B!„¸5TkZf2™¬þV(•š§"Ó‹ÚSBoݸir4oÖ{Õcé™™¤¤¦RÏÍF6zA+•2|Äíì×ß72cÖì*͔͛×Þäý÷Þæþê¼'NŸæ·Þå|Z6¤IãÆäååròÔi"çÇ+™óÁûÜÑ­ëm·víÞÃïÌàáÑ0õÅÉrÐVÁ“O?Çé3gøûßä3¤âV¤]¸€«‹3öÒB!„Bq‹«–°Þd2¡P(P*•˜L&L&“Õ¿ …ÕÿÿÁü•ý•¿¸ý4aÊ䉴lÑü¦\ÿ™o¿Uæ±5ë×3wþBîèÞ÷ß}[vr5ÉÉÉÅÙÙé¦Þ†í;vU9¨/mƬٸ:;W©‡}BB"_šJ^^ýûöaò„ç­JëèòóÙº}K—KBbâ-Ö«Õj¦Lšˆ›››¼Án°Þ½zàáîN‹æÍe?ËÈ̤ °€¦–Çêׯ‡½½=Z­VΣB!„Bq‹©rXo41–¿õz=F£­V‹B¡   “É„J¥² ïU*•e^¥RiyÞd2a0P(¨T*Ù3·1_}hŒ4„¸¦IS¦¡P(xïíé– ³l‰‹cÖì9xyzòÉGÔ‰õOJNæÝ÷?´üýø£ñÆ+Søõ÷,Zºœ””Tœ jÙ0׬ÏÉÉÁ×ׇž†ûG ãã¹óY±r ï¾ÿ!­Zµ¨t ûY}L^^CæÝ·Þ(ó#ªÖÁC‡pW¯žœ;—tKS*•ŠG-o®ZС];:´k'û©””ÔT¼½¼,¹º¸àZw&LšúŠù<úÖ;~ø±ù<úáÿÉA+„B!„Õ¬Êa}«–-™›Cá|Ú¾ûá'ö<ÈÅôt\œéЮ-O=ñ8m‚ƒ,Ó0pè<=<øuÍJ«e¼üêëøç;udтϬžóÄS$%%³uãkdΜeÑ×Ë Àh2Ôª%ÏŽ{м¼|^}ó-›õßó X¹z-oßNâ¹$4 -š5ãÁûG0xÐ Ët'OÅðÔ³ÏYþ4l¤åßnn®lùý·jÝ–òjÖÏþø6lÜÄÂyŸ Õ:²tù7‹ŠÆd2Ѿm&O«–Ö=2¿ùþG–,ÿ†·^{•ûl”)¯´Ï阾_±’ãQÑ\¸xg''¼½=éÔ±c÷úõ«m{+ºJ<ðÈã$%'³wÇV6nú‹u¿ýJ||"þþ 4€Ï¿ZÌ“=Âä ãm¾Þ”×ß`ÿX8÷º÷Ž9KÈîÝDŸ8IæåËèõz¼==éЮC‡ÞKýJô^5™Lœ:}šøÄsâäèHC??š5 ,wž¢¢"rsóÌ?ì©”Øi4h4š ÕµÏÍËcÖì9W ìK‚úܼ<óòêÌ xÑ’åV5ê]ÍÇàý#†qÿˆadeeãêjÊee™§/y|@ß>–°>;;›EK–óÁ¬w+¼áGr<* ­VËÔ—'_µY=77ê]q,ä°rÍZ¶nßNâ¹dËñûÀ}#÷”J%Ë¿ÿ'OaogG¯wòÒÄpss%óÒ%–,ÿ–={÷q9+‹¦Lÿ<ݺv¶Zž­Z诽õ.»÷î`õÏëYýózËô¯¼ü"cÀž½ûXõó:bãâÉÊÎÆÍÕ•F rg÷®•Û¡²ª» vïÛÏ®ÝD"íÂLF#6dЀ~<öðCØÙY—úúsóßÌúð#Æ=ù÷ Ê’åßðÏ¡#ddf2eò$æñ¥eÚ»‡ßgõ²yï@ù5ëm¹VÍú¿¶lå— ¿sö,EEE4näÇÝòè˜ÑeÆ)Ý~ŽZ-K—˱èâÏ–6m˜8áyZ•s§WTt4«×ýBô‰“äëòððð¤{×.<4zîÖã;è‹ô8t˜ð£GÉÎÉAa·znøøxÓ®ukš7kVfù)©©8ØÛãæê ˜ï<¼ZÍz“É„® £^R¥B£V£Ñh®y ååå1ëïØ—õyyyäååÊ´B!„BÔ€*‡õ>>><õÔ“V½àÇŽÇÓ§óÕ—_0eÊË<öè£Vó´ly„eË—Ó¡Cî¹çŽ?Nxxtéܙɓ'ó?¼a p66މ/O%óÒ%úùѧW/Χgçî=ìÞ·Ÿ÷g¼Ã þæÐÀÞÞž6­ƒ 8JJj*¾>>æ/à‘Ç8v<ŠÂÂBKq1=ƒ„„DÚ×XPâä)^xÙ\¢Eófú˜À䩯òÀ}#mΣÓé˜4eÇ£OàêêJîÝÑåë üèQŽfÚË/àéáÎøgžæç_!==“qO=a©É^5tÿ9|„•«×âîáNëà â9xè0Ç¢¢Yñí2Ë~©ªˆÈH&¾< ½^OÛà`Ú´&//sIɬZ³–AýûU[X_™ýp¥¯–,eŪ54kHpp*•Š» dá¢%lÙºIãŸ/¼f^ºÄ?‡ŽàáQŸ.;Y_½ög:D³À@Z4k†J¥$99•{öp,*š7^›J=׊öûþC¹$´Z|½}P«U$§$““—‹RQ¶6~~>.^D­V£Õ:¢Q«+\Ãæ;o2óƒ®Ø[õZ-¯M}©Nœ|“’“Ù°ñÏ«NsePo뱤”«¿7lü“Æ?SáÞõûöà®^=qqv®üñ;õ¢Šß;»w'_§#4¢øøŠbÚK¶ßÅ_/ç«×Ð,0àV­ˆ>y’%˾!/7¾wõæÅi¯âììLË͈‹K`ïþįųâ»åhÊ,ïÀ?ÿ°jí:||Ð&8ˆÓgΰñ¯ÍÄ%$2wÎlž›ø"—.]¢E‹æ8g^âä©SL}c:ËUn[âÞ»¢Õ:°eë6Ú¶iMÏ;ï°<×¶ukV¬\ÍÂÅKÐh4tìÐŽúnõȸ”I\\Ë¿®Ñ°¾&Úàƒ9“Ÿ_@€¿?Ý»v!7/—è§X¼ì‡†±àÓÿÚ¼ .--§Ç¿€^o yóf¸×¯›‹ Ï?óÖýò+陌{ò ìì̲ƒ½Cµ·Ã?›Ïú_7 V«éÜ¡Z-áG²øëåìÙ·Ÿ…ó>µy :|„•kJ>[ZŸpŽƒ‡sìåh~úæë2Ÿ-¿løy ¢V« Â×»5)çϳuÇN""2ó­·ðñýwžoø‰“gb¨çæF`@´öäé 8w. %Š2a}nN.YÙ9æ:+0¤Á` 33”JìŠCzEÎ¥3ßžÎÌÙs®Ø—êµZ-¯N©çQ!„B!„¸ÕT9¬/Òë),,âôéã,ÿæ[Ú´iÃóÏ>ôiSùý?pvrÂ`0ðõ²eDGGãììÌÙ³gÉÊÊâÀÁƒ <˜6ÁÁØÙÙ‘——G»öí0„…‡“Z|Û÷0kö‡d^ºÄ#£äåÉ-!áßÛ¶óάÿãƒ9ÿ¥C»vxyš{ÈuéÔ‘ðˆ£„†E0lˆùKxô‰“èt:šp66ŽcQQtîØ€Ðð0:vêPcÛðsÌ_ 'OÏ“=by|ÕÏëøìó/leË¿åxô :´kÇÜ?´„tgÎÆ2iÊ4V¯[O·®]¹«W<<Üyzì“lßµ‹ôôLžxø¡ZðÇÿ­bÊ䉖R9z½žwg}Àö]»Xµæg¦¾t}ƒ?®Zó3z½žßWôî°ð6ÿ½•ûG /³¼ÿ­^˯LaÔÈ‘ÅÇUã_|™ãQQ¼ðÒ7jÈ·KYÖñ‹ÅKùiå*V¬Z}Íq$öï‡Z­fËÖm´ âé§ž,3Í+W¢ÕjYñÍ2«ÞÿF£‘ð£GoÈ1Um0íÅéÕóNœœJ½W³x{æ,‡†±yë6†Þ3¸Ì:lÚ¼…Áðæë¯Zñ’sÓŽ!¤gdòøÃcjì3d÷Þ½¬ÿuîõëñÅgóhh~¿ggg3mú[D;Î×ß|ËK_(ûÙ²rS&M´”×Ñëõ¼ûþlvìÚŪµ?[ ,|âÔ)>ÿ9õÜÜøäÃhdîø®€ß7ýÅÿV¯fù÷?òöô×HNI!êD4þþþLÿ¼å®DóõTééeÖ')Å|-ÔÀÛ»BÛž‘‘‰Þ ÇÉÉg§«Þ%SæqÂêßk×ÿZî´^žôës—|3B!„BÔ*åõÌlg§!>!ÏÌgæÌ™œ‰ÅÃÃ7WWôz*•Š~ø‘Ï,`Μùå—_ÑëõìÝ»ÂÂBzöê…†n]»¡T*Ù·oy¹•¿½ú— ¿sGŸþåþ—cc™G#qâÔi¼==™üÂx«Þ¼w@ßÞ½Ñétü±éßÞ¯;˜ƒÑЈpËcaá–'4,âßçÂÌ!M—âð¾ºEDFsæ,<ñ¨u8÷ÈèiÙ¢ìmõ………üöû¼>íe«Þ´Íš2îÉÇX½n]J¥çJõVçÑ·§£Õj-½å¡¥¾Ô G©TZ…RÕéhäqöïkóËùÀ~ýË4kHû¶mÊô¬OIIÅh2á[ÎyþJ%?̪T×wYweIó1R7ƒúþ}û_£¥—;MÔ‰h¢¢OÐ:¸­ƒ‚ËÖËÓòL!„B!„¨-êšZpI0‘ž‘AQa!…Å_ø55é„ìÞØ1cÐ~~~˜0±gï^RSÏßøAK¯¢X?ß©c{Â%4<œ&Mš——Gçâšô;udëöDEŸ°ôÄë\ƒõêÿ]CÅU÷C•6û*Ë­MJeõ­“ÑX¶Wq=77¾þr!¡aáìÞ€°ð0:ÌñýŠÿ±ì«/m†:5vø•³®Vß}ð݃ؾ+„Í[·YÂúÍÛŠÃúâ29%Ò32™õáLF#Ïþg,]»tÆÝ½>vŃòÙÎ%%]»¶©Bj*•ŠÞÞRT¤Çd2b0P*•• ëmó7²üFm:|$¬Êó¶hÞŒ‡uòä =~¯vUUö»­Á‹ÿ}­š?Z±æÇïØ»ÿ û$,â(oÛÁßÛvнK>ûdŽÍY¯4áÙ§™ðìÓU;7VSìÞ·Ÿ_~…——Ó^œHÛ6m¨_¯jµš¢¢"îtO¹çƒš0¶FJÇäÕÚÏúsÃ|§ˆÖÁ'{¥R‰J¥B©P T©P)•¨TJ”Jþ–ùîìÞàà NDŸàl\ÉÉ)„†Gyì8½{õàŽ®]-ÓžKNÀç:L¿Þk¸º~½V¸¾fÿ†õAÁ<ôà(¹òB!„BÔiÕÖFËX“Éd [^}õUvlßJŽŽŽæpT© ** NÇ AƒèÒ¹3 …‚ýû÷STThé]YÓ<=Í= SRÏÛ|>5Í\J¢dpÙ]:väÛ~"4<‚ôôL:wìTüœ9˜?NzqXß©CÇÛóºOK³½ çÓll·yž”ó¶Kedçä“›‹½½=..Î7õ^RÞ(Wg»„Ëùó¶÷½R©¤k—Ît-.Mr1=ƒyŸ/dÛŽ|ýí·¼óÆëÕpüÕÜ~èÝãN\œÙ½gºü|“8GÛà`7².Qsàà?äçç3zÔý :¤Ì².f¤Wè5íììP©ÕäétMÆ2Á— ……¨TÊrç/¹«Æd2UºüЕ5ꛃÎÖ¾¾>¤”*W“”œ\åe]9¯¯ož^=îäÇ•«Ø½wÙ99åöH.ïø-o@ð[é €Á` **Š'N¢ÑhnØ ¦íÛµ%¨e ÒÒ.°xÙr« vîÞÃŽ´Zm™ÞÆöö´"99…#¡átjßÞê6ñN:I\|<­Z4¯ÑÁö:´kG³¦œ9{–Ukû¨“ IDAT¶zný† œ8uªÌ`5Ÿ—§¹ô‹­à»®êÔ¡Cq ²³±ÿ† ç’’øè“y6çY³~=iÊÖ3Þè@™ÚÂUUÕýPQ÷Ümæÿú{[¶nC©Trwÿ~e¦+é…²›‚R5ÿ/]ºÌO«VWê5[Îyü8ù¥j][ªýK»œ•e㢴Šþhg+¨ °9èl] š®P6;;›Oæ-¨ôrþ;w>ÙÙÙW]öµÌxó ´Z-›¶láͳÊôžÖåç³aÓ&žzæy¢‹Ëå˜ßaÌ]p•ã÷¸\íü—‘™É/~·j0ßqöÏáÐâó†÷M³­ ‹úݰq“ÕãG#ñÓÊÕ5Ò†Õẽ÷°ü»­ÁÍÍÍåÓŸ0jäpìí¯¯ÜÞ¸'Ìåo–,[NÈž½eÏk—³ØôçfËõLl\QÑ'0\q}£ËÏ·ÜÝWrWKâ9s ?ߊ‡õöövh0äææVºÓƒ­ Þr•À^!„B!n˜*—ÁѨ5899ÈÔ©SHˆgÖ¬÷9ŸšJRR*•ŠÑ£´ÌÆO?­ ¨¨µZ͆ß6ðØ£áììÄÏëÖ‘••UmƒwVÔŒ·ÞdÒ”iüø¿U„ìÙG«-HM;ÏÑÈc¨T*Þyãµ2epÀ\›þhä1 ËÔ¤/©[бcÇ]…BÁ;Óß`âËSùlá—üµe+MHHL"*:šQ#GðˆßQ—ƒ)1á™ÿpôèQ‡†òà£OбCòóu £°°‡|€»zõ´š§w¯ìÚ³‡Wßz‡î]»àä舣£#S_œTáõ}åé¨ËoÔ}#>ôÞjm_F ÂïÿdÜóhÓ:˜‚‚BNÇÄpG×.¨TJb®è)¿båæÎ_HËÍðoâR©$>>§Náèèȸ'Ÿ¬¶õ«Ê~¨¨Î;âååÅÞýèqG7ÜÝÝËL׫g­^Ëɘ3LzymÛ¶Æd0ròôiüý›àϹ¤¤ ½¦“ÆœK 1)‰-[·áçãƒJ­"ër.®®ØÙÙQtÅ À—/]æòå,µØÛÙ›k?+ÅÿõßË êK\9èl]*‰3 ß]–p¾U‹ædåäðÛ›8yê4¯M{™n]¯¸:Ê⯗sÈF½úýîªÔºøûóÕ‚y¼þö vìÚÅŽ]»hܨîäåæ—Haa!ŽŽŽ4ù·÷ø§ÿCÄÑH‡†1ú±âãW—Ïá0óñûЃ£è]Åã·®iÞ4Ÿ 8Ƴ'ã߸1*¥ŠÁwÄÏׇç~Æg ¿¤uP¾> (,*$*ú$)©©øû3ìÞ{nšm}èÁûùsófÖ®ÿ…ÐðpZ4oÆ…  àчFó¿Õk«´ÜÞ½î$dÏ^{û]ºwíŒ“Ö ­“–©“'UÛºßÕ«Ü?’õ¿nàñÿθç'”™þʼnØ»?QÑ'Ùà ƒoooÆ<0ŠÇS©ÞŽ×R•ýPQ …‚Áƒ°¢¸'ìàAmNg§Ñ0÷ãùiÅ*"ŽãÐáP¼½=د/#G çË%_Wêu{ÞÙ“§cHHL$õ|NNŽ4ôõ¥i³¦Š.3½»‡;F ‹ŠÐ˜Œhìì*T:eæ‘§ÓÙ êK\Ø:!_Ο[ë'߆~~Œ6„ ÿį¡Ëg¼Í”W§s84Œg&LÆÅÅ… Ï=Í“=l5߯¿oä“yŸ—éM_bä°!4ôó«ôú·jÅÚ?ðÛï Ù³‡³±±$§¤à¨ÕÒªe zÝy#‡ ³Š–ãwÁg¬\³–¿·mg÷Þ}–ã÷ÁûG–{ÌÝŒ”J%Ÿ|ø_-ýšcQÑÿ–jÑŒ¶mZ3õÅÉ åll,Ñ'Obgg‡ŸOFÝ÷Þ7GGÇ›f[X¾x_-]JTt4;w%ãߤ1¯O›Â¨‘#ªÖ¿×üò×–¿Ù²çßÏj ë^Ÿ:…ömÚ²~ÃB#"Ðëõ4näÇã䑇Æà`_=ƒØß?b8­ƒƒY÷˯Žæð‘Pœ]\hÐÀ‹¾wõæŽîÝQÑѲE î|7±ññ¤žO#>1WgW¼xÓ¥c{Zµ4ß•tùrY—³h\éõQ©Txxx˜Ká  F”Jã5Ãú™³ç ÓélõVçÑRýÜ ùâ³¹!„B!„¨^ ]^n•’qOïäç›Ë\( ŒF#*µÚò%¸°°¢¢"KàV2è¬ùÖsæÁ× ??£Ñˆƒƒ*•ÊÔ_8Ÿ"{§Ìšý›6oaîœèÝóNiQ.ÛÃ!Ve†J/©ÊÆ>; Ü ¾´Ø¸8f~ð^žž|:gvµ­ÃÆ:th•æMJNfÌcãÈÉÉáñGâ…çžá™ñ“8y:€Õ+¾#¸¸´Péy†ŒmsyÎÎÎüµa®®.r@ Q«'Ѫ#çHXƒ´Q³¾fέcŸ3ÿh=³wÅÆÅ1söóyô£ªåõwïÝWå;È®eͺ_øù—_=ê~zp”§B!„Bˆ:­Ê=ë•JNNNe¿«,koo_¦&ì¿=æÿýÂYÒÛ°d¾ÒµßEÅ\¾œEaQQ™r=oÛΟ[þÆÝ½>wtë" %n9_Ο‡³³S…¦ àûeKêÔú7ôóãõW^fƬ٬X¹†‘Dzvå:J«–-l†îWë5ÿú+/KP/ÄMÌÉɉŽÚÓàŽqðågs+wýzñMÓž¥¯‹l•4B!„BˆºF}=3_Y®¦ôßF£ÑfðnØ—}üF–À¹UÄÆÇ1áÅ)´j…ŸŸ&“‰Ø¸8ΜE­RñÖk¯¢¹¢f½·‚ŠLuÙýŃ´Î˜5›g'¼È>D·.8Fÿ~}*¼œ÷ß{Û²,!ÄÍ©i`€­K$9VQÿ¾}lþ[!„B!ê*uu.¬"½âË›FzÔW]£†x`䎄G°ÿÀAòóó©çæÆ€~ýxê±Gj%$DV²ÿwî-]΢âÇÞwÍyyý•—%¨B$¤B!„BÜLÔÒ7?Ow^eª4„7±ûG £[—N,Z²œ ÿ¬Ð<#‡ á…ñÏTi@Y!„B!„BQ·HX/„uDC??>˜õ./Œ†“'O—;ÝüO>¢U«Ò !„B!„BÜBªÖ§¥&Kë !D hèçwÕ ~@ÿ¾ÒHB!„B!„·¥4@Qm3ÈøBˆÛý$ª¨ÆeɹU!„B!nÖ !„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2 ë…B!„B!„BˆZ&a½B!„¨wõê) „B!„Å$¬B!„B!„B!j™„õB!„B!„B!D-“°^!„B!„B!„¨eÖ !„B!„B!„µL¡ËË5I3!DÕü´b…4‚B!„B!„¸nÖ !„B!„B!„µLÊà!„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2uM¿@FF™äädSTTDFFF™iÜÝÝÑh48;»àî^wwwÙ3BÔ2“I†³B!„¢®R(ÒB!niÉ))øùúÞ^Ÿï51Àlrr2iiiœ?Ÿ†‡‡;žž¸¸¸¢Ñ¨ñôð4_T(`2a2™¸˜~‘¢"=ÙÙY¤_¼Hzz: 4ÀÛÛ???92…¸$œB!„â&þr/á½Bˆ[Œ„õס¨¨ˆøøâããððôÄ××_4M•–•ššBJJ é/â“*-Kqu¥Cz ì…B!„¸ ¿Ø— ê%´Bq«°¾Šâã㉉‰¡/A­ZáèäTm+˜—›Ë‰“'9ŸšBóæÍñ÷÷—#UˆjpeHŸu)ƒô iäë¤q„B!„¸IØ;hñðòƵž»„öB!n)ÖW’N§#,,;; mÚ¶ÃÍÍ­ÆVôòåË?‰Éd¢mÛ¶hµZ9b…¨¢’ Þd2a2‰‹9…½>¾ q©W_H!„Bˆ›Dö¥L’ÏÅ£×ë hÞ…Bi ê%°Bq3“°¾Ο?ϱcÇ &0°é [áØØ³œˆŽ¦mÛ¶4hÐ@ŽZ!ªÀT<^@ìéxûøáå#ãC!„Bq³JŠ?Ë¥Ì [™¿ì+Ö !Dö×_›‰‹'//Ïêñ йsgüýýquu%++‹ãdzoß> ƒÕ´ŽŽŽµjE¿~}oÉ6ºÃzuUfŠ'!!^½zãZƒ½ém lЇ»‡ýƒ^¯§aÆòî¢J—¿ÉL¿€½ƒõB!„BÜäú7%';‹¬K™¸ß-k2™$°Bˆ:诿6³gï^t:z½Þ깞={âççGHHзo_œœœX²d‰Õ´jµšääd F †½T:¬ŒŒ$''—>}û¢ÑØÕÊJ»º¹Ñ§o_öíÝGFFíÚµ“=)D%”ô¬¿”‘N“ÀæÒ B!„BÜüƒ‹[=@Êà!D]uøÈ²³³m>·uëVV­ZeélyðàAòóó:t(õë×'33Ó2­^¯çòåË„‡…KX‹PVfâøøxrrréÙ«g­õ%4;zöêINN.III²'…¨€Ò½ê òu– y!„B!ÄÍÍÅ­ùº«~BQûÒÓÓË}îÂ… eÎÝ111899Ùœ'9%EõQá°þüùóÄÇ'гgíõ%4;zöìIÌ™3œ?^ö¦PÒ«þf»h=°[vžB!„·ð5¿BÜ.ŒFc¥¦ Ä`0––fóù+K鈛W…ÂzNDZcÇèÖ½;»:µ;;ºwëαcÇÐét²G…B!„·4éÄ „BÜ><<<4h»w聆°PäW¡°>,,œ  `Üêh¹ ·zõ æØ±c²G…¨ ée#„B!„\ë !„¨»˜8q"ééé¬[·Nä6pͰ>>>FCÓ¦Mëô†4mÚ…BA||¼ìU!®qÁ.ïB!„BÈõ¿BˆºK­V3qâDY¸p¡ôª¿M\5¬/**"&&†víÚQ×?ÚM@۶툉‰¡¨¨Hö¬B!„B!„⦣P(xöÙgiܸ1 ,àÒ¥KÒ(· õÕžŒO /®nnÕö‚þƒ£“#íÛ¶­öqus£/ññ 4oÞLöî-,6.ŽOç/àÕ)/ "„B!ªEbb"k×®åäɓ׵œŽ;2|øp7n,*¬äååñý÷ß0vìX¥Qꈄ,#×8°á¡|š¸Ê] %¢Oœ$8¨•4Ä lo@Úü&a2™P”ú·ÉdB©RQèââ8ôùBŒEEt{é%œ[4¿æòüqÚ´iÃgŸ}Fjjª4ðmäa}}ûõ¯¶[ðÅ—ìØÀôW_áÎ;ºWû±sçŽÖçç瓜’ŠŸ¯7ÅNO»pøøbpvt¢‰cœ´Úrï´ ع{ýîê·—W­¯l\³fÏ!7/€Y³çðÞÛÓ%°¯eº)1zRÏði®Â·™­“ªN®oxx8çΠqãÆtèÐAv¢B!HOOgÞ¼yä_k^ïõÆ©S§˜={¶„±Õ`Û¶mètºj]¦££# ¸áÛ²fÍÂÃÃÐjµŒ7Nvp±ò¸šÄ,…åßoô;÷Å­aû® ýûÜUçÖ-''—¸Ä¢¢O\×rZи ÎÎN7| …Õ¿@Áå,N¬]ËÁÏ?çRL &àÌÖ­ô˜2åªËºû뮻ػw/õêÕ£sçΖçbbbÈÊʺaÛÇÅ‹éÄ&$ؤ žž’ÁÕ rÃú¤¤$<<<«í¢²tPpáâÅÙ ­£#žœ?ž Ôx C—ŸOBb"]:uÄÅÅ¥Nî蜜\…†òóú_I»pÁæ4Mš0tÈ=tëÜÙêÄ6óƒ¸pñ"»Böðåü¹µºWõ¹yyØß`y9Eœ -à\´‚‹‰J.%ÛQ”¯À„À„ sy*µ}!õýŠðki i'þ­±³×ÔÚº‡‡‡³víZ.^qòôôd̘1tìØQv°Bq ¯– ÞrÝ”—GDD=zôƽß}÷û÷﯑e'$$Üа<==Ýj[öïßψ#ððð-n É))ìÙ¿ŸãQ'8Mbq'ªe‹¾¤]›ÖW7"2’oø‘cQ'ÐàϘG1ôž{Êç|Ú–,_ÎÁƒ‡¸œOƒÜs÷@Æ>þvvve¦?|$”…‹s6wwÆ<0Š'{Äö¹éÇ,ýæ[~\¾”fux¬Çí»BX´t`îõ= oŸ:³nÿ:ÌWK—Yå<×ÃÉÑ‘‰Ï?K÷n]oÈú 0(Òé0 èÒÓÉJHàÜÞ}œúã²OŸ&§ µJ…ÈLH`×ôé0vl¹Ë (ζzõêE¯^½¬žûâ‹/ˆŒŒ¬ñíZ½n=!»÷–›!z{yÑ·Ooz`”œÔªY¹a}ZZ~ VË‹\Ôøû3bØÐÛ(_?_’“’nHX_¢H¯çHXx ìKJÆ”÷+—ÀWK¾& I&ŽÖ|—ü°r­ùoÄv”êµZó NûèbJ+Þ¶£0_kËÂdŽæMÅ#[˜,A½ùïÂ|È=«æÜY5ÿ­kO¼]„o“ß»lÿþý|÷Ýw¶·ëâE-ZĸqãªýË´ÑhdÆ»ï¢R©˜õþû·ý14oî\rssyëí·Q©¬ï¼X¿~=¡GŽ0á…hÔ¨Ñ5—5eÊ,XÀ¢E‹˜0a‚´ã-dßÞ½lÚ´‰»úôážR_¾Ê{<%%…/¿ø‚F1á…nÛã`é’%$$$0~„[¦ìÆŠŸ~"::š±cÇÒ¢eË[v_þßûïSPPÀÌY³P«Õ×|\ÔœÒA½‡‡¯¼òJ¥CÔôôtæÎKzzºå:C\ÿu\M.ûF†õ¿ÿþ»ÍǤw½¸]ü½m_-ýºÒómßÂÛïÍÂh4Ò¦ukœµ„EeÖì9Äœå¥Ê~8—”Ä3&qéòeš4nDË–-ˆ>q’eß~ϡá|9.Ϳɒ“S˜òútšúóúÔ) ç‹ÅKÐj=ê~«e§]¸Àw?þĘFÕé ¾t®så¿k[l\ŸÌÿ¼Z—™›—Ç'ó?翳߯ñ|Hœ^·žC3g’•ŸOQ^z% 2)0P¨ÕhT*s¨¨•J Šÿ]ž¯¿þš¯¿®Ü{¤º/!¶âÁQ÷èßÄÒ–±qqÄÆ'°k÷Ö®û…]!{nêòÔ«×­ççõ¿^×2F?p??ø@µ­ÓUÃúλ\÷ Ø ê?˜ù^6´áaa7d§vhזáaè †:Ø—þõ´„—§'þMà.WGlBááá–[ª¿ûî;Z¶lY'z6%&&²dñbxö¹çlN²k[¶l¡ÿ€ 8°Î?©©©dddоC‡2³ÑhäDt4®®®4¬¦‹k‹ƒƒÕvÁT™v¼Y¼7cƒfÏ–ëm|Ü*n¶sq­‡4ÿMÚùóÜ=x0ÞÞÞuz]{ôèQ¥kzôèÁü!;¼ >¼Z–SûçÊ^õ%¤w½¸4jäÇc?Dë V´ æõwÞåtÌ™«Î“••Åì9ÿÅd2ñéG³¹«WOów¦sçx~òK¬X¹š>={Ò±C{«ùþoιtù2?ú°%Ì×étLy}:áGùaÅJž÷”eúŸV­Æh4òéGâíåÅ}#†‘”tŽo~ø¡LX?ÿ‹¯Ð:jyö?ce§VÑšu¿XþíåéIß>½mN}‚¨èŒ~àþ«.oWÈËkÖý¯L­Ñõ7…YYä&%‘c2^o~\¡À T¢P*Á`À`2¡,.“c4QšLòòPUc‰<çë^FI†è߸13ÞžN»Öæ;]bãâØ²€€&зúö!2*ŠïXÁëoÏà…短SwlTÔõõ%˨ñ°>##ww46nªŒò‚úš®¥ÑØáîîQ¼î5úZ...tíÜ©Nö‘QQVA½—§'£¸ßæ›'''—›7³éÏÍ–àû«¥Ëðòò¬õ7NyA}I ?ó7%°¿Râ5˜0`º)¤i[5>j¼üìû2Ó§%r1µˆ˜cEìݤƄ‰Ôdå _ïmÛ¶Yþݸqc¦M›f)󕗗ǼyóHLL¤gSMŠŠŠ uë²··ÆÇÇ“——ÇwÞiUïOT®o :”†¸ÃÀÕÕ•¡C‡ÖÙrtrT]—®] īއº5eð=÷`ÐëQ*•!ÌFŒQ-Ë©°¾t¯ú=zžžÎ©S§äTÜVöëÇÀ~ý*5φ?6‘“›Ë=w²õ5büÓOóѧsùiå*«°þxô Â#ŽâÓ Ÿÿ·ó“V«åí×^eÌO±êçuŒ}òqÔÅΜ¥IãÆVãõuíÒ™ïú™™¸×¯À‘°0¶íØÉŒ7§ãâì,;µŠâ-ÿžùΛ厓¸zÝz¢¢O\3íßç.&My€„Äs5¾þ • …FƒJ¯Ç¤Tb2™Pi4˜ŒF  …ÂܱF©Äd0 .¾“Ã>* ]‡¨Õêëúþk2™Ðëõ_ßw‚ظ8KP?ó·pvv"''—¯–~Í¡#¡VÓvëÒ™‰Ï?G»Ö­™ùÎ[ÌüàC-]fÕÿf1úû«¥g}u*'¬ÏÄó:CÚÚ êKxzy’‘‘Yãa=ÔÍÀ>''—ÅK—[þ.ýf³ÅÙÙ‰‡|€î]:[ß_-YV«oškõØß@…,¥o†>åZæùÌ Fê{ý(xûÙáígGëΰsÓe«97RÉ^cÇŽµÃÑÑ‘ádzhÑ""""dGרãÇQ«Õ–»¬ž+ÛÜâÁcM·ã­Â×Ï_?¿ OïääDÏ+ê9Êqpk º­ßïwÜq‡œôêˆððp˵By^xáÿF”ëÊ^õ#FŒ°”Lé]/ÄÕì.~ïÜ= ™çöïËGŸÎåàá#`ooîD¶·xžþ}ûXÂøMš4¦UËæœ<ÃÑÈH:Ÿ» °³³ŽÊì4掬EEæÁ†õs,¤m›Ö ½w°ìœëPº$·—ÿ:lU' I>ùèƒ /¯tØÃJ9+˜L&Œ& “ “ÉÄåÂB4wg4™Ð  hüÂBL€&,ƒÉD~@§ªg¥õë×£}ûî´ëp}ן|öy™ìðË%K9Z¶rÉ¡#¡|µôk^Ÿ6gg'K`ÿéü…µ>Öee=üàÕÚ+¾:Ø ë³³³hÜÄ¿Ê ­í Ìá[rRÒ {½ºØïÚ½Çrbòòô¼jP_Z`@Ÿ|ôå—ȸâÑžkCE‚úÒë-ýQd2– ÛC6yXOR¼ž¼\óWÕ³9o¡É\—ÍT ë]Ræ°YǹôëêTΖˆˆöíÝKZZJ¥ÿ€ŒešÕ«VY‰‹‹ã·ß¶<çççÇÄI“øè£ÈÍÉ`ÇöíìØ¾Ý2M¯Þ½2dˆU½ü™³fqàÀ:Dzz:†fÍ›3hÐ <=Ëþ@{ö,ûöí#%%…ììl4 ÎÎÎ4iÒ„={âëë[©íÎÌÌ$55•   ›9EGE¡Õj  ´z¼  €O?ý”€Ûà IDAT~ø¸¸8<<<2d|põ‹6ƒÁÀ?þÈ÷ßODD¹¹¹øúúrï½÷òÖ[oѤIË´‹-bâĉŒ3†5kÖØ\Þèѣ͛7çôéÓ6§Y¼x1/”ª—~e‰ììlœ‹{ÞF¾ûî;¾ýö["##ÉÏϧqãÆ 6ŒéÓ§[iÇÒµÊ ;¶oç\ñ`]þÜ{Ï=xårøÐ!<ÈÅ‹Q«Õ3dÈ2ƒÊët:"ÂÃ9uê.\ ;;¥R‰——íÛ·çÎ=l–3*=FáC‡8ôÏ?\¼x‘¢¢"FŒɆß~³L_úؘñÞ{ØÙÙ•[›¾<תY{ö,{÷î%!!üü|œ  OŸ>e~¸r*òž½ò˜Ý·oÇ'#=£Ñˆ»‡íÛµ£WïÞVuQK^/"<œÃ‡“žžŽN§ÃÁÁW77šÒ·_¿2ûæZï'€sçα}Û6Ðëõ4hЀ>}ûÒ¦M›Ógdd°k×.ÎÄÄXÞó~ rÇw”™gÏž=üõçŸôíÛ—»[IýlÞ<ÒÓÓiÚ´)O?óŒÕs?¯]Kxx8?òíÚµ«Ð¹ãzjÖgee±uëVN<‰N§£^½z´ïо}û²xÑ"RSSyyʼ®èÅU™¶¨È¹øzتY_Õc4==ÏæÍÃÛÛ›—^~¹Ìkådg3gÎêÕ«Ç«¯½VíŸ —.]býúõ¨T*Ô*Û·mC¥V[þ¾ãÎ;­ÆœºtéÉÉÉäåæšÃ{{ÜÜÜðööF[ìP!§£Š,µéËŸ×hUçþv´eËBvíÂÛÛÿ€Î§¦rêäIâbc™4y²¥'U›¶m±³³ãÈ‘#ÿÏÞ}‡GU¦}ÿÎL&½’„T@zïHƒ`+.¬®úîZv»«îºÂª¬(V°#Š‚²  °´PÒ¤éu&mfÞ?’9Î$ =ûs]\$“sfÎ<çÌÌ™ßyžûÁÓÓ“#G*÷áî^;¢aò¤I$>MJr2!!!„ZLjlã¤fóO?qôèQBÃÂèÞ£YgÏ{ò$§“’xàÁ­êÄ=r„7¢R© "8$„ªÊJŠŠ‹‰‰‰¡{÷îVÁŒ9(øëË/ãèèØàñããâjOÀl…çΣ¨¨ˆ#FX•z¨®®æ–[n!""wwwn¹åìííùùçŸÙ¶m“&Ù®i¨×ë™;w.Û·oÇÅÅ…1cÆàããÃÉ“'Yµj?üð;wîdĈÜsÏ=<ùä“üûßÿ¦°°¯ºá­–V¯^ ÔŽÌhÌèÑ£yõÕWyýõ×1 ¼úªõ-æÏVƒÁÀí·ßÎæÍ›qttäºë®ÃÃÃýû÷³bÅ Ö­[ÇÎ;m†ªkG¨¡°oï^¼¼¼ "7'‡¤S§ÈÌÈàÑÇcÏîÝ>|ÿîÝ âìÙ³Ä=JÎ… <òÿgÕþ©©©lݺW77|¼½éHyYüç?ÿ!éôi.\ØhyŽŸ·n%::___zõ"?/€€¦]=»wíÂd21íúë­Öi‹ÚëûöîeÛ¶m@íÅ:///rrs9yò$qqqÜ1>C‡mÑkÖ2 ýêË/),,ÄÕÕ•à4j5™gϲsçNbãâx衇”_P;±ò±˜´Z-!¡¡¸8;S®ÓQŸÏþýû>bDƒ°þRÇÁ©ÄD"##qss£W` ÅEEdeeñÝÚµÜu×] ©÷|SSRX³f UUUx{{3pÐ ÊËÊHMI!%9™ñãÇ3Ë¢ìDïÞ½ë¾8'sƒÅý+jš/XNŠš’RûE;¬&a+((à“O>¡¬´OOO LUe%ûöî%#=c#sJ4µ-šú^ÜQŸ+-ÑÔÏ„Æ8::2bÄRSSÑët„††âêæ†J¥B­V+32ÒÓIMKC£Ñàáዳ3•UUQZZJ`` ¶¿”–——+ÇžF£iµ ÅÙÙ¹ÕʯˆÖ‘ŸŸ¯\¼ê©§ ´333Y¹r%:î¢Ëµ†cÇŽ±zõêKvþ°<–fÏž­ô®‡ÚŽ#§NâÔ©SVÇßÂ… e䆸*••—SZV†Z­Æ§‘Ï5??_²Îãü…%¬¿{ÿFJéùùÕ^¬?þ‚rÛÜÛfñ߈ÞyïÝGc޹?Šùsç V«ÉÏ/àó/W3wölú÷“ ´­Í\õ¡«ÐvŽŽ¨4¨©ÁhT*®ûÛ߈~çâêÂú¾·ÜÂÄÅ‹¾hžuù”ÉdbÐ÷ß³þ¡‡ÑéõhÔj0€›ÖŽî>Þøù^öv8::âáÞüÜqOä>è¯Ô¨ˆO8uéì.=CÉÛ† ÈÀý‰Ü»_Âú²ÖâãÓôûÎÔøøøPXXØîÛûÔ´4e(‘¯Õ‹Í–œÜ\þ¾äö"tÛoÔ— êÍÌý³/½RûeMûVWe24Ûk0R…‘K¸©¢ãzÖwƒÃ‡ñàþ@h]ïñšš¾[»–S§N±gÏæÍ«ýPÖ¯[ÇŸÿò%tݽ{7<ø ²­f%%%TUU5ùùÇÅÅ¡V«0`€Í¿AÃàñ_ÿú 8_ýUéqY^^μyóíÿÔSO±}ûvfΜÉêÕ«•õL&Ë—/çé§Ÿæž{î!..Fƒ§§'·ÝvëׯgݺuüßÿýŸÕýUVV²nÝ:T*¿ûÝï}Ž£GfôèѼñÆ þö·¿Ù\îí·ßfóæÍ¡ŸUUU<üðì^½š»îº‹'N4Â/ÖŽPLÏ™;—Q£F)ûþ»µkILLä믿¦¼¼œ‡yD *JJJXµr%YYY$&&ZÕ?÷õõå÷<@XX˜UØUVVÆ·ß|Cò™3Ä=ʨѣmsGŽá ¬îù™L&T*DîÙƒÁ`hóÉ8333Ù¾};†û,°êõzèÐ!6ÿô7lPBüæ¾f¡¶·ó·ß~Kaa!“§L!<<\ ª«ªªØ¸q#±'OòË/¿0wî\ 6Ü>ƒ««+=ö®õÎÎggãáé٤דù5ÙÙÙœ?ggç#UÌûÑÝÝÝêBQk…°Wjœõë×+e'L˜`sAk-Óš¢¢¢”P|ùòå6ƒøÌÌL–/_®,wìØ±6 ë#"".Ô_sÍ5J¯yËÛÂÃÃÉÌÌTzØ×§Ó鈈ˆ°¾•¬³ã¯»í¹gP K®kÚyí‹»ìù>ގׯ«âÞA5Ò˜í@W7JÚÁÞ¾ÑN"Îu#®ôzÅ릢v=‰œën·…=røpúý"¾øz ?m©×bܘÑ<ôàïø`å*4vþï¡­> C«ŒâºÚµ´ N{Snî¨íí1UTÔö®7™0TUQQ\Œù”¾ CUºü|ÖΙC~|<ã{ŒË—“sâ»Þx{LUੵ£GÏžø7!¬o ±5ê®O<‰?ùLéq/šÇîâ‡Üå[óíwVA=@Zz: ~ÿ@«lèísæpÿ}÷4ñ%ÓtœË>ßâíõòòRóöìSÓ+]3¶.¬¹˜]‘{;uP4éE^Y ì[—­Þñ5•÷‹âm•ÐiKõ낚]Îdbæe&L˜ÐªuCg̘atØÙÙ1cÆ N:¥„\meâĉJPµÃón˜1ƒØØXeˆ¶¹6tyy9†àà†%ÑÌ=û-999)%-lõŒ.++#33“ÐÐP›¥ âãâÐjµôíûÛU“ÉÄ{ï½§|·,àââÂÇL¿~ý¨©±þ’”••ÅgŸ}F·nÝøþûïñ´:U*‹/fÛ¶mìܹ“]»v1}út ¶ÇüúõëY½zuƒ°~óæÍnU>§9L&ï¼óo¾ù¦dBmÏû>ø€­[·Çþón¹å–ËnG€aÆ)A½yL½î:ɹpÛo¿Ý*¤pwwg̘1ìܹ“”””a½¯Iž\]]¹ù–[Xµr%±±±6Ãz€)S¦(A½¹ýÛÛþýû1™LŒ5ªAyŠ1cÆË™3gøßÜh£\IS^³q±±ä\¸@XXXƒÒ=öööÌ;—3§Os,&†Y³f¡Õj•ò~~~ ‚z€î6z+_Îq0tØ0« Þ¼?¢£¢((( ¨¨Hym;vŒòòr|}}­Âi€^½z1eêTvü÷¿ìÛ·O ¨U*aaaÄÅÅ‘ššª\4H®k“é7ÜP{A'9ù·^øgÎXm%çÂRSRppp`Ö¬YVïKžžžÌ˜1ÃæÅ¾æ´EGkÏ•¦~&´Tzz:¦ºã¿þüSÞÞÞ”––¢×ë).*ÂÇÆ{”““S«õpå–ÁY¿~=Êï[¶lÁd2Yõün­eÚâÜ&""½^N§kØ×ꜜ˜8qb›¶§eI¨Ñ5kÖ,¼½½/z‘àÎ;ïT~ÎÌÌ$??Ÿ­[·’™™Ù¥¯Îêñíµ¡êÊ£vWÂ3//°t»=ßÇÙ)÷ÑQa}Nn.»÷îkÑ}\7yR£“yv:æÑp9—4Ù1g¾Mu‰»­ï¿_Èóæ‘‘I·n^ôª|26Ž_¶ÿ—çž~wJJJxãíwسw555 Пg?ÕhÙ¶ôëžHòêF7Ú’˜hõóú›]Ö×LJiS&wÈ®îjepìœQkµµ5ëëŽ7µV‹ÚâüScoÆÞž÷ÝǹS§Ð»Þy‡cÆpíóϳïÍ7[ßγS»mnnmvTo_ô»tþVoóï¹¹y]&ëŒï§­v»á§¶-™²á§ŸšÖ7Ïá£1è+*Z?଩áøÉX&MœÐö/4‹ :œ\.ýŸ6e2{"÷Y­gKkÏnl˲wÞkÔ·Ê—L®KNtÑõ«&=Emº÷hÇÉ8ýEËà””T+~h˜±]¶õí·ßVÊ1XÚ²eË%×5/Í’%KZm›lM”èãë‹J¥¢´´´MÛc˜žX†!C†°wï^ÒRS•íëÕ«ÉÉɬûþ{®4‰^½z5Ú‹Å~Ýu÷ÝŸ&$`2™¬‚`³üü|rss4hU¸rêÔ)Ο?ÍšåaaaLœ8‘ÈHë Å;vì ¦¦†‘#G’——Gž÷¶°sçN>¬„õ3gΤG8p€¤¤$«/Ä—Sçr™Ÿ—““óçÏoðwWWWæÏŸÏÊ•+Ù½{·UX±v4ëׯáI•åœýlƒu/).¶yŸdddPZRBuM &“I¹H’w‘ÏŽ¡Ã†uø{Vjj*ÃëJÕ7jÔ(Μ9£,ג׬9œ ²ùÞcnë³gÏrþüyññõÅÁÁ””vîØÁð#lÎ!q¹¯§‹m·Z­ÆÇLJòòrJJJ”°>Í¢l]P5j;þû_Î;g5i[ï>}ˆ‹‹#%9Y ëSRRðõõ¥ÿþ899Y…Åæ8½Û!¬OMK«ý|êÛ×fY®ÁC†ðã?b4Z5·-:R{|®4õ3¡¥Ì£cý)[àååUÎZô„´ÔVûåJ-ƒÕà¶X=×ÖZ¦%œœœ”Þ¯:ggg¼½½Y¼x1o¿ývƒÀhÔ/^¼Xé„aÙû½5;f˜'5wÉÌÌD¯×7©7`` gÏžµ ê'L˜ e˜ZÑ##jXS{Þù]]ø~©ÀÞ2¨7ßGGùÛëÿ¼ä÷÷KÙ¹¯Ë|?6—¬¬¬Äh4Úü 2ç8NN¿•t©ËC*Éxô•ÊûCƒï7xù­ÜšÑhä_ï® ÿ5}™Swáöõ7–qàÐ!û¿‡ññö惕Ÿ°øÙçùñ»oíPÑ~ÝÉÇŸ|vÙËÇÅ'ŸxÑeL&×OÒîûº«•ÁÐhµÆÚ‹B*•’‰˜ŒFTßoMF#…ÉÉØ«Õh(×ë)JMÅÑÃUÝz&“ £ÑØ&=o®›«²~¸¢T±eôÈ6×1ßçØ1£»ÄþëŒï§­¶÷o¿í66XL×Ún¿í69£h#~¾¾|´byçú0vrjô غ ÔÓ¿cÞœFßÐÍ÷e2™dg·ƒÉH•©6ª?z¤˜‘£ûèÔj5™gÙ³o‹î¿{î¬í€ãîîÆ‹Ÿå?;v0ïÖ[å…ÖO?ÿé™™¾ €ƒ»;•ª6œ¯ëÉ„ÖÅ}Ý¹Šƒ*µšÑú{ß{r½ž€à`Üq©»wc0™P×}1¨TØ·ó¼—yô‘‡ùpÕ' ûÑ#Gðè#ËÚFï§ ëM4¥”Ìý ¨ÐªNhHÿxõ•©YßܪأGŽ ë\v‹½´¬ÌêÊŒFð!ƒÛå™ûZôÈÓ—ë»Ôþ·¿¾À®È½L›2™Gÿ²Øæ2¶&¾ýqãO†õËþùºrŸ¢åz©8•RÌŸˆÕ1r”£Ç:òéW†‹ö¬?v²\)ƒÓ+H{U¶]G”iÒöYüìããÃ_ž|’¤¤$R’“IOO'55•””výú+÷ß¿Õ$ŠSYYIJJ ½zõ²Y.!¾®n¼­áÍi7sOÙ›nº‰¸x)¶ú¹hÑ"–-[Æš5køÇ?þZ­æÛo¿Å`00þüFƒ£ö@.ÕŽ—Ó^MmËõë×s:)‰¾×\ÃÔ©SñóóÃÑѵZ^¯gÉë¯7ú|Ì]W>±jj{™ïkÒ¤IôºDÊž={*?8gž}–øøxÒRSIOO'>>žøøxvïÞÍC?¬L¼ÙÇAk\úøøàááANNe¥¥J™óŦÞ}úOjj*JÏRË€ûܹsœ9}ºÁ}ê]8ªï²×kæ>lmgΜipa«±^ãù¹Òؤ»MùL¸pá©©©Øi4h,þ †Ë ë[¡QÚ쮯Ô28ááá JÖ•[k™–h,¬7ÿ­~`of+¨‡Ú‹/–ë·&gggžzê)–/_nØ{{{_òIJJjÔ?õÔS­r"¬}XÌ×ìÝ­ß mõÎìØ Þü½¹%ºÚ÷ã>}zsìø N%nÖ—––r.;­VKÅë¹oßÞDîßObÒinœqCƒû//¿Ñ^¤ãèèHï°Ð=vii)™u=B¡6¨=rD»M0kY3êÐÑ£,úÝ}]æEâçëÛêCžÚâ>¯f9ðß]µ=Uwï«`ÑBðóµ£ß@{NÆë ëwî×c>¥2ØI²Ù|_7÷®üi4  ”·ÐétìÚµ‹è¨(6mÚÄS‹_ÖãžJLÄ`0Øì\RRÂÙ³gm–ª0××O«ûÀ·ÅÖßÌ_¸u:wÜqGÓŽï=z4‡f×®]„‡‡·j Ë畞žÞè0^ó耀ºú˜—jǶP^^Îé¤$X°`Aƒà½5F®´5µZ‹«+åee(·­ãߣên›Ghíí<¸i蜜5j”2ß@~~>?ýô©))ìØ±C™¶-ŽóvÔµEƒc¡¬ŒêêjT*Uƒs™°°0bbbHNI!%%EéQ¿…öÉÉÉxÖ=Fý8÷-XЬm¾Ôzæ÷3[“ÈBíE½£)ZÒóò+¯tŠ×„ùuÜØˆ˜ÆÚ«)Ÿ wØ(ïÕ*• { :Îæó„¶í9D®Ü28æçd.Ûb«ÜJk-Ó&LPjâGGG3kÖ,«»~`o~oµÔët:e"\ó}·ÅñR?°ÿøãY²dI£Á»N§ã£>²zNÔ·-[½‡Å ©UGµ[¼ev† þjýŽ;iÂŽ?ÁŽ_w1ùZë¹'"víÁd21nô(«N'Œçó¯¾fמHûã#ØYœÏfddr*é nnn « Ùóñ'Ÿa4xôá†=‰-G—›ê: uD'­K…ëë6l´ ë;ûñ3vÌè.SFÅÙÏ{WWÔ*jµƒÉÄ/>Ê+VpíóÏpúçŸÙõòË„†‡3õ•Wpps#%"‚ pöÈìTªÚÑ*®®8µã|¾¾µAjz†Â?ûâËJ‰ê1£F2mÊdeNÌ„ÄD~Øø‡ŽÀÅÙ™·–þ?__%Ð7ßgWÐßOmŽÕjµÊIpSýù±G™fñ&aìËÊÊÛõ‰éõºöé½SOii)GbŽQmêÒÎA=ÔŽh0÷®ÏÉÍåd|¼œ…‰V3j¤;vŽª0Sdâà‘Ú@ãÉÇ|Ð:C {C8R@N‘‘j“ƒ1#<¤!›ªÔ¯©ÜÔeÌŽ[ô ³ ¬Nž8@Hhè%¿tÞtÓM¨Õj .»¼B|Ý{­úÚ æ¿ÙûõëG÷îÝÉÍÍeÇŽ þžššÊþýûÜ>sæL4 QQQV_Ä/×¢E‹øúë¯9zô('Ož$,,ŒÉ“/ÿjùÅJ4˜Ÿ—¹ÄL}åååüøã\wÝu—ÕŽm¡¼nâS777›=äO4£m›{ì¶è3±î¸>c»ÖâÑ#G¬–k‰kêFj‹‰iöy”™··7×_=ΟoÓã Ä¢lõ,?r´öD¼gÏž ʾ˜'‹=sæ )))(Þ|||pww'ùÌ¥TN{Ô«‡ßÊgNJ²Y§666Öæ±×ܶh¯ã¹¥\]]Q«Õ”––Úl—Ä„„ËÿbÚÌÏMÝEJS#íeîp“ÓHÙ‚¢º‹)ÎNí{ñÿرc<òÈ#Ê¿×_ïÜÃò›bböJ— IDATöìÙ,]º”¥K—6°·Ö2ÍhuAÞÖg¨9°wrrj4¨‡Ú¹h̽ï-ï·ÕœºÀÞÌ\kÿbËë-JJPß>>œYÅÝÅZ†ó1¨¿ZÝzË͸¸¸ðßìÝÿÛg³²øäË/¸÷nërQƒ `èÁœ¿p>ùÔ"/Ò³ô_µõ¥ïºcÞE/þ&žJbóÖŸyèEx{ÿVV1¬î\ãhÌoçÄGê~î*kŠÖar°'`üxë‚z Ÿ’ÂÚY³xM­æ5µšµ³f‘ÃÞý‹7<üðC ¶W}ý2ï½÷wß}7Ÿþyƒû0÷žµù¼þò—¿ðÜsÏ)“nšÛþ‰'ž 77—rÓM7]V;¶OOO4 ùùùJÐj–ÀZv|×».ãØm‰‰'¢R©8rä§-ê9|˜Ó§OcggǸñã[üXC‡ÅÏߟÂÂB~üá›ahö¹sì«;6ÿkóX6ÏàY\¶Õq0|øp\\\ÈÍÍå׈«:++‹È={€Úò>õ™Ã÷“'N ×ëéݧOƒ¿çææ’’’‚í4$ÖßߟÐÐP*++ùå短Bôââbvü÷¿­ÚMy/îHvvva4Ù±c‡Õó‹µ9Ahs>.Å>72©upp0*à|v¶2úŬ ?ŸÒ²2ÔjµÍ9:Ú’¹ Žå?Ѿ,ë¶GEE)½ø-òî»ïòî»ïÚ á£££­Jà´u-xË‘h—Sßr™®0ŠíJQ?°¯O‚úÖ•uî>ò'å_ffme‚¥o-SnûöûuõÎÝyñÙ§xú…—xðòÄâg¸gáäçrÏó5bDƒÇzùùçððpçÛïÖ1Áïx깘w÷}Ä;ÎÁƒXxß½n§ÉdbÙ»+ áŽys­Ï÷¸~êTÖoØÈÇŸ}Î7±tÙ2üü|¹qæ ²“¯&“ -0hþ|°1­Q©P©TM&¥Ì ½Z]Ým†º iíÕj°ì ¢V3àÎ;ÑÒ¾óJL2‰¸øDNÆÇ3dà@‚›pÛ×LJ©“'q2>žø„D«}šàà`\\\¨ªªâÂ… àçç§„½…EE|ÿÝwØÛÛ€‡‡ƒììlòòòprrRzØ·ÕqàààÀÝwßÍš5kصk'Nœ €²òrÒRS1Œ?ž!C‡6X×ÝÝe2îú=ç{÷îMLL ƒÞ½{·kÙ’¹óæñɪU=z”””‚ƒƒ©¬¬$99™À  ´Z-999V#GšÛ—û^Ü„OŸÎ—_|ÁÿàtRÞÞÞŸŸÏ´iÓØµk—ÕòÍùL¸äë28˜äädŽ;FNn.ÎNN¨ÕjÂz÷ÆÝÝz÷îMjZqqqxzzâääDUUUUUØi4ôèÞ½ÝGÑ^©epº’k®¹† &(!ýW_}EffæeîëׯWJé@mù›¶žgÀ²§|ý°Þ|ÑÀ²þ¾···Ò[®+Ú^ý’8fÔ·¾ŠŠ bmŒæJIMS~îß¿a 5}Úuøxwã˯¿!6.žššz‡†2ÞÜF³‹ À^|ýÙ'¬úü <Äÿ¦»¿?snÅ¢÷)#bmùù?Û‰‹ç£Ë­J蘽ôü3¸|à̆M›©¬¬døÐ!,þóã8^æô¢ë3wèê5éZzß~;ñßJ«ÅX×M£R)¡»yD¡Úb]c]h¯Öj1UWÓgþ|&N°ºïöp×í󨹝׬åÕ—^ào}‘¿½¾”ôº2nñõñá™'Ÿàë5kñõñ‘2Ô­ ‘°¾‡¢ºº ­¶ùC/:*°¯®ª¢  Ÿ1íTߪ³õ®®.üñ‘?ðÚ’7HËÈ๿¾Â¢÷2fô(›ëüº'’¯¿Y« w9xäH§ëŸ}éywGG;^ù‹'‹ß¨ý"±ó”¼–ÄÓö"( ¶·\zV9Ë>?Kô‰ªº‰gM¼ü€7.ÎÒ«¾IšwßÍöíÛIINæÄñã˜L&zöì©„õNNN,\´ˆ_#"ÈÊÊ"#£¶Fœ£“Sƒ€hΜ9øùùqäðaÒÒÒÐjµ <˜é7Ü`ÕK×ÞÞžÙ·ÞJjj*ç³³9uêF£wwwFŒÁÄk¯¥G—µýñqq€í27‰‰‰Æ‹–óÐjµüòË/,[¶ŒÕ«W³uëVºuëÆÌ™3Y²d Ë–-³¹žƒƒ›6mbÓ¦M|ùå—:tˆÃ‡ãááA=xà¸í¶ÛèÖ­›Íõ-ZĆ ˜:uªRRãr½òÊ+ 6lØÀ¦M›”Ñï¾û.h46nÜÈ—_~É—_~ɾ}û¨¬¬$00'žx‚çŸÞª/ÖŽmé†3ðõõ%::š³gÏ¢R©èÑ£÷Ü{/}ûömQX?íúë1šLÄÅÆ§ô|¾¥ zªNš<™žDíßOFFgÏžÅÙÙ™!C†0yÊ«É^[ÊËË‹G{ŒCËÙ³g©ªªÂÅÅbUÏ>(0fÌ 55•¼Ü\233±³³ÃÃÃ)S§2aÂå|¢-ƒÐ°0}ì1"##9sú4±±±ØÛÛÂØqã.Zƒ¿wïÞäåå)½¶-…Y„÷aíTÇò|öO>ÊÎ;8•”Dll,Lš4‰©×]Ç[o¾ €‹‹K‹Û¢)ïÅ-44”E¿ÿ½²­eeeôèу›o¹…€ž=„õ­ù™`Ö³gOÆÏ™ädrsr0Õ?÷èÙS™o (8wÎ;‡N§£B¯ÇÁÁOOOüüüp’‘•W­E‹qöìY¥|DDÇgÖ¬YÖžŽŽfëÖ­Ê…E¨ío.}×–,Gø™{ú'%%±uëVåoýúõcÖ¬Y\sÍ5Véž:uªKNZÜ•Õì%¨o½ÃÂø_ä®f­;|èPVüë­&­ÓÝߟW_|¡É5ëæ™uóç...üõ¹gùësÏÊNm&g''tu&srsLÜT9¹¹ÊϾ>íX7]­æú%¯S’’BæÁƒh´ZL55M&T**~ë)¯R©0ƺõ*;; ÕÕô3†i¯ÿµ Cíá™'ŸàÙ—^Q:ûþë%¬Û°‘_þ³]ÙG–ûmÚ”)Ü1o_òOrrsùÛ__èrÇຠùqãO-º;æÍiÕ‹*½®Ü渊˜˜zØòáÊ+>øP ì¡¶Ò;ËÞl³†ÎÌÌà\V#l jm1¨·ôëžH>þä3«Ûü|}8 ¾uo‚¹¹¹:|Ôª&À3y¢C'ô˜ßo=Yøök›·[jlËÛ¯fÊÕ\“ £ÑˆÉdâtü FŽoþ¬Õ«7¤ñÞw¥uSê˜pvR1¤om<©Š2½I™pç¾]yþ¡>Í~¬£ö6y[yä‘Vi»U«VuÙýn4yåå—Ñh4üýµ×Úý±ßøç?±··çégžið÷o¿ù†„„?ýt«ôj¾R]ª…¢érssYñî»tëÖí²'ËW-[¶°uëÖÚ fÖ¬f÷¦o­ûi­ó¢+‰N§cõêÕVålÌúõë§\ÌÑëõ6Ëá >œ… ¶K=xËÞüÇot›,·Ýü¼ÂÃÛU¦çè½ô8UÝd‡æÞ™1éeWµ¶.¬¿÷"¥q®F ‰§пŸ4D;¶7Ð*mnH¶v°Øo¾ýŽR)ÁÏ×·Ñ*ñ ÄÅ'2ÿö¹½¿=‘û”À~ôÈ<·øÉö \@¥¢4=ƒí?NêÎ5ÔÔö¨7ó`Ò«ÕµÁ@è´iÜðþûx„…*÷ÕÌbHP¿»ÿ^†Ôu¬;Onnzž à@Bƒ‚quuád|<_¯YKNn. ï¿ï’7ǹìlz6±cHS4–16UkfŽEöóó#û\v«„õ¶zØoùùfßrs›4tö¹ìVí%w1ÇOÆvÚ jg÷õõáãUŸ‘[ד$'7×êjc}æa,iBˆõ7qç¼¹—ý!$ÚÇÂÛCÐÚ§ñϯŠ0U:‘Çk”žô&àÕ»qÏÍ!Ò`W½NǸñãéÞ½»Í¿"A} ÛQÈq l«©©¡¸¸¸AÙ‰¢¢"6ÔMâW ësrsùaæ‹.©¿×¿ïvSWîÆ-8ˆ9ß­åÀ›ortå*teeh´Z4F#ƺyèÔj5*Cu5ή®Œü¿GûÌ3Ø»¹aªë‰ßQ®Ÿ:…Ðà –½ó¯-yƒAû3uòdB‚Rħ¦¥qèèQöìÝK\|"¾>>üí¯/tÙIeï˜7§UzÖ·¦FÃú€€Ñët8µBƒú}[ GÑétäçç1|ø°vݹ1¨72p o-ù?o߮Ա·Å×LJ©S&uš+¬–á~ذé’oʶ®†µë°§«õDvvc‡ñ‡O®V"z0´·ÿücýB=;dÛ,k~¶ä>D󸸺Þèß'O™"Ô í(ä8¶Uèõ¼³|¹2!¯££#EEEdffRSSCpp°ÍIs…°ìm——Ç‹/¾Øâûô‘sÒ61{ölÂÃÕR8…Û 6ŒðððvéMo©±sÑ &( ¶lÙbs²Ü‚‚ÙÉmäÍh-oE·¬<糪ynBµ4¦è,³‘Δ“„†„ðÌ_žàÃUŸ6(µÒìÏq''}ä¡vU*&£;&¾ö¡7ÞÈî—_&ïÈQÊ eÞƒ£•ŠncÇ0å•W¸þzì¨í¯²˜¤¶#÷ÉG+–³nÃFöDîã£UŸ6zLu¦QÍu×íó:Ýs¸è,_ÁÁ!$$&2räÈVy°??ö(ãÆŒÁÙÅ™¡©}Ú‰‰‰·ß rôÈdË& g;íÁçêꢀ©ii¤¦g(¡}hP¾¾>î*ØÍ7ÍlñÕ-™…º}ô ö䇷<9—SÎÎCù˜€c}èáëܡ۵xñb¢¢¢Zt'N”,„]ƒ£#“&O&99™´´4*++ÑjµôèуÁC†0nܸvðVt&L`Ë–-­6¹§““Æ “†m#æ‰gÏžM~~>ùùùèêÊ{:;;ãííÝ¡/tõJšCzËmZ´h³gÏnÚ›ËXŠÖ×Ò Þ|Ö‹®Â²[¶l!??Ÿððp†Þ¬ãCjÖ_œô¬o©Yßþí H›wQæ’6•@Ej‡V¬`Ô£âÒ·ö€Ñ`è° e»Š¶®Yß]4¬HOO'// ¯íÜOØ¿?¾¾>ËÑ,„ óÿÖ !„Bt]r^$.u|HX/„âJp5†õ—cŒÁ` 55¥S?‘”ÔŒFƒõB!„B!„B!ºœË*ˆ4dÈ(..î”O¢¸¸ˆÄ„† "{T!„B!„B!D—sYa½““ƒæàÁÿQ]UÕ©ž@uUdðàÁ899Éâ %C½…B!ä¼H!„âJvÙS ûûûÓ§wo¢¢öwšÀ¾ºªŠ¨¨ýôéÝÙ›B!„B!„B!º$uSÀÕÕ•¨¨(ª«;6°¯®®"** WWWdO q –J™vpt¢´¸HG!„Bˆ+@a~ŽNžÿ !„¢sS7u…!C†ÈžÝ{(î ¯¸¸ˆ=»÷(uê…h&•J…‡W7Ο;+!„B!Ä 'û,Ý||%œB!º(usV  _¿kˆÚ¿ŸÔ””vÝàÔ”¢öï§_¿k¤G½-äáåMUeYiÒB!„BtaYiÔÔÔàêî)!„BtQ*½®ÜÔÜ•õz='OžD£Ñ0pÐ`<<<ÚlC‹‹‹‰‹Å`00dÈ™LVˆf0™LÊÿ&“ £ÑˆÑhàlZ vvvô쌛§—4”B!„]DiQ!çΦSSSC¯0Ôj jµ•J¥ô°—žöB!º¢sÙÙôìÑãªzÎ- ëÍÒÓÓ9sæ þÝ{п_?œ]\Zmuåå$ž:Å…óÙôéÓ‡àà`9R…hsP_ÿ_YI1…ù¹TV襑„B!„è"ðòöÅÕÝC èëÿB!º" ë[ ººšôô ÒÓÓðñõ¥GøûwG«Õ6ë¾.œ?Oöùlòrs !88¨Y÷%„°V¿w}ý–Ë!„B!:ñz‹žó…ôÖ !„èª$¬o%YYYäää““‹7ݼ½qqqÁÁÁoŸÚ“• êÂÁ¼ü<*++)//§ ?Ÿ¼¼|üü|éÙ³'þþþrd ÑÊêóõÚ !„BÑ ¿È[ð¶{Ëß…Bˆ®JÂú6PPP@AA!¥¥%TWWSXXØ`///´Z-nnîtëæE·nÝäh¢ Õæû_!„Bщ¿Ð×ë=ߨÿB!DW$a½âªa«½ôªB!„¢‹|™o¤w½­¿ !„¢k°“&âê>¹7™L6Oäåä^!„Bˆ®un/çñB!D×&a½rb4Ú !„B!ºÎy½B!º. ë…6Oî¥ ŽB!„]çü]!„]Ÿ„õB9ùB!„B!„¢ƒÙÅ?"­ „W0''*õzi!„¸‚¹¸ºS^V" !„W0GG'**ä¼^!®d*“ÔºB!„B!„B!ZUüñ#ô ¹ìåÕÒdB!„B!„B!DÇ’°^!„B!„B!„è`2Á¬B!„B!„BцL&EÅÅ”éÊÁ®..xzx R©”e$¬B!„B!„B!ÚPQq1E%%¿ý^R‚IÝ<<•Û¤ ŽB!„B!„BцÊtå n+/·¾MÂz!„B!„B!„¢ ÕÔ.y›„õB!„B!„B!D“°^!„B!„B!„è`2Á쪴´”’’***¨¨¨B!„è@ŽŽŽ8::âî››4ˆBqØ­#2ZÇé”*ΤTIƒÑú„ÙÓ7Ìž)œ™<Á¹Ëm¿„õW˜òòr²²²Ðjµ¸»»ãíí£££4ŒB!Dª¨¨ ¼¼œ¼¼<²³³ ÀÅÅEF!„¸=QÁÒåyt÷·cÊgî¼Í¾½í¥a„h§“«ˆ9YÁºŸJX±ª€ŸòaäЮ“ªL&“Ivã•!77—¼¼<‚‚‚äËŸB!D'U^^NFF~~~x{{Kƒ!„W/¾-bݦbþùŠ— …¸=QÁ ¯]àÁ^Ü9ǽC¶!þøz†š‘as™Ð  åg©Y…ÈÏϧ¤¤„~ýúIP/„Bщ¹¸¸Ð¯_?ŠŠŠÈÏÏ—B!®ë*!2JÇ_JP/D'0r¨#?~È/;ÊXÿSI—Øf ë¯åååäääŠZ-»T!„¢ÓŸ„«Õ„††’““Cyy¹4ˆBÑÅ=QÁçßòþ›Ýqs•lFˆÎÂÍUÍûovçóo 9z¢óÏëÙª5ëM&WKU•JeõGÊÊÊ"((H‚z!„Bˆ.D­VDVV×\s4ˆBÑ…-]žÇ?_ñ— ^ˆNÈÍUÍ?_ñgéò<~üªW§ÞÖV ëM&*•Jù'ÚOii)Z­VJß!„BtA...h4JKKqss“B!º ÈhÝýí¤ôØÈ¡Ž¸º¨‰ŒÖ1e‚s§ÝÎV ëÍ}ii)éééèõz¥—÷•ÔÓÞü;}û¸páBƒuU*7Ýt£Gnp;Ô톢¢">ûì3œy衇Ðh4FÖ¬YCZZšÍmsvvæøÞÞÞÔÔÔ ÕjÙºu«òåM\ù6lØ€N§càÀŒ5JD!„èâ6nÜÈÒ¥K)--½ìuJKKyÿý÷ùꫯxñÅ™7ož4¤B!„¢Íµ[Xoäï¸ã.\xÑeãââxï½÷øì³Ï0ÊíÏ<ó ÿøÇ?°··¿èúùùùlÚ´ NÇc=†¿¿¿ò·‚‚>üðC›=÷ȲeˬîßÔ7ÖÓÿJQQQARRYYY”––·n| IDATR]]V«ÅËË‹^½zÑ·o_ìììä#„Bˆ.ãƒ>hЛ¾ÿþÌ;—0`ÀÜÝÝ)))!!!„„6mÚDbb"PÚ¿ð œ;wŽÇ{LT!D›1 LŸ>€ ðàƒvéçsøðaþþ÷¿À»ï¾‹£££ìä6”}¡†Í¿”ràˆž 95è+Œ¸»ièfÏä ÎÜ|ƒ+öZ•4”]@»¥¯æ »¢¢ƒÁ€Ñh´êo¦V«4hü1ݺuã7Þ ,,Œ?ÿùÏØÛÛS]]Z­¶ òM&“ÒK¿¤¤;;;rrrˆŒŒdÞ¼yJøüðC«Ç4ñcÇŽÅÎÎŽªª*ìììHJJâÈ‘#WüA••ž}û¨ªª²º½²²’óçÏsþüy¹îºëðòò’WB!:½÷ߟ>ø@ù½gÏž¼ôÒKJbÉÝÝqãÆ1nÜ8-ZÄÎ;Y²d çÎSîËd2ñøãKà !„—aß¾}”••qêÔ)RRR8p 4JYÿS +¿,¤ªÚºƒiA¡ÿÑó¿#zÖm*æÍWý ê¥í2ÏëPL'â* ±gÚ$gÙÙWƒ¾ú®HùýöÙîxz¨¥a,´[k˜ƒyµZF£A£Ñ V«±³³C«Õ*ÿ4 ÕÕÕ¨T*^~ùefÏž­|ÁrssSJÝh4«õìííqppÀÞÞwww´ÚÚ7 ƒ*Ëk4FŽI·nݬ¶ÍÜ?^ÙN•JÅÉ“'ÉÉɱZæJ“ŸŸÏîÝ»©ªªÂÁÁ#F0sæLf͚Ō3âOú,]º”éӧˤ³B!Ä% 0€O?ýT¢ Å%Vòé×…ÊïcF8òÌã>ôì^õ™L­cÉÛ¹èô&ró |øy]ì#'D'ÖáaýúõëùᇔÛvíÚÅÊ•+qttÄd21jÔ(|||” iÍ륥¥ñÚk¯5(ÝR_||<ÉÉÉ :”êêj\\\=z4‘‘‘J?`ÀBCC•žûeee>|øŠÞùF£Q™È788¸APoÖ­[7úôééS§HOOgܸqR¿^!„ÒêÕ«•Éd{öì©”Tl®7ÞxƒÛn»sçÎQZZÊêÕ«¥ŽB!:Ügk 1÷+í¢åÍWý±·ÿ­.½JS':s!Ç‹÷>)`û¯eüñ/¼½4Ò€BtRš¸šL&´Z-*• ;;;ª««Ù¼y3O=õÆ Ãd2áææ†··wƒ÷jµGGG¥dNý25æßóòòˆ‰‰aÈ!J]û±cÇ¢Ñh”^ó£GÆÍÍêêjìììHMM%>>àŠíUo4•çæêêzÑe»wïNZZ:®A²ÊÊJ%Ì/++C£ÑàááAïÞ½éÝ»·²ïê+..&!!ììlt:jµ777‚‚‚0`€RÎÈÒ† Ðét 6Œ€€bbbÈÍÍ¥¦¦†ûï¿ßjÙ¢¢"âãã¹páz½µZ——¡¡¡ôéÓGÙÿ¶ÔÔÔOZZšòœ|}}2d¾¾¾òî!„Bt2%%%Våo^zé¥÷‚www祗^âÑGj/,\¸Pz× !„èt Y·nÑÑÑ\¸pµZM@@“&Mbþüù8;7^ó»¼¼œo¾ù†½{÷’““ƒ³³3ƒæÞ{ïÅÞÞž‡z€-[¶\2?øñÇùðÃعs'Mm8œ••Å‚ øôÓOqsscÍš5/« ÞÒœ[Ü”šö&DÔ3kfí>¼óÁ³œË®`åÛ=8“ZÅúM%œÍ®æ†ë\xùiëì#2ZÇ¿ÿSJBR%å:#^ž†täÎ9î êï`óñM&ˆˆ,ç?;Ë8u¦’ÒR#ÎÎjú„Úsó ®ÜîŠed4çþLòò­K£üYί‘µ¥p¾þ(€°ë¬ètrßo*æè‰ ‹ ¸8«¹¦·=7ßàÆ ×¹4¹}›ºÍ–ªªLlØZÊî}ådœ­F_aÄÛKÈ¡NÜ=Ï>¡ö>î¯{ËùeGIÉU—psUÓ¿¯snvcÒøÆ_¿Çc+Ù¸µ„ñµÏßÙIMH–éS]¹õF7lõ·yG:åºÚìô%Ý3Âzè]ût¼¼´¶4¸¿Ÿ† _ÚÜGk? @§3ñÍE;YAY¹_o;¦MraÑ=ž8;×6Ô–m¥¼ù^~ƒí¸ï‘,¦^ëÌ’—ä5 g}í‹À¤„ëjµšêêj«Ûê/c¹¾ùŸ­e̽棣£Y¸p¡RÞfèСøùù‘Á`@¥R1nÜ8«õ9B~~þ•½óíìptt¤¢¢‚¬¬,†Úh¨DPPÍ¿°{÷nÊË«!VSSCNN999œ={–)S¦4ÆÓÒÒˆŠŠRJAí„ÂÂB INNfÆŒ¸¸Ø~cÍÏÏ'66¶A‰$³””¢££­.¶ e»ÒÓÓ™6mšÍQüòË/[­›••Evv6×]wò"„Bt"T~îß¿ÿeר¿”éÓ§Ó¿)--åàÁƒ­vßB!Dkˆå…^ ¬¬Ìêö3gÎpæÌ~þùgÞzë-BBB¬›——ÇOˆüüülÖ«7?Ö•:¹,@Ÿ>}ˆU&š;vl£á¸-z½žˆˆ***pwwÿöîç~Ž-Z¤Q£F)›ÍjãÆzíµ×ôÖ[oiÕªUš;wn´ÜÞ½{õûßÿ^A¨©©I .Ôðáãå^yåutthéÒ¥ºè¢‹ªn{Ë–-rGS¦Lш#*ŽÓÞ½{£ ¾±±Q .Tcc£²Ù¬6lØ 5kÖhûöíZºtiÕü6lëºZ°`&L˜¾Ù´´è•W^‘ïûZ¶l™Æ×gç8þ{ì±èûk®¹¦_×}Í5×èÎ;CX,vìØ¡[o½UjjjÒ 7Ü ùóç+=ÿüóºûk×.}þóŸ×w¿û]Õ××W,ÿÕ¯~5ÊGÞóž÷è²Ë.S2™Ô† tï½÷êW¿úÕ1ÙïoûÛjjjÒŸþéŸjîܹêèèÐÃ?¬G}Tû÷ï×=÷Ü£Ïþóà*6l*…Á“ÆÇ†~öÆ‘]gyP/INY¶ûµÚ]ÔϘר®ÖoÊj×îpå?ÿû^½í”-˜Saÿwÿº' ½]Gzǹ)Ó†MÙèñe/¦u÷÷ëÆë‡K’>õÑáêêôû¥]ZþrØ)qÊô¸Þ}qpQÚ±‡~Ý®oÝ]ªÛ?¦ÙÓÔÉ1mߑׯÍa=ñt§N™×Ç>0ìÚöHöY’‚@ºõ¯wDA½ëHóç&”¨1Z½6£ý­|_úÛoìÖä 1Í/k§o}woEP?cZ\cšúÙ”)S´xñbÝ|óÍÚ¸qc¿ïwss³¾ùÍojÔ¨QEq ÜÒ¥K9¸}hk/U(hÖ#¦/>¿VᄂN õŽ’É0¿Y¶¢[¿y2¬¤`ŒtûmÍúƒóÂ’,ù¼ô7¿K?þü;÷îÓ7î Ï¿=û|ýú‰ÒwüÕh½}qé€ïÿx¿¾sï~IÒ/Ó®?ù£árE%zöìó£°~âø˜®½º2iï¢Zü’tíÕ ú̧FD#èï¨]ÿøí°bƽÿ½_ï{Oƒ’‰wjé>Ká|«×†ójÖÕ:úößÕÔIaÝÕeõ…¿Ù¡^J+¤ïýh¿þáo¼ikK^÷ý¼-ÚÆ?ߤK/ ÑZ+ýû÷÷é‡÷…ü=?Ù¯÷_Ý xÌhÏ>_ÿqO)ôþÀ5 úÌõ#¢ýyñÕ´>÷—;”ÍY­Y—ÕÏ~ÙÖ« ûðGûåÑQ¤öŽ@Ÿù³–¨CéÙeÝzï• š:9¦©“cÊf+Ãúw]\§É êË9Cq§­µš5k–~øÃêþûï×}÷ݧŸüä'Z´hQáÍ£òâëìì¬ß­µZ¼xqô¼Å‹+GåTV®\©uëÖ'€çyºè¢‹´hÑ"yž§ ´iÓ&ýîw¿Ó}÷ݧ§Ÿ~:š„¶§L&Õ±_°`AÔWûÃ6“ÉT¬ç”SNÑ\ óÏ?¿j‡À¸qã¢ãU^^§Ü”)SªõѨ€¹sçV úçÌ™ulß¾½×ϧNZÔ;¶â¼ƒÇêÕ«{ýÒ_Ê×W¾ÒÞ½{õôÓOK’®¸âŠª#Ïœ9S—_~¹$é‘GQ&“‰~VÄ‹Åôþ÷¿¿×²µµµzßûÞwLöý“ŸüdEP_tæ™gJ Kâär9rÝéÒÀÒþ*1rÅ¥uúÊ­M:ûŒ¤æ¼­& šï/Œœ–¤?¼´. ê%Éó¤ÿó'#U˜’@+^NkkXåÂÒŸ~r¸n¼~¸n¾aDEè-Iᄌ4h²­=ÐÞ}þaíï#wDí0iBLŸ¹~DE©›÷^Y¯ÓÂ<¨«Ûö*kSÍÑìó/~]j§%WÔGí'I©”Ñç>S:×W¼Ò-¿P6æáß”JÈÌŸSõRØ9rÃuÃ5º)là®.«UkÂ_>Ú¡l.|ý£›\ÝXÔKÒ¢ù -¹²´¿÷?ÔvLÎÅO_7¼b¾‚ú:Gïyw©S`k ×ðáò†âN[k+yk­‚ ¨: ¾XÆæ™gžÑM7Ý$×ueŒÑÂ… 5nÜ8mݺUgŸ}vâcô /ôªóv"sGóæÍÓÌ™3µvíZmܸQûöíS>Ÿ×¦M›´iÓ&?^gŸ}vÅ„4;vìˆJ õU¿½¡¡A555Êd2Ú³gOv¬î\ùIJ}Mð[­s@RÅÝ}í—뺺ôÒK•Ïç{ª—ÂþÕ$“¥7j~i`pioo¯ø¤?•¯¯|; ¤—_~9ú›ù@µå/¾øb=ôÐCJ§ÓZµj•.\(©Ô}ÆgôùÙÙsþ¹cñÙZnäÈRÉ–îîîŠ|Ç΋z×½·¶²>þEïè]6¹q˜£)cZ_I½f]F‹OOjÔHW~oeé™\Nêì ”ÍYer•YOWw éÐïXñri¿.87u”[8/¡uÂp{ÍÚŒ.g³V¯¯)u‚U› vâxO7}j„rù0»Ìç¬ÜSѾç-ëH7Ý0R[¶…í;¼1¼—¿\ê|¸ì¢ºª5ùÿðÒzý×ÏÂ~kK^;vùQðß_†7ö^_ó¨Òc]]–‹ë0yCuÇ{–Çq]7¡]^g¾øýK/½¤;vh̘1 ‚@'NÔܹsÕÝÝ­… Ê#×ue­=iêÕ÷Ç5wî\Í;W­­­zóÍ7µ~ýzutthëÖ­zøá‡õ®w½+ ·ËG–?ðÀ]yï}ÑŽ;´aÃíܹS]]]ÊçóGý:Šûå8Îëï755ÑyWúÐâ €Á¤®®.pÑÖÖÖ¯}[[ t¶mÛý­Z¼C½šéÓ§W,S ëwïÞ-©ò.òÆßÝ—(+ç’Í»6jkÔÑY ¨?û—;ºÌÞý•#äwìôõ“[õÌó]ÚÚ’W_‡ôpõÖí¥”÷þw«îýïÖÃÚ¯9Ü}޵Ǘ_¶ú¾ê¯pIïßM[væº\µN†òëS'Ç«.7iBL®£hÿ¶í¹~ë«qœÒùp ¶!Öc´sçN=õÔSÊårr]Wù|^[¶léõf^ìaÞ´i“V®\©Ñ£GË÷}Åb1-Z´HétZãÇ—µV®ëjÛ¶mzñÅOúcذaZ°`æÍ›§Õ«WkùòåJ§ÓZºti4¡Zµðý@ü²w® ôì³ÏjÆ … 9 Öc±˜Œ1ÊårGüGq1ð§÷€“ËìÙ³µlÙ2Iáü8‹/î·u¯Zµ*ú¾x{>­»;]ÛÐÐpÀ¿Ëï’/¯$P\~øðá4æÒPWF½¿Õ?fÛéì {™L¦”É=»¬[yÇΊÇjßuŽdŸ»Ó•ûR_wèw£¤ËJÎrå#Ö«n—ÂQù ŽöíŽøxâøôa}±zd'ua=ý1J ãÇ?fa}qþ£âv Š¥ZÛÚÚ”Ïç«Î '…õß‹Êï@O&“Êf³jmm¥1‡ò‘ÔomÍ+›³ŠÇú®]ÿÝÿܯ–íaFrΙI]t~í!m§g=üë>8L#†xdö©sÃ’Åû[}ù®RèýÎ?¨Õ‡Þ;LÆÅ”Juu[]úÞ7¸ Ê÷í¢ókuêÜš>âøƒè<Ò}N&*CööŽ@ õ‡¼'Fí¥åU*UZ®¯› ïŽ(]ûÏ0hÃúž!}ù¿‹µåãñxÅèî¾Âõb9›¥K—F¡¼$}öÙš;w®¬µrGÆ-]ºT™Læ¤(óÜsÏióæÍJ¥RºâŠ+øÜ±cÇF£àÛÛÛ•L&£_ |ßW:V]]Ý!o{íÚµ’‰nfÍšÕ¯¯«ø‹‡ïûQÇ8ñ½óïÔƒ>(),Ñ÷‰O|¢ßÖýøãGß÷g'G£X¾ÆZ«––Mœ8±êóŠ•Ê—‘Âò°­­­jii¡1‡Sç•æðËæ¬–¿”Ö9gVÏ>²Y«{ÿ{¿ŠÓîÍ›SsÈÛiæÊó¤âXÈÓjZ÷½èég;ÕYý=uRL_ü|“Œé¿6héi˶pǽ÷Ê£/x¤û×ÔÍšY:¿¾«×sÚ;ýá7늅_¹Bø¾°¬ã¥Úr’t㟵DË'Ö=­ìõÿú‰Žªyû¯o¾7ÆÓèæÒ]©déÅíkíýº:»ŽQÉœmJ?AoÖc”Éd²Ù¬‚ ÐäÉ“5nܸ(°Ïd2joo—ã8#ë}ßW{{»|ßW>Ÿ—ïû ‚ úª<ðár›7oÖ«¯¾Ò/~;ÊëÕŸ %p¦Nul<ûì³}~çr9­Y³¦ðT£ÆÆFIaM¼b`¿råʪ5æ­µzþùçµtéÒè¸;X¤êaz&“ÑŠ+z¿CUWW§1cÆH Ëíär½{7nܨ½{÷ª££#z=`hkhh¨MÇwõİmmmºãŽ;¢/Y²¤_'®àhŒ9RoûÛ%I=ôP4al¹ 6è·¿ý­$é]ïz—‰RÈWì€Îf³ºÿþû{-ÛÙÙ©û„®ÿhižW^Ïèoþ~W¯Àúég»ôÿß³/ú÷;ÿ VÍ£o‚Ñ%e#ÖW¼’Öw~¸?A.…#û¿u÷>}êÿÛ¦.…ÃÃêKÛyñÕnm/›Huk ¯üí®n·¦¦”ê¾ùV¶W¨{åeõ*V}jktûßíŠFÅýæÉNýñçZô7¿«bŸûr4û|åe¥Á¨?{¨M›·–²¨lÖêëÿº'z óf×D¯ïÝ﬋:^~-£ßýoe`ÿß¶i݆°#$7š?'¼~¯({ýÛZòúνû*ÚhåêŒî{°ô{ð5WTþþ:iBi”ýƒ·©«»´ðšuY}çûŽÉyóLE'ȦÍ9.æ´ ޵V3fÌмyó‹Å4vìXýùŸÿ¹Æ§|>/Çq´iÓ&mß¾]'NŒB[cŒtÖYg©££CžçUÁ™LFëÖ­S6›íµ½gŸ}VW\qEÅìâAÈq½ôÒKÚºuëIõíé§Ÿ®eË–©¥¥E>ø fΜ©¦¦&¥R)e2íÝ»W¯¿þz4ò~Á‚w.œyæ™zä‘G”Ïçõè£jáÂ…7nœÇÑþýûµråJµ´´Èó<Í™3Gõõõ2Æhâĉڴi“¶nݪ§Ÿ~ZÓ¦M“çyÚ³gV­Z¼—"[I:í´ÓôÈ#¨­­M¿ùÍotê©§jøðáÊårÑdÃ’4eÊ1¢_ÚsõêÕZ±b…š››uÑEU´Ó~¶k×.=ù䓊ÅbºôÒK+ê€ÃsÝu×éûßÿ¾:::´uëVÝvÛmúæ7¿yÄë»í¶Û¢ßëêêtóÍ7ÓÈ€cª½½ý ÙD*•Š&…ýÌg>£åË—«½½]7ß|³n¸áÍŸ?_ÖZ½ð úÿøù¾¯#Fèú믯XÏüùóuöÙgë¹çžÓ=÷Ü£ööv]rÉ%J&“Z»v­î½÷^mÞ¼™ƒ2¶ ¡¾˜~x_8ßÀožìÔoÿ§S“'ƵìÈW„÷Í£\Ý|Ãáçðö”Î=+©gž'#þþöë‘ÇÚ5kf2«×VeÔQ˜¸ôÇ÷·êßY§xÜèüsRúö÷öÊ÷¥Î.«ÿéV-œŸïK/¿–VºÇ®åa±$MžX “×oÊéÚOnѰG·üñH-˜S£¦Q®>}Ýp}ëî0T~î…n-ùøf:/!Ï5zc}6 ÛŸüßAªé IDATN}äýš>åÀuëfŸß}I~úP¬·µá²óJ&½¾:£=û Ž#ýñ'J-“ÆÇ´äŠzÝÿPØÑñ—wìÔì™qnö´is®"Ìþø†©6晣FºúÔdžëß¾¾þ{þ«U¿ýŸN͘×þÖ@¯¬LGw̘×ûz” :ÿÜZ-{1¥ÿÊë½ïoé”iqíoõµ~Ó± Ð mñu}åë;õ£ûk4aœ§/~¾‰ [ƒ ¬¿í¶Ûôÿïÿ•1FŠÅbQ)Çqtß}÷É÷ýŠIR¬µš;w®~ñ‹_TŒº‚@žçiëÖ­ºæšk´aƨäMñ¿Ï=÷œ²Ù¬<Ï‹O–°^ýÑ”_ŠfÍš¥x<®^xAÝÝÝzùå—«>ÏqÍŸ?¿W}ùáÇë /ÔSO=¥t:­çž{®×²555ºà‚ *JÞœqÆÚ½{·:::´iÓ&mÚ´©×~o7ooo?ì×5räHsÎ9zî¹ç´wï^=ù䓽ž3aÂsÎ9ýÖ–ëׯ—ïûjiiQGGGŨ»ýìÍ7ßT&“Q&“ѶmÛtÊ)§ðÎÀjhhÐ_üÅ_è¶Ûn“–°ùÌg>£;ï¼ó°FÄ·µµé¶Ûn«(¥s×]w1ªpÌýüç?×Ïþó>ç²Ë.Ó­·Þ*I3fŒîºë.}á _ÐöíÛuûí·÷zþˆ#ôõ¯½êçØ­·Þª[n¹E›7oÖý÷ß_1ÂÞ£3Ï<3šÀƒËŸüÑpÅbF?ø¯p´»ïKª­S&Åtç_>èä°Õ#}ùÏ›õ¥¯íÔ³ËÂÀ~Ç._;vUŽŸ6%ÜFqâ×qc=Ýòé‘úÇo‡“wuÛ(ð—Â΃öŽ@Ýé0×Û³//©Tçýíg¥4ºÙê²·ìÈ«e‡¢É_%éÃ瑩n«ïÿh¿¤0`/߆$Õ×9úòŸ74¨?Ú}v]é®/Ö-·¶hkK^ù¼ôÂKéŠõÇcF·þŸQZ4?QñøMŸ©í;óúýÒp[«ÞÈjÕ•ß{eƒ®û`eeˆ¾˜öí÷õ“Âô[¶å£:þES'Åôw=Z±/ÿŠKëõ›';ôêëáÙ¶ö@Ë_.íï¬Sâ½Jõ—%W4è¾¶q.'½¾&#×åz.:na}y ›b©šâù⇅µV¹\NŽã(‹éñÇ×÷¾÷½ð‚ëìŒJÝXk‹Å4jÔ¨ªÛJ§ÓQ™•bH_Üþòå˵|ùrsÎ9ÊårQÍüÖÖV=öØcËœ,¦M›¦ &hýúõÚ²e‹Z[[•Édä8Žêëë5zôhÍœ9SÆ «ºüرcõž÷¼G¯¿þº¶mÛÕ¹«««Óøñã5kÖ,¥R•5ђɤ.¿ür½öÚkzë­·ÔÙÙ©X,¦ææfÍ;W£FRgg§r¹Ü×Ç›>}ºFŒ¡U«ViÇŽêêê’ëº1b„f̘¡©S§VÜaÑíØÖÖ¦¦¦¦^“íèg“&MÒÆ£»KÀQþ°d‰¶nݪýוö«V­Ò¾ð…Cª7ÿøãëŽ;îè5ªññǧ^=`Pš?¾~ðƒè'?ù‰ž}öYíØ±CÆ7Nçwž®½öÚ>ïâ6l˜þíßþM?üáõ»ßýN;wîTmm­æÏŸ¯øÃÚ´iSÖ÷çßÐè×´Q_«nײ»µkw^yßjX½«·×çÖêÒ ëäE˜J}ý+£õÔ3]zäñ­Z“Qk»¯ºZGãÇÆô®‹ëtù%u¥k$é½WÖkꤘ~t«^[•Qw:ÐèfOœ“ÒGÞߨ/ßµ3 ´W¼œÖy‹KÙQMÑ·ÿnœþýû{õ‹iµ¶ûÝäiø°ÊŠÞŸúh£Î?'¥ûjÓ‹¯¤µ{¯XLÝìé¼Å)-¹²A£Fz|4û<ºÉÕ=߯Ÿþ¢MOý¾SomÍ«;hÔHWg–Ò‡ÞÛ Iã{wÄbÒ×¾8Z?Õ©_ÿ¶Co¬Ï¨­=P}£y³zßU :ca¢êþÞ|ýãì”~öp»^Y™ÖþV_É„£ÉcºèµºæzõÅmþócôŸ?mÕc¿ëÔ¶í9ÅcFÓ§ÆuÅ¥õš=³F¿ñØTYrE½jSŽ~ü³VmÞRÚ.BÆa*],óüóÏë¼óΫZ¼bC…üî»ïÖ'?ùɃ®ÿá‡ÖM7ݸN¥Rúñ¬«®ºê Ë¶´´è‚ .ÐÚµk£IkË÷᪫®Ò~ô£ŠªÛo¿]_üâ(¨Çãzúé§uÖYgEír¼¬\¹RsçÎåLèá_þå_¢À¾hÖ¬YZ²d‰fÏž­Y³f©¡¡AmmmZ½zµžþy=öØcÑÝ}Õ\sÍ5úÚ×¾Æït€“Æ}÷ݧo}ë[’¤ßþö·Ç5ó*λ|“þ÷WSh€ëµ—×_^®qÃím죬ØÔI“¢ïûÈú-[¶hݺuêîîŽÞà‹åhº»»µfÍ=üðÃzðÁÕÝ]ºÕ¤««K·Ür‹vîÜ©³Ï>;z¼Ø«[=ǵeË–¨Îyyð^üþ¿ø…>ñ‰O覛nR}}½î»ï>ýÓ?ýS¯ç`èºùæ›5~üx}õ«_îü[½zuÅ„±RWW§»îºK=ö˜|ðAIÒ< IÇ$°` d³YAP1ñl¹×_]RxW=A=[ǽfýwÜ¡¯ýëõâ‹ßû¾_Ð÷åþæ›oê†nPmmmE-ú¢â¿ƒ ˆÖÓWøþÓŸþT?ÿùÏåy^Å6pâX²d‰.¹äÝsÏ=ÑijSWW§%K–èæ›oVCCCTú†Àp"úÆ7¾¡½{÷ê+_ùŠb=êe¬[·NO?ý´$éÜsÏ¥±à;îa}q"Í)ñ{>n­UggçQï‡1F¹\.ª[ψz€SCCƒn¾ùf]wÝuQ©›­[·jÕªUQxæ™gjüøñZ¼x±.¹ä’^ðÝu×]’ì'–ýû÷ë‰'žPww·n¼ñF}ìcÓìÙ³åû¾–.]ª»ï¾[¾ï«®®NøÀh08ƼÁ¸S}çý¨W+€Wq”ü‘NK`8Ñ466êöÛo×í·ß®uëÖéK_úR¯çÔ××ëöÛoWSS ÇÅÆ€Ct×]wéꫯŽþýÀhéÒ¥4 `È:ýôÓõŸÿùŸúô§?­yóæ)•J)kÒ¤IúÀ> ïÿû:õÔSi(8<š8tå#ìï¼óN-^¼˜F iµµµúЇ>¤}èC4 Âzà0Ýu×]Z²d A=€~CàÔèOGÖchEÚpŽ:¬·ÖÒŠ´à(P§ÔŽÆ‡õŲ/‰DB©Tê¤-cŒQ2™T"‘àl‘£Y?uêTÍ›7O’äyÞIÕxÅ×»hÑ"MŸ>]µë‡ï¨ÃúúúzýÙŸý™’ɤ|ß?©Ï÷}%“I}ö³ŸUmm­¤ãÖ' ¥ÓiÎd€!ª³³S©TІ`ˆš15®µë³40È­x%­…ówu”# _J_uÕUúñ¬üÇÔŠ+Ž(<¶ÖÊ#cLôý`e­U2™Ô©§žªÏ}îsºêª«*^Ãñ”H$ÔÙÙI€!*N+Ó Q§L‹ëÅWÓ:e:ŸçÀ`¶nCVc›we˜~Û»«®ºJ]t‘6nܨt:-Ç íŸH“¯ƒø ”L&5yòdÕ××÷úùñÔÐР={öhäÈ‘\qCÐþýûÕÜÜLC0D½ãÜ”î{°M×^Ý@cƒØ¯ïÐ'?Ò8¨÷±_»êêê4þü“î@äõõõjiiQgggTŠCC{{{ô;šÎ?'¥þ÷=ZñJZ§- ò0ýϳ]’ ¯×ÁÌéÏ•Yke­U'ÅWñ®.Ù3~üxmÞ¼YApå AhË–-3f À÷ŸmÒnß©ö²`°iïtÇ?ìÖ-æÛ#¬GUAhùò—ôÆëŽb-¦/üV­^£^X¡l6{Ì·EX>Ý÷Óh'µŸÞÿ€r¹Ü1ߎGS£/+–/—ÔsRYFÇ8y¬Xþ¢‚ 8æÛad=ú´s×nÀImç®ÝL0‹ÕÑÑÑÇOláë?€@ß9iÿ¢ Ó’xJäÀ‘`d=Œ‘õ8€¾FÑ3zúa=úfz„õV"¨€þG#ëq U…oiè°Ça= Êà0Àë`„õ 0jÖ£ovÀW'ÂzÀÑÞxAX‡‚28 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€æÑ'Ûë0Çy¿ ‡ ÀI‚°à$b&ý¶Ç.<ïµ_– ÀÉ…28 0Âza=À ÈZ+k- C5ë†0Ûç#¶ìÿÍë¿[+cŒŒãÈqŒ$#ÇqÂÇLiI#ÉT)zo­•-nÏZÉJVV6d‹ß[+•uØÂv¥B½úòR¶ÍCín ¾=€¡Ž°`ˆ³|$ âeÂÀ¾Z¨¾\/®šDB555ò——ã˜ÂÏ e(Œ#c*ëQ‡ÁZ1Ô+œŸ¶r€­‰Îã ÚY–Óp'¬Mmm¡Þuá¹”¸úóƒG ÂÉ[ãÊÅ”L$”H$¯‰+‘H*…ÅËÜD×¢$ãô½ê׺éñþ •ÊàGÔÃûòϰòÎkm4Ú>‘HÈõ\yqO¹\N™LFÙlV¹\N¹l.zÿ8Òä·0tÖÇã˜Bí]I LkÂÀþ@¹ƒ‘*ý ì-%N¦˜bÂ1Çq s6KU„C®cee~>X[1÷cᡊí™â¤UVç&§ Øýóf­bRí8޼XL5ɤêjk•H$‹ÇׄµèP^æàŸ5¶g•׬/¿¨Þ1]ù~ẮäHÆ3òb1¹ž'/S6“‘cŒ²Ù¬òùÊÀ¾×碭>-Ÿc†ÂzàCÐðÿ ðÃQA É—T6Û_ïå8ᲊòÕƒ Œ]¶8÷Ší£9m¯æ-E7Çð8تÿ*µ<ÏS`­òÙ¼׉B;Çuäyqå²9¾_ñBkK¥(zž¦rçqä8®<ÏUP]›÷óœ(}ž)@?]í/‹©&‘T*•Rmm­‰šBMúðŽšð™V½n9ʳ¹?ÎjÇ8ò\O®ãÊó<ÕÔÄ•­‰Ë1Ná³0{H#ì`(#¬ú‰¾I2®ŒkdS¸ä\I¦l`qôa¢„åò’5á—md}±Š2¥wz² Ž”­ÒζÇ1¨þ¬c¹7¥…ìÙl.,ec­dFVï+“ÏK6豟=Î,lj~V-ô³6Ÿ÷ø9†ï÷*«Ã™r<ΜTï=Ž#Ïó”¬M©®¶NµµµªIÔDwhYIùB‰œþ—éß3º8ÒÞ;®õ f2ù~@`à„EXTcUZ E:Œ)”)ë…B¶0J¾øh‘QZ*HÆ•ã:Š»áèÆD"!ÏõÊî×·2FrŒ”÷sÊe³ÊesÊç‹uz+×Ý»bpÏÇÊ ÷ZÛãÙ¦ÚKÅ¡ž6(k1§p^”5yE)ÉvŸ«R™sl;L¬)—ÆK¨®~˜&Oš$ÏueȾ|(¯‘c}e»:ÕÚ¶O;wíVWwZ¥@Þ®G‰TJu ª«¯S2™T,îÉuLÙy(ŸÍ¨³­M-ÛZÔÍ(°ŽŒãrÂE/¿ØV¶tm›ÊÚáÑ5{,Qœ8Œä¸®É„êêêU[›R2‘”ë¹ÊAT¾¯Sç°Ë¬™¾?7ú¥”í‹#GÆ•TSSÎg2Y/òz'"Âz  #+c­ ŒX'än$øaàf\9Ž+? ›#9Ž$+Çsyª‰¹J¦j•JÕ*•L*¯Ñˆ#T“H¶TU/ùJ§ÓêêìPwW§º»;ÕÑÑ®twZÙlV™l^¹\> N µÃÒ’µŽlaÄ~¸N? K¡Ÿ)ýœÀï€*Æ?Ge^Š“…pº»š°]‹míØð±À˜ÒŒ‡6±&ü’£ÀH²¬±Ç`¯{–©ñ«®1Óç貫®T}Â(f|)ðåç}¥âžÜ|Z{vhÍšUzú¹”îîŽÊã9a§”ñO5jÒŒ·ém³ß¦É“&(™ˆ)æ„!½±’+_Ým{õÖú7ôÛÇ«íû²Jç{_]'×ÔãÚ+–26|Ï(t Âs¦°´ “ñÚòNCU (™„ú$|O²á{ˆŒ‘ëzJ&“j¨¯W2•R<^#Çu€»ì„±eM”NÓc¾‰þ;ëð{HO6ÆÈ8Žb±Xa’k§P®+}.ÚpÂBé9Ñû `È#¬ª…²rå˱+å‚5É9IVÆ5r½¸‚t6 p]#«‘ãÕ7ÔiÔ¨‘;ºYÆŒUó¨&>\±XBãÆUmmmaKaÉ‘ ð•ËgÔÕÕ©ö¶Vµ··ª££UÛ[¶hÇöíÚ½G»wíÕÞ=û•ó%Çs%k侬/ÙÀH6®°7Á—L « ×D€d‡.ì1QÃYÙpÞBXo„Ã×#¹®lá\q$S˜ÄQ ƒ¤BÛ;…3˱ {ÑûþQù_X§1’\ņ5kü¼3ôžO|Zã†I)×Ê ¬\ã(–ÏÈMï×þ­ëõ›_ÇôÆêUÚ¾}Gtâr$'&9I™D½¦ÎY¤w]}¥ÞqÞ™J8V1ùrmX^#dÔºc³V<ó„Ö¬ø_ut¹ÊV¹â'S/Qñ¸KYE×_1´—<ÏÈ8žI¹Âóä8a+e}92aŒoýðˆZõ1i/aýIñžTï—Nª ü¡–¦ªv'—­þIbñóÅš¾æž®rÓXÒ»Ž«˜S"‘P&“Ѿ½û”Ïåäçó’ç…s½ÈÈçÖ€!а8e#­YëHÆ•Œ«X*¥úÑÍ7¶YÓ¦NÒ)Ó¦jÚäÉÛCN®ë)‘peŒøü|X‡~,Ca=PEPÑ[IƆÁ¥‘#ãÅT“¬SÓØ‰Zpú™ºäÒKµháPwû>mXõª~ü½ïhTƒ§¸Dç¦ñórrÝêÚ¿G+_}E»öµî*)ÞSÒ» N?4¬CªV,TñkË^­9„×PÞýRìÐ+ïÞ ÂÿÚ°ÛÏõj”—+ëÅåÕ ×èIS5nò o%9R6›‘ü¼j§|ºKûöìÖ¾öΞúÈúþ¬lùzíq™kרtúÛÕ‚*N>ÊË-ŸlØàX9…òY…#a­d/®X}£&͘¥¦1c¯‰I&³ÖÊ1F®cä8¦pùVŽš6fˆD}^Ã=Ž»=Ö;aèœ9Ð¥yÜ8NÔVžç*™ '”M$jdd¢ ¾ÿÎ sϱ‡ùø‘7lq.ã8ŠÇãJ¦’ ‚ œxÝkó0˜Öˆ >$™°Š[#71L§ÍÒ¢3ÏÒâsÎÔ¸1ÍJÕÄÂxÓ§à ¢‰6Óénut¶k÷ž=ÚòÖ½ùÖfíØµS­mêJgä8qynLñxBÍMMš8q²ÆO˜¨‘ÍcT[ß D*¡˜ëÉsÃÜ&Ÿd¬£DM­ÆN˜¦ùé¬ÚÚ»µþÍ·ÔySÙl{¡ì†+[¨A zÁ¦GŽuL3Sk«lÇTl´ÏÜöà;Ø÷ü¡}%5µ&š’×*ð}©¶^‰áÍ3aj8)h2Yx¢#kó’9&/£¼Œ ç*°½Ò÷à ûuègg¯ÇLµ×fd»Õ¾»E«öï‘ëIFyɆw^xŽ‘l  —“ òÊ*„õå5ëûçÌ(æÅ²L¥1íöˆ^·©ú@Û.ˆMÏù"¢ýé§)˜ÃúBÑk '§–üÀ—<#/–P]ãHM=åmj9²pD¾Tÿ¿|LPqu˜~¾Rû¼nŽdB^«còfr(úVçmzÛÊŸÛÞë°*µ³­z9õx•ŽÙ;h±³ÕrGñX\ÉdR555r·0ö@wÞØŠk¬jƒÚÒôÔåíd­íÝOv¨óoÛÒ]×SM"¡¼ïËëì” raÇ A„õ@ßq€Jµß]ɉËKÔ«yâ -8ã\qöÙš1c¬œÀ‘FÔGA½•‚@¾Ÿ×Æ µzÍëzé•—õÚ«¯jמ=Úß֮ήnå}«šš”âñ„Ç“çyjÕ¤ñ'kÊ)oÓ¹^¬)3¦¨1Y'Ç)«¬/ÕÔÒÄ©suZÆjÕëÔÖÖ®®Žeó’ëºÊÛ%¥r¥6 ƒcLqÐCYä0ÖÞóõyX/YÎSà;FNMR#Fkô”j3B©d¼Ðéa áP Çør•—S*VÞÇ^ýÔš}¼ã¨XÄÆ8’±‚l§¤˜ë+|ÉÉ+gœ0š Ù|VƉÉ‹Qõýzõ9 à RvG‹*ÓÈdm½ÆOš®SfÍÑð‘#dŒ/csá¦4¹µ-ýF¾Ò‘¢ŽÓo¯½rÚO;Hß{‡îwÁDÊ×Yý 2Ö°uMÕµ˜cø–iäÅâJÕ¦TWN(¨7×hï°=Ž„©x¿+{w®è¡=¼sÏ¥» \×UM<®D"–ÊçùÀDXTQœL6æçHÆSM²A#ÇMÖü…§iá¢ùš:u‚œb™ [¨So96/£@mmûõÚ«+õ̳ÏèÕ•¯êuohçÎêNg”Éå•ϲ•ãÄäyq9^\6ŸÓö-[µ~ÝF½²rµÖ¾Õ¢³Ï;O§.˜¯©S&¨>á(î¸rݰvÞ:òRu=~¢Î8ý4íÚ¹]û÷µiÇ®¶Ò+±¶¬q‘r¢¡Œ¶jj–ñ)Š´=ÖSÖf=ªZØ(¨.]ÞsLlPؘÂhQ_F~!‡²2¶0Q§ ÃL+£ÀøÁ¥ eCJᜩ¯ùeËšŠŸX™BØí„!“ G‡6LÆ×´ÉS”Š×ȳF®¬Œ Ëùò˜¸‚Â\Fù26œ§ÀG)tëØ²ý7å#î+íòÉ­q*G½÷*kT:VÆ œÂvŒ+O2Fá<”¦4„5Ÿ‘1FŽãÆvÛ‡ÉèHCûhoŒS¨£_ÙÖêuÊŽu¡”Tñ<²åûP¼&{¾tãôˆqïÀX9ÖF¨ÿ?öÞìKŽë¾óüÜ%"r­¬½ ¨Ka#ˆ…;)Q¢mY²ÔvÛÓ‹Ïl=szÎ<Ι?§Ÿ<§çaž|æeÚê¶eµ$R")‰Å$V(  öÊÊ="î½óp#«²@€¦dÉm_žª™‘±ÜÉúþ~÷óµ×–X§°â óð ˆÇ=£ÿ>"›IåüJc%Vø1`DˆÅL%(•"ŽÏar´D9’(göË © 0Ba8²}ÇyÄ•8tvoœWîð5Åôô4µ¡!¢@#ñáŸÎY$)q³ÎÃû·y¸úíF—Ž C*cS™?Ɖc³„*F+Éøä,—ŸžÙÑ e Ê ÊÊJPcáÜþèÛ-Îm¬ÑMcÀXÃÖÚ÷—Xßn‘¤Y&‚À#—\‚s!FèýýGHR®”®U©UËŒ •(FJúùg-Þà4)Î8ZÍ6­FƒV£N½¾I»Õ ÇX'|жP8)°Ödº(®øq e€“è2“S³œ=s†¡¢"æ²bI—V}‡û‹Ë<\ߣÑ18¡ KFÆÆ˜œeblˆJ¤ EJ·ÙÞÝâÊì5Û¤©§QBù­Ú¬ð•…²Ê@S¨®Õ®Õ¨V* QAgHxK¤56N‰»=zÝ.I’Pß«³»»Cco8N|ÕV>Ü:烼ûE…~щ/ìÆw¿Æ‘”‚0 ˆ ¢B„Ô*;¾/ÞÊ›ôOX—"úsÊçtø/Bšb¹B©RñŸ ¥ˆ h%³¹÷ºtÛ-š=ši’`ŒÁ{(¬Û‡2Ë]ùõ×A9wð¯BH¤„ QI·×#I 6MBb…=ÌÚyâYÈ•+W®\¹råÊ•+W®ÿöÊÍú\¹ž¤l}¾T!Ž2º8ÌÈÄ^xþ3Ó£DÊ·þz8…T¸Ô`â&Ë·¯ó‹·Þä'o¼ÁÝ¥v›{$&F¨ÌÄq¯YG°³ÆCéï.O:]ÖïßçƒØÒ®· Ã2cµ—¨%Ì‚LutÓ˜NÜ£X(2Za¨:Ò¾-$XqÐc*Nú.D'JiÊå!*“cLÏÎpbaãǘ˜˜`jt„ÑJ M‚²ÞðÄ¥¤I—ÍíM–WV¸sï>ëkkl>Xcóáõ]vÛmœðœeß”žõ] Nûômá¼™†8~æ"ùïÿwæç§)È„Ðt)—$Ä+‹wxýûßã­w~I³ÝÆ IPª04<ÁÔ‘N:Ã¥§ŸfæÈ(ãejµgSÚÝ»;unܸƭ›×¹õÙM¹ò)k›àBYwtfu¸¬“ÑYHS\ Ñ¥2““Ó¼øÂ˼òÚ«?q‚ñ‰IÆÆ&ÐBR’¢h’ ï“"„A*G·Û¡Ñh°»·G»Ýfmå!×®|ÂO~ôCnÞºÉö^“$±H‚ý£<—À Y$…Êó g8µ0JE "“RR…Åö:ŒW ,ݼÊõë7x¸Ý ކ˜9yŽ?þãosùÒeŽgzb’r) X°ÂHIcKÚ³¤qÊ+/½ÈæÆC>øà—üÇÿøØØÜ£ÕM0©#6!-BKD!D—‡)aöÄ—Ÿ]À&Ž43$µ„™5g÷K"uD©6Fmdí4M‡@µ)×®_§TÙn'£(ÂB•#s'8õÔI†KAb lœ™õ 6ÇGxïý÷(]¿E´sì©K|ë;ÿ’¯¼ü"gNÌS)E éˆë´–>áÚH‰J¤¨w X‰ ­^BêR?¦e¸oŽ:`R A@qhœ#³'9{î)Ƈ (R„³Hb´ìtwy°2>:D¹ÐØë?nÞ÷z$…CS¬Ô8qú'OÎ1RŽ„Ã%)ZIDÚaU§Ü«Q $Y<ATfrv†ó—O0¢²×EÄ–Ð)iIb/h´¤Fj³G™H‰5a°õ‡ì¬,21:Djº±C84ÚMÚXg@* ( Õ˜_8Ë~ó;\¸t‰™£S WK †Kš‚(% KŒ4±¤IŠM i/Á& &n³rÿŸÝºÊ»ï¾Ëë¯ÿ„íí=ÚI@¨2\=|'sÖ‚‰A$Èjêð4s'NsöX…áH¡œ=0ë[[TdÊ'G'ÑÁ-††J̹Àÿù¿äâå œ˜›fr¸ÀP`)É­U:­MFkeVEO¤T©ý½O:`îä)ž{éEžéNŸ;ÍèØ•b‘PIŠQHTÔD¡"P‚ÀíÅĽqÜ#I=¶w¶xðàŸ~|•÷ߟ?þ˜õõµ}^¼o ;™Õ_YùÿÈO !MF„aˆÒ¿ïï$VÀ¡”/ž¦.¥—ôV0T)373Ç…§/19;ÇÈØ8Õj™B()’@IŸÏaR`–¸Ó¢Q?E«¾ËµO?åæÍ[)7ësåz’úËö…Bµ‘fçæ£Ðó€…Ëºï½ /œ#IbnݺÉÇW>áÎÝ{´;=Œu€Ä9‹3ýåÿÜñCʺ4]ßê¤q—úö&7¯}Â/~>CÚxÈp Ö×–¹»ú€õMêÛ[4¬ðpy•Í”Th§H\Æ}î3›û|gQžäâ3—y啸tñ§N1:2B!*…„µ8J„ ‚NRK¤ ¨B™ÊÈ(&M™˜<ÊøäQææóîÏ^çƒ÷Þãöû´»f€/ã0¦µÄIB µF ¡¥À…Ö ­5B)ªÃ£Œ/<Íkò¾úâ‹,ÌÍ1Z&<š! a`PÂaƒ -Â:ÊÅ"“# W³Ë÷¾÷}>¹qŸÍ½XÊùs$5.(‡Ñ…*Fh´ô¨á@¤"ãÈ÷Ç¡µ"TÅ 'qIŒKzh©¼™Ø_E‘ur;©1(¥Ê#‹”%$ÂItf@Z] 8<Él4ÆW¾ö<ÿ‹œ\X`d¸L¨¡–¢"V)ý*ÑNhD  €„k-*Ð(ç¡2ÖZLšâúùYMå±¹OÐ~ç¬Ôô ™?Áéç¾Î~ëϸtþ"ÓSc”J”Ò( "±h‹¯MhJå2½Ú0…J ¨Vªüüg?çÚ­;¬íÔéÙa…/HtÂó»…D‡!¥Jh œ•¢P!û¸|‹^|>]AJthtÖ=-q(­ £0 R"¥@Já L#1„ÚwþJ!¬Å¥’^lýt~^(œÇ‡5)¼ªdˆt=t†Z Ïx7g³°`›}¤‹•9yæ Ï>ÿ—Ÿy–gŸ}†‰‰q*ňHK"-)„}£ŒOß@£„ ,"ôlxI…bI169ΑÙ9NæÝ_þŠO?½Êꃇûlpãð°È¥FˆçÎyƺµ­$A PNy³‹Œa ("*#ãŒÌñüW_ãk_{…ùù1j•" °]4 …C;‡¢oŽ[R›`\€%bdbšs.ñô*.gîØ,#câˆ(P„Ò)¤öcAâpÆ M(!ˆ4ÎA¹Zct|š™£'˜9ÆÂéN:Λ?yååeš­6ÆD9„ÊîÝùÿyNèÇV •ÜUâ·ØÞGÊX@J$*©pfá$gNqæäIª£5 …J)ÈÆj’¤Y΄¥D…ÎXª•*Ri¢R™àú ’Å{¤{MœóEc]V¤rA¿¿…°\!Qä ˜q“$ äv}®\¹råÊ•+W®\¹~”›õ¹r=é—~)BcÑŠ%Æ'&™ŸŸ'´·£öý‡5 ½^‡ÆîŸÝ¾Í­Û‹<\ß"µd\t<ß ¬½ÿB³%c ‡s v‡+÷xç§oòàÎ'D²Çêê=–×7Øk´0q:m’nìñ2à°áx€ %ªÃ<÷êWyí¾ÊË/^föèÃå… ôü}@8°a=oØfá¨V€u2ó< ë(–†æÄ‰ŽŒU*3T|—ë·°ÓŒ1Æ]öwi?ðÒ›ÅqãœCJB‚õFšÁ!è°@¥:ÌñÚ4_û:ßüö79=s„±r™HôLv˜ Q 1 -Ò aD­Zd¸¬/;ÒN‹¸÷cZŸÞ&6¾ á8ãð5…Š8é±0&Í0ôQ¾¢…EKG <®%ÅwLÿÝeæ¬ðÉ&5Ö€1œ›Ì@sB ¢ #S3Lª¼ü•¯rצ› IDATêôcc#„¿‰ áBu]êÙåˆÂAȧòï—}ÑÇÉìg}ºÃã¯_‰È~÷{¦¾ÅÄ™öqG… ‹ NpæÂ˼ð‡ßáÅ—¿Âdm˜R(Pûu*‡µ2;s~µBFè BEJ• CCeF‡ª£çéÍ[lÔ÷HmŠP „ zjûõ)NùÒ˜H'²(¬ÅØ,;ŒÕþ¤~œ¹çÍsѧW‰ƒ9,•"ÐG)Ù~ˆ¯ŸÃZX"a |&4R(ú'!Íž'¤ðÝÉÎ_!i-8Ö!VBš•v:g±iŠ1 Öf$¡@†kãÌž=Ç·¾ýM¾òÊ‹œ=u‚©±Q´ôaÈJX_S¥üñ¤©$R(¤–¾[ß„h¥ަabzš“'O23s”‘Z…w~þ+««þ>GߨWøà>Æ?–š”^¯Gjœ/®8‹ÎI BMT,25;Ë̩˼ø•—xê©y*%EHc‘1>Ð;ËtÀ80gÁYJ0:y”KϼÌ7¿ó^}õ2GNP,†"ßqï×Iø½5øke²S/ñE ¡”¿WFšRYQvŒŒsôè3GÇ©Voüø nÞZ¤^ï UàC…×î/úrFñ£Œyw‘Þ¬C”Ö}Þoå³®ŸJ'Ôè€B±Äñ“gyêé§8srž™É1¤†v»ÅÆæ[[»Ä½˜4IÀY´Œ 3è!L›ÔôˆmÆ»vm  NaœÅ"pÞµÎLr:`dêçž{™ÿþßý/\¾|†ñá"-ñhŠP"eR`CœôHˆQ¤Rã”ö¨Ò·Ì‚uè ¢U©”ª¼òÕׯU™š˜†¿ýWo-7ÚtÆå÷¡¡þX­_uàÆZ„¥%ÚZd*ü9¡$¥r£sÇ©ÌÌñµoþO?µÀhéÍq‹À:H3ã[ …ÒaüÕ’”+C;qŠ?ùöwXßÜeiéõ6 þpH 6î·tšMZÍD C…“JJÊÛ’n¿þàr›ôh¤-Œ °Ö!lBl»´:1½8ÍŒ\Ò{Æω¶kJ+¤•)½¡ªªÃ£ÌÎY†Ç¦8þc#UßXŽs.ëZ6“`lŠuã|£¬!}ˆj?–R mΤYG¢MøÎp?3 N¿óµïßã‹NûßgOôý}M¡Rãü¥gøÊ¿ø3Î=û2Ã#£q¸$2ÔÞ(—ž o傇¥¦T¨•#Ê…ˆ@+ê{ šíÝN‡z¯x|Œuþ\‚#MbZÝVX„H'³HZr~uƒc,©µ¤ÙŽÔÜÀ$t™šn0'¤@Bùë&}aƦÙüÕš@ƒv)¶Û£“BÒ¯aßä¶HGMeœ}i.u¤©¤k ½nÕiÑnwéõÒ4%¶‰?:"D@PfæÌy¾õ¯þ5ùßáøÌídz°%:+b-©ñÇ”Z‹s ) P¾ø‘ô2S] ”Š: ”ËÆÆF*EÛã‡?Ú!iƤ©Í ú,°×¥8“€.ú¦mcéõb’Ä’¤>XÖ—iR´ab¥Êñ…“œ¾xž3ç’ØØ`¤–Hd÷“_œ4TV8wù9¾ýη¾ùÇLhíC±‹Qm𤨨9:çþÀ´©4R¥Ry_€"&&&Š˜ž®§]Úí˜vûRô3_]¶z¨?¦\ö§È ZÙ@ã±®´sE\‡”’BTÈ>s„/HüÔÿÈ1Æa¥#jµIΜ»È‰…ãLN Q*ìÕ·YZ¼Í§W¯sýÆ:í.½^Œs–@+¦§§9sêÏW®'Èšg„a!¢6Ra|¼‚”>Vô™ÞÎ …!í5yøà>K++lï5ˆ¾{7s¥TÍhÖ_úç±¾c´ß·éÅ–„‘uN;”7q2K2é¿Ú Œph­A¨ÌHs NpñùøËÿéà©óg©Õˆ¤ñØIеm”°¤½”v#as·I#6¤RT* Q,…h ¬$P Œ Mý…åQÎ_~™±±):í6Nƒöí6t€MD‡îœïºMLjIS—u¢;œI uf. „•QΜ¿Ìì¹.]8I¨»h¤U8KÖë‰6ÆxïË ß™,k|g®•XJÌŸ¾ÈË_[femï¿þIl*Dê‚k±»r“›WF‘­VÔÆ†©Ö®bÔÁe´J#;´¶ÖY¾·D'ÑÄVàl‚²{,/-²´ºF³Õ]ö´#kHÓc-J ´–8RI0¾³6ŠJLNNSgúÈQ¦G†5“`­@+‰V-©Ò~5€T)±Y§»q‡%Œ²lǬ¨Ð‡¤f-­Iâñ8¿©œX24~”ñÿ†™…³ŒTBBÛA¦)ÝV›F§C+N‰ªÃ*U¨€rPÔiR¬±„2ÈV/(¢JãgŸââ3wY^]fum•îvB×Ä2>»°&`S„V#H?7}ÌkêŸ#:|±Áú™˜|YÄOö•K‹G4Yã;Ä…@)E M*Š {;|víï¼} ”£±ÑaæçfÂ>ËßO¤p˜´G§Ù¤½SçÁÆõnJ‰Ù­sóö"Ûõ½lå!qº€u’c gyí[¿úïþ‚¹é*EíWÉ 4:ô]åÒùpW›véu;4[-6ë ’TP*21>C€u¤Ä  ì¬@ˆ©¡8Tãù—Ÿ'Ô1»»ë¼wå·š´ct¨qNú€O™qÖñ+f´híMp',’4í (ÕF8U­rêô“¤˜´ë‹+:¤Rˆ½:`¥ MÁÚd‚a¢¡q^zõë|ã[¯1:¢µ¿[Û¥Ó“(gQ±ÅuS:]Ãgר¨ïÒé´¡Û¢\*1:~„©£Ç)UÑ!È ÕÊáQXb~þ8ßøÆ7ØÚj°±Ù`{³³}¼ÙçFý•'ÿpÌkÖZn¤öų 2ìÌïR¾à¥d€µ’¨XeîÄ)Ž?ÉèH ­,q¯Åûï¾Ã{ï½ÇÝ»÷é%~Xëi‚z³ÃÖnƒí½¯½öuÆÇF(EÆÇÇ96?ÇÊÊ kë›ôz=\¶J!ö)Ü#1©Çë ¼jå>»Øtj÷O±q!%å¡§Ï=Ålš263ÆpI³··Á;+<\ZãÁÃ-걡Refæ 'N3=>L¡ $(!²r‰4Vˆ*’ã'OrñÒSüìwI­£gÁtÚ4Üミþˆ¥›7>ÊPm„ Ï^âÙ.ñâóp™Iß7ëŽfc—Ÿ~Ìù›ÿÌÚNL£“blŠ´{´šMVl:w#œw¿åVßåk]fªJIœ86Gb##ÃD$Æ„$5Ô[mLš)4-`T„U!N9²–m¥@KÐY0¦”žá.…D Ÿ+p€yñùr¿‹\á±-Ò?ÇÇûÑ(„¢\fvÞ¯ž( ±³³ÁûW¯òá{°t…Ýf›DHDTfâÈõ, §N2>^¦ 0#?ÔDAÊöú:×?¾Îûï|Ä›‹¡ÙN°ø@PÏóÏŽëÀÅ;tôu/‰*eæNÃ:‹1Kw¹rå#ÞýŇÜúì>ÖviÆ–êÐóó§¹xá9^|îN-Ì2:ZE(Ï.÷< …Š H'˜œœäôÂqÆFJ4»-º]ƒµÓæÁb‡Õ{«HUcxbU,1{|Ö#¹û{ž™õÊ9ºí–ïñ«w~ÆâZ˳ú­A¸ö¾g…|lÿ-gÂgàÍô(ÔÌÏLƒÐDZ’66Y^]fiõ+kìã­¡4,Ýþ”ÛK40Rá$8iA¦³Ûï«ÖãPÄó]b¼p ÌÁb L$Ÿ“™ç…BD)³±ù÷õ.ßÿþùå»±²ºN«c•ÂJÍèøQÎ_¼ÉÞn“o|ýeæNS.DûkO¬u) €™™#œZ8ÆüÜî.?Àtcχ_ÈL{_ Ã79Û¬¸¡LüßâóÃìËjà|<Ö3 ÝZ’$FУYߢ¹·Çâí»jæNQ¥“&DB¡²íøšŠ_ ´›Ü¿}‹÷ßýŸ­nÐ!Æ:a6Å¥)©©+U@†N_x–_z‰§Ïœ¤d¤çWË—’ö:Ô[{,ß[äç?ý)?}ûm®^»ÎÚÆF*¬U u…Ù¹Ü[^奯¼ÂK_yá± :О6”!•TXblj–W¿öu>üà*;›;tš-2i†ƒ¡_‘:@'õ¿Ïþ3P¢¡qfŸB!…b@§þ•wx¸ú«[ìl5PΈ.&m±±±ÁÖ^c D%Î?ý s³G(†­|ç·’ƒìîòàÎ5~úÆøîwßàæÝÚ©ÁJP Ò.aX@êª0̵«·Ø­7A@éÌq"kœ%­"&'f8½p–S§NsõÆgôÒN¶ÊâÑðð/Î|ðl©Ð: ÌÌú߉Aÿˆ|8°#Šªµ!ÆÇG)Daš{»Ü¹u“Õå5{]L*±Îe¯çd†v“tbÃÆÎ÷W×8rä(“cÃ( …BD¡X$ŠBÚ½cìÁa‹ƒ"Æo|¤‚C9¢ßYE~¥R®\¹råÊ•+W®\¹rýž(7ësåú‚ßþ=7\Q*—(÷ÍúGš½}gIÓ˜v³I³Õ"NRoö75à¿‹È•î°q‘!wdÖè4T}¿Õõ-N±ßŸžu*TPàü…Kœú"G¡ ³Îjç²NKZõ:×o\á¯þêÿæÊ'ר7:ÑKÁ`p’¶e«ÝáíŸtXÛÝ¥eQùO˜Ÿ§"Å~ ­C"TDyd‚ Ï<ÏÍÛ÷ùôêM’nÄeøŽ¬ò!;ºïÒwm ¤6’Ä=,­òþ¯~Îw¿û]~ö‹x¸Y‡ ªVóñûWy÷Ÿ°»Õ ¿ÁP­‚RdÈ‘± l/¥:4Ä‘éi&ÆFX]oãlìƒ5µòF¼5Ø´G§í™ó©qœzqøòZ“ôÚÄÝ6q·C§Ø¬}T*ÎÍtØ áMjçBŠ©Ñ"ÂAÜnò`õo|ï{üýë?æÝ®Ò-‰ñÜ)Úy„ ##üêŒGêÇŠu¾^X?Ö™¨öÀ\Ý?² ýɺ÷ÈòlÆ´÷˜!åR’¤Ã•÷Áßþ§ÿ¿ýþÔ[#B“tÁÚÒ"úk뛊Ä+Eæg¦)(ÏV÷!´+,•J‰£G¦8>?Õë7‰·öH{Æ¿w6Y|)ë`u†‡ÿøsÙß_8èèýu(ÖýUûóÑ@ÞþßýB€³Ø¸—¥ÝڌϑZGœbk²Ù%d†ÕRÎ"œA γøMj±*+”8‰Á¢¥FȨ0Ä…g_äÌ©SŒWKÙŠ¡J€4)I·ÁʼùÆüõ_ÿ¿Ü[^¥ÝKp2 õ„(_ð“=®^Ùcw¯ÅæN“Rm‚‹Ïž¢6¢Pç(”)‡9±p–g/žcuñ.+÷—èHSáMëléAß ÷á¾`C`}Ñ“!º0=[¤¨ ͽMîÞ½ÅýÁßò£7ÞäÆû4vcBÇ~ŽïŽ"Béˆ'˜EKç©GÀ`âéÎî\yŸ~õW®_'!Ì.¥D)Ej¬ÏHÚí-Þ{ûMÊÕ*cSG«19BRBá("„ÔjcÌÎ΄ѱ ²„kÔ¡O‡_GýÌ>X63ë—Äõþ¼‰Ó”@:¤% i¯E'nSßÞ`ei‰f£CܳÄi@¶&%+K©°NÐêÆlíìÑî%'°T„z`¥€£¿Æhp.þ¦fý£Lz)%Zk¢0BÉ'á‰Dþ¿9¹råÊ•+W®\¹råú'•VŠÔ˜ÏýÛ¡ŸóÓ”+×$<ÇWgœB1Bëßó÷Ÿç°iŒ‰»¤&&5†8µÄ)¾­sÀÚüÍ5øzéM5xBþûØZ‡ 5•± .?û 'NÌP-é}ô·÷}Øc§±ÃO>â‡ßÿ>~zV³‡uŠÔ8¤Þ7?­Mèín³|óo½õ3ÆÆ&Ï]äÌÜ …ç­K¡Á8vò4çÎevj‚­Ý¬À ¿çtÖ#¬MÀÆ š-îÞ¸ÆÏ~ü6¿úŇìlïùZ0Âgöšl¯.ñÓ·ßâØÉYŽ;ÂøX‰D⬥ÓM(†!…¨ÀP©ÄÜÑ)n/n±ÓHö ƒE©½¦tàƒ9û>\æ·z¸ñ,<.DʬØ`“ÑÄî`µ„<ôÈAw»Ë‚r%> tgk“;7oðúý?þÉ[\ÿl‘^»Kb}'¹Ì KIÒïXÍàýÒøŽ_g²ÌØKÛ ‡°—}YëöCh}ƒÜGK ûA¶ÞÔtœ80‹³Há‘×WîóÆÈ{¿z^¯GjN…¡˜ŒŸÒk·x°´Ä;¿ü£s'˜82Tžåäý@‡u– Pdx|Œ£3Ga{· 6ña¦ÙÙëcŽö >„ócÑõ»âÅ£‹¾üL<@bg²Ÿ›ßB€î×ÔöÛÜé% qš ƒÀãzçp¶$Àe…k-&M1FfA­ýqc‘Öb-Õ2£'OqöÒ3LNM*G$-±-$¡´Û¥×kòÙ'óæ?fñþ*ÍNã$HãCz…D(oðÛ8fãá W¯\ágóÇ)VXg¨T’^JQ+P'|(ísÏ=ÃÒÝ[\¹òã3þaHû¾¤ÄÏ1$½ ®}ü>o¾ýcþîï¿ÇâòF‚µŠN7ÆYó1NúûkTQD!År… ÁXÒ4EE2 ÅB·Û#N R+ “à¬Á&-ýÍÝ:ã/` ¹{÷o¾þ:qc—¢Œ1íú{»{t:-VVW¸{‘V«µ¿¦o}ÃoÞÍ-•BiýOÀªçð> C£±Ãõk³ýð!#Õ"µÈBÒàáÊ q R‡›Ðçð“Q¶\VÀ²Öa£§'1z±ï¤·ÎaÇqì‹Bü£??wû«»üV•VŸ_ãòråÊ•+W®\¹råÊ•ëŸPåJ™z}ïð¿•ˇ~ÎÍú\¹¾@RxTg]Zû VáúÌeÏj7&&NZ$iÏwhºAÂ`FÜAçø“ оÁ¿†Á`Z§@èlËö`û؃7Á³ q!ATedz†cÇæ˜¢H‚ÌFX)Ò&¤Í=îݼÎ{ïüœN³Mj|w¶Í¶/]çã¶iLs{‹;7n±xë.'gf˜™œ¤¨}ž9>n–RµÆÔÔsGǸwûõ®ÉHçÙ¾>¶­Rx³Øe¼qáM—Í¥Û\ýè}>üè Û{¾ËS¨ŒGãÀœëÑíìrûÖ'|rý§Ÿyš¡‰cD ¤¸TxTIœ"qTŠ!Óãc ¡ÄC¿ëÜ€ˆ"FH&ºÏZÎL¥±hgR œÅZãMnTf(»ÃAŠÙúÇbÿAH )œçí›Û–øäÃ÷xó­ŸsëÎ2õFkƈËBOš~Èpÿ=|G½àöÈýq²ß!YprŸHt€ZB|®‘Ü¿Z"ų^ 6¡ÓÜæÚ•÷¹}ûÛMz©ö¥ ëW~çyò‹‰{´ê{ܼ¹Èí{9qê4…É2fìŸ:‡’rµÆô‘£ŒTË´Ba}±¡ßn@š¬{þÐyî»æÞ´÷… öÑ?•ãV½ˆý®ßÇá™ú?Bº8ëKYû+ÈpT}÷Ђ‰‚+=FÄß+<ÆÊˆ+4F(lV¬”SþÚÁ,)Î@¥:ÄÉs瘞™¤R-HGÐ_±’Ä8bÖïßáú'sóæ-š_ä‰p2Ãr Àâ\’^“õ‡K|øá{,\<ÇØä¥â0¥¥/¤sÇç9qâcã#¬Ô·ÀðXNÐ`Åþú a [íáÒ.WîñÑïñÎÏÁâÝìu²bEf~ ©ÂbÄZÇiƒ!1kÅHa%H4",a #LÎfîä"w6ت·éuÏš·!%&M³no^o>¸ÏûïtX»w“€ÛëÐk·è´º$IL»Û¦ÝieÞ²HÊŠ}?bðd<æQá Ôš(Ñêðÿ¢‰Ç¼æ‹ÂY¿¬²ÚLj‰›u6:mêZRÔéRâ^GˆqxfSö¦r`¿A"…B«€ ,¡‚È\›,„Ö:Œ±$iŠ ‚ýœ‡þ\<¾ÁZš¸ç<Ê©ÿܱˆƒÌ€~ès©X$‰c_$xòÉÏ•+W®\¹råÊ•+W®ß¹F†j´š-Àõ#µÚ¡çäf}®\Ot0²€Ù,¬Îe† è[ê¾;Ð:ƒµ‰7º2³ÏÉöþ‚;ðmú´š/䋆±`»gŒNù­ŠtŸO/%¢ÿF…R£ó'˜šž¤RŠ<¯Ü‰ÌBta$4¶ÖY½{—åÛ‹(ëpHLv¼yÀ*—Ò•I·K}}µ•lmîÒê$"!Ä7F­BjÍÈpù™)J¡¤§Ä6ãð»/2O¼¤(c1­V?»ÁO¯rgq™nê2V¶NÀâχH±®Ãîö‹K÷Y|°Î©§QÑì_Kk¼98K!Ô UJh­=K_*Ì~§¬Aˆˆ}¸¯;øŽzC9o“k)À\fúäS•½ Ï,Ê,ò>_y`ñ…ËÂ]‰7Àã½ Ö–îrëÚUn}vŸz+Á¦OQñ&£ñ¿‡ úBdF¢N‰Ì¸îÿaLDfÅ»G0Üûx!ýµÎ²l…‰iÕ7¹zåÖÖ7iÇÎï«ç;œÉ¶jõ¡ÆÝkk›Ü_^çáÆ.3GÊXá CÀ9 ލPbtlœ¡r‰‚Rhç11ÎfÇi=qF æ?n|W:HRH»`Ü»y•Û·n±¶¹MjñãDh%úµ>ÒH*p)­v;wnqoi™SgO2=9J¤%A†T2Y!¥Zb|j’±ñ1äÝ„}”Ûþ¹Ó’D_\“¤`z$í:÷îÜäÓO>áÆõÏh¶RŒS8tt Òi¿š ‡µ23ŽÁÙ„F«N·×*h­ˆMÚQ¢8Æü™Ë¼øS0©ë IDATÕ{=ÉŸ±¾¾A³Ù$Ž»ûßÒYœHqÎÐil²ÚÜbmù:C&á¤þ3OŠ,|šZ´/è !‰‚ˆáÚ(QXÄ9Ab q’Ћ{ÄIò¹å)‡æÝÀCâ1‹3­ë>šðòèyBFa’$ÉÁøËësåÊ•+W®\¹råÊõßÄjŒÖ†­ ?ñ9¹YŸ+ד”1¼­³k0v¢o(ô½¼¾¹é1$¥<Yî·‘f&_ö¢Öù—s öiØûO?ØÈ¿> žEp˜x/(W†8yê c££*À‹jÀ¤ô]­+÷ïòpi•n+Á µk{àŠôöÉùÎZL»ÃÆÚ:ÛÛ;tã'‹çPY½ÁdæìÈp¹Ù£Þ4v‡>ô…ÌÉeðì!N`z=š°tç6+÷—Ù­·qRõýþ`—Áz„ï¸ß®×YÝØ¡Ñ†!áÍt%ýÿ´’h)ÑR ´ƒfcÖý+ Ÿ³†²Žxhëƒ[%6CÛ >WÂ[ý2ñ˜ .³Ìº½ñ¥{wXº¿H«Ó µÃÄ݃míoRys~¿s¿oÈ˃¤¡°0â÷#È w 41˜  lí¹ƒW'4·7¹{û36·vè%§¢ ¿Óï;î›ÍÙ(0†V³Íúúë›[89ãËŠ>ÄW ƒ€b±L¹X"” åüõ>Hïåó棤þa“Ó=ö_©÷}ŸÑñ(æªO¼¼Ì»Ðãîs[uÙ5ðƽ<è6f ´²æ+@„ˆ @utŒùã³Ôj!aÒ:HãR Ò˜dk{7¯³ºúNì²"£:Yç¿(@ ©MÙÙÙbue•ú^kJôáÓßO!(•KŒŽ¡ô]”“X7¸ã‘BÈ¡ËãçŒM{4v7¹{û&wï.²±QÇà„F¸ƒç¶¿‚È9PÖÖVé´ëH9F7v˜4aüê”°ÄÑùSüñÐ8'O=Å›o¾ÅÍ7YYYam}½Æi’’$)q’bŒ!MS¬5˜D`qhéïýœŸ ÁÀXYÐêïWçv•Èþ9vû<;ž¶¼ûÌ›Á‘éaj©CkA©Tâèä•B›¦$Ý.{=êͽ¸G8)¿ð, ÷;ôÒóÆú\¹råÊ•+W®\¹rý3VnÖçÊõÄ_è-ÎÒÔš4û¢Ç-½—©=Ï\)‰VÞ¼Mr'= oŽ :¶»ðÅ›ðí›Q¡ÈÿÏÞ›ÇqœiºODdf-(ì;‚ûNjµd·»m÷2sfÎô{Ï™{ïL{Z¶%K²µp‘¸ïˆ}G­™÷‡ˆÌ*€ EªeYî›/O X¨ÊŒŒÈÞï‹çŸ˜$ CÂHÒ‰jáøòyû¤è²ÚsŸÜì㤧IB£Ñ`kk‹F£A·Ýùðq zÝ]´4ºnõ7› ‡_¡¬dò²+˜±xÅUFþ=üîÞËËË,-.ÒJb¬TX›ÍÓc®É¿ú²‰ãÛ;Û¬¬®Ðé´1Z£Ó|wôþÓ¾#×Ðl¶ØÚÚdkkû…AËP<¥¨D?ýýý„>íYỗ|G@>r®3_Š}°r»Þ¶»ö²âY¹ãUS®[ȯ=©^·Í×¢¤E ƒ¶+CÂr?Ã#£ÌÎLP.‡þ<] §0Ý,k-›››4ëu(-AÊnáÅößÙa¤)è›hÚ­­VL[ˆ9N)ébffH+‘V µlW’/h ¿E!³ü›_Óî´Ù«×YZYe{§îŠ|ò`³+éu¯_êþ*©£·Wx|ë«¿¸LçâI*‘kÜõ”B•+ KΞ‹8yú4FƒÍÍ YZZbii‰ùùg<}ö„ú^ƒÝ½]õ:ÍV“N«µãnößö_×ï`µ¼îg€øi¶~û«à×’D#1B¡Â##;6ÇÜÑIjEÚi²·³Í³ùgl¬ojM…$¶'ö£{O­¡P¡B… *T¨P¡B…~‚*ÌúB…^&‹7g\¦¶6k>ÀH UˆP ¥„3ëSÇçuÝ–6ïɵygìw¹ =Ïwï²ße½mÄ/±•"(—é¯ÕÃÀ£b¿ÿïµ»»K«ÑDÉ+œŒœZ#³ß A»Ó¡ÕlÒ‰;H™q¸mÞ¤+¥¤•è«õQ«Uv:Ù"2d?œCÙchµZìloÓl6ºá¯™©e?f­5ZkBåc±’n×¶í‚L¾×$yݧÆs°â•/—ýçÞÞÛÛ[ìÖ뮢=^èÍ8øá´o ȵ¸¦iJ«Ù¢Qo':g²‹CßÅ›õ8C9Ž:Ž»&¢çŠxs7BªÕ*ÕJ… PùÊ8Ü4íšrÖO®7â{ÛýÑ#‚Ø_ˆé¹˜ìk¥?ÐÜéy¾Ìü[ ˆ–)Wú¨V*X-ÐÚmà°Ö¡«”Ÿ×Æöööh·ÛnÏH¶¥[2°Ÿ{žµ´ÛmN µò!²§³^)T ÑÆarò¢@ò+AJì1KÆZ:;Û;looÓn·Ülü½$ë^ÏÆÃºbk¦³ÇÓû·¸{çÎŸàø±i‡ ²c4Fºîï *Ó?RŠ"â$f|r‚#³GØÙÙaww‡­­MÖ×רÜÜ`mm••ež/.²ðìõÝ:­f‹f½™ï€9tíä__ÿg·°<|ú¯íÕ‹WMSë÷p×Q/Fª• ããcœ81ÇÄè•HPß®³²²ÌÂÂsꆟaÌ ËA¼Éºßûc½0ê *T¨P¡B… *ô“VaÖ*ô¿ÙchÇ1NL¯GšY1Ö „QA‰(*EŠ@Z„Õc¡M—€ž½ÿ­ö3¸FB¸¶óÜøÏZ³§g]éÙC)TQ©T½'´²¦ÖÚ±›ÛmûMÈÞã´ùÏí7%“$!ŽcÒ$éb=lÆ0v¦\”Ëejµ>‚°ŽmkoLõœ8õžÀS0´Û®û67ó^ƒí‚ u>4™1œ½¾Íƒdí›L‹C¿÷Cy@]ü‹;®F£Á^½N«Ýk1]höø¾‡ñcÞÜKÒ„F³A»Ý&Mµã+…0¢̼ï=üütªI“´К- ¿s@)EEDQ亴}±‡ï;Þ}КlÍå¾=¦xùøwƒž0µ÷…w¿ùCÎïßE*(†X-°š|WJ†jÁºk²W¯Óé´}‡{éÍýƒ…2©@*¬±4›-šÍ¦è,zlår™ÁÁA” 1Ýk·o׃¯ñ áŠÂä÷‡¬ °·W'Ib”ÌŽ­gܱ9–EXëqS~¾˜6ËÏîóÕŸ?ãÈ‘)J•_2û=©Y yïÊyf¦Æ¨–ÝýOûyôª0r¸3£A¹\ k5B)FÇÇêçäÉü& Y]]åÁ½{|õå|úÉ'ܹu—••ut'&ŒBljÜ®ÑÓú݃ÌqPž×S¾¸úc~܉Cg6J#HŒÆAT*311•·.qéâyŽÍMAÜfuiž{woqó›oÙÛÝ#MS´…$û¢œþ] ó½H1A7ݤ·Ü——KÜ‚0@)Õ½ÛMŒ.T¨P¡B… *T¨P¡Ÿ˜ ³¾P¡WÉh4é4´ZmÒ9`ÞJQ©ÂÐðýUT’Ø6ŠžÎqëC$­|ßÀ’ÖÙåÎY’X+Iu € $R¹P#Ä~|E/Z@v]E“‰Ø—ºÊQyTΫ•uãæï%JH©º¡¤RäÔ}áYØZkR­I’sð*½ÒT|óîoëh?ßÝüÈÓòÇéãþ~’R†!A ³ðÚÃæÐÁKxàRæóµçiûþ^xcTŸ{°?]öÐ.Ý7ž#=õ߫˹#ÌèrÉì!DÞlEO÷¿ñ%i]l†±‘.ð:”’=÷£î•‡A zªJ¹kª”zéñi£I⸻ó&¯h8Ûø°î¼°áÿá 0ÖŒö_­+ÈÝ饟¸Pa!LÏØKPé'nµùæê×lîlòÏ¿þ{ÞçmN<ÁÈÈ0ƒƒ5¢r€–TƒMuüÜÝkÐ[¥¢ü61<<ÊÅ‹—™çÊ¥‹ü¿ÿÏÿÍgŸý‰žÐêt0Fâv<ü×v~<ü$;ë]Ðao’þfãwßåÜÙÓLŒbu‡µçܺõ wïÞagg‡Äõ:óËÿZf¹µßwÓP¡B… *T¨P¡B… ý(*ÌúB…^úK½°¸³[gkk±RßT±3ò¢r…Ééi¦¦§¨=cee¯ëAZ›/W$83¨ééT ô32æº÷[­;;u{-:íØÛmÞà7xsÐ`½Yæûqù¶‡Ö^.—(…Q~j/7(VÆQG,›J*¤H Šütkß Ò4%Žã72ë]¸èwÙ_Q/a;¿¶üM\£ˆ—¼®Ÿ†¥”$Š"”RH% éñBx®£<É29³i/üŽŽ, 5?Û¬ üÚ¼éÍnÝíûæ`w]s8Ž#gË¿†;/^¿è"öõêgF¶EZ‘ïò±¢w]¨k†”J‘7ÛuºçË(ï‚w«(ŒÃðð#‚4Õ´Zm·¶¡ð‘݃ Æø{‘Í÷$¸®{á¸úƺ]3Ù[Lw–ø—Shpª=&J`°‚Hl›Íõö;¤õž>zÈ… 8{ö,ãã£ŒŽ Ñ_­"eàîyQDÞ—nؤƒ)é:ãu¢ ƒ ÃÃ%ûkLMŽà’= í¸ÃÃÇÏü=MÀ7½‘ôàÍà§‹Á‘ •èï«1;{„‹çÏñÖ¥s Ö¦Ãúòß~sƒ;÷î°¼²L'Ž}&«áÈž,‰á®u}# ·¾P¡B… *T¨P¡B?]f}¡Bß%IìÂWW689VÆ®ƒÒŠlû½$*W™œ>Âìì,£#w™ºB’ZD›Ôêž‚ͽÛcÔ©U…™Ù£\¸x†É©67×Y˜_byi­­ÚíiÚA§1Ú¤Î0ëAPk1>\µ×îËQ©LE9bÀ±¤–en²Z_DPŽW¬‚%¥3ëqÝ¿ÙyK!šÃÒ4%IzÌúÜ?yU ­í6éÚ—ÁÚ_ÿ:FŒ†ì:‡If>¾ØNÞ{=Ä›NÒʬ?´€p @õ’ª§³^ŠÓº ²°¢7«@(~Y罋._úÐæû}æ|o†ÂþñßÏ=û&ÅKg‘u;`d—¹ž?{màÐB’è ‚}aÜÄ!s´gþÚÃÆº ±ùøi¿›`ÿ5sh—C/¤ ƒ¼€b­ÎÇÄŠÞç֢랂0 Â`_Þ†è9áT§´ÛmŒÖîþ`ñ¸oÖç÷!<ÆÈï^ ë¸7Þ°÷õF{ØŠ°¸˜XWˆL…âXVc“¸Y×;ܺqƒÅ…ç<|ø˜K—ž0::ÂôäSÔªUÆ&ƤÖW#%A <‚&t÷®P!¥À‹D‚REQ.[>øà}¶·6Y^^fyy™z3!5>¾Ç‡MÊEüØ7¯žÃ°/}š@!•ÁaŽÎÎrþÜi.;Í‘ÉQ:Í:ë«KÖ ¢ã“G™=v‚é™q?zÂÆFÇw‚ÄUöûÌj³y'½Ì$Yá•·ù×ý/\¹|–å¥ç<¸ÿˆ§OXœ_àÉãGllm°±µÁÎÞv¤û7Ú÷ V…e‚ ¼Yï½J›³¡…·ì{q#¤B¨Àñ©q%óZãAkЩ!I4Z{> æÌÓeQfÚ…=ð„n‡²å™#ò‘}¹^4¾_ßÿ±õfG&…""‚ B åæ¿5=£"üj#zP.Ò¸‡ðôÖ½ƒ&3€³ªôð?ÊÆÿ,&7°»f§öù³„›ë‘ZºÙ®öÏ&‘ñ´Uþ°tç·õ·BJ·‹Dt‹["Ï»ÍÐ7ÂSÖy-èÍ(ÈGů‰ñ|s›Ïõ˜ ÇÍÏTß‘.À Ð¯ۼ˜à;ï…E„)¤’=ç™·ÎçXg {àŽ•~ǃDª€0P(µ¯4ÒS‘¤ÚЉÛh“z”‹Ø¿.¿cþdËßø;Ìw±¥RÌÏ%©5„~;†µ«-ÁÎæ&7÷ö¸sëa024ÂÌÔãc#=6ÇÄä$cccŒ 3<<ÌÈÈ(ƒƒCµZÕJ)KÝÍÖý¯ÓèÈï¼u‰Õî޼ų¥ ’Žé™Eâoðsï°ºÏ\ñŸdV@µ\áøÜ1Þ{ï.œ;ÍÔè¦Ófuy‰»wnsýÚ5––ÙÙÝÅM9ŠzÓÉ_ý‘ô8§B… *T¨P¡B… ú[RaÖ*tè/øÎhÒ` tê;¬Î?ãÞÍÛlþì2QT&R!,¡’h!…E†?yó2ÿl™fã Ôµ‰fA”B¼ØžsàŒÆ"(U9zæïþü8sþ2SÓ㌎ sìØqê»{l®­òðömîܹ÷·or÷ÑC6·hkh5›,<N»}¨!¤Á  k%’*¬148J¥ZëZŠÒwð €ô!¹V—²+B° ¡-##£ŒO0ØßTÂjŒÖh$)ÛÛ;,.®Òn%}áF!|7soÇòaÉâ…ýk»ÜV¸®ò AèŒ\,BÈþyÆ-÷¬Ã\øY‰Ã ÐÝbzPཀྵ?Ø©‹ƒ¸¦7-¸°ÉÁúû ÔèÆ”t…!ƒÚŽ‹b(…ÔF†öh®Û˜’„N»Ãî^ƒ8µXßïºÅ…’H îhL RáØæÆ`¥Äª2ª200@­Zfk³Eš_ ÿ>Âwj#À*eú‡&˜š=ÆÔÌaä!2}ÿ#kéwÁÒÙØH÷z6ô_ž‰+0HkV˜•tÚø¢‚ö¬ð¬ÐÚÝfsm•£ajeˆÚµ§[R˜ ÆfÆé€6R ´!ß3ƒa¬+Xß¿n@(ETêcddœ¾¾>-öí6 -­zƒ­Í-_¸Èx÷=Åa*{æ–Í]=;^2¿´˜<˜Ô"É@Ö€)4`u‚N:h, 6ö¨omò´òí·ß•Ë”+FÇÆbb|š¹¹ãLMÏpìäqŽal´F_à7+iEVДéá1Þ;sšãc#¬oìÒh·Ý}Àúb½ûB¾cEe…Q Iš§ ån€õ_òg{™ýôÔ<ݰ $åZcc?~ŒK.pdfŠþ(dos‹ù'O¸}ë[?zÈóçË4[-¡~½ôZÿ/„Öæœþ—gC؇kN«7Àú¡ÍËc½ÝýYQé§Š*T¨P¡B… *T¨Ðÿ?U˜õ… ½Ì&G¿¤í:ÛëË<}ü¥ÕMúªÈ¾‰@ F`E„ û˜š9Æù‹o±0¿ÄêÊ[;ut'q¿Þ´Ø蘛:™º¼ÈˆRß S³ÇùÙÏÁ[ï¼ÍÌ‘#ôÕJ¨þ £#Ø4¡}tŠcãC Tú ‹ÏØr°eš»;<{ú„½ú{h3Rz3Ø3š‘*bzf†‰‰Q¢‚Rk÷õ‡º@Gáû{%V†”‘¥ #㌎ŒÐW©x¾xvnî}¤4M––Vi¶RR}¸í”qÈs^ùAå0ŒÂOHÎP·h|Þ²½‡ÞÛaj9pí»'jsLÈ~£®;[~ˆ‚ÅË@0ßo˜-‚¨\epdœÑ± ÊÑ’¦ë÷&°›­ä&JPªUg|b¼çº1ºÆâv‹Ý¶wëtb±=õ¬NI;1ibܦ” gÄ„U",צ¯¯Á–7UýNš¬k]J÷ñ¨"DµÆÐÄÓ3ÔúûP²-rÏ~dIÞ.ì>£2ïX·’ƒÅ*·FYC - §´ávؼ ßvZìlo³´¶ÁñÓS¤Æ½t¨Ò8£! ˜˜=ÂÀÈ0Ö®!”§d„¯ Œåî B–JŒ 0ÐW! üÚÌ ~Ò¸ÃÖæ‹‹Ï‰ãô@µèò‚zÖvþO‘3®öÍu{`NÚ|ÉÈüþ"­ß}€DJEj4® !|@ûw² 5H[-ö: »Òï)ªýƒ”‚2ýÃŒOÍ053Ë¥wßæ÷ßå­ËgQµˆHJë .ýÕ3ãcàV ö!™Ä I¼réÙ¶6ŽÝo Âø ép8“+°IU¢T®293Å™3'9wæ'fg(G!Ý]æŸ=åÛo¾åÉãǬ¯­±Wo`… C„nRzwqˆ—ÉëÜ¢|Ûø®8äI½›; [¾P¡B… *T¨P¡B?uf}¡B½Ê¹¶=¿Ý[MÛ4v6Y|>Ï£GO™œ¤¯o¥Ü³´ÍSA™ÁÑIοÌÖÆóó P’0H-ÆwE—ªL;ÁØäaø£uŽÚ2Æ „Ì‹wé VýƒLŒ0Ô_¦¤ÜɬXáï]ú++K<[˜§ÝI=oþ6ù!,GúØÞGïs,ûBiä6H· B*L"°(”+¡cΫk,ízÓÑ>è6ñ.·µÔww©§»l¬lðd~JßmÖÖii™ zd„ÁjˆRjB¢Â€R%b¸¿B)y7=YÃß zk~"¢J?cãSœ=sŠKNslvšJ hÖ÷˜ü„«×®rçÎöv÷ˆc·.ƒPùbëþ¼„ø °¾^’ ^¨P¡B… *T¨P¡B?f}¡B/ýe^v™OÚ´v7Xxúˆ/ÿüG¦§¥oÒ¬vm©$Õ¾!掟Ť†$éðÑGqãæ]ê «(ÆÊ}á±y+¹µ®CØ%"KUÆç—¿þ ÿò¿æ>x‡Á¾EêÌ6ob),&MX[^àþ›<¸w­í=´U`5ÖkËÏy¾ºÆÜö¥R•>`Hdеm†'8~fŽ“çN²|õ¢c±Fú|‹ u¨!AH*,Q293ÍÉ“'˜ž£¯âÌúŒé-¥Dš˜ÆÎ ócy}•0 éhëB¤­Çio’kƒ6m Öä ¡Á×M® ZkßYî†hÿ,ÌÆÒïñ±!†-BlXbdd˜Ñ*#ý%jµý#C„¥ˆÆÞ÷nÞfmi•f½Ù½³ ü. áq_.^Û&)ÍzÌÛ7©Žðö•·9:ÒG_I¡h£)i‡,"AÉ4/0eGióîÿ7[??ðS·Ã"¬ô349Ãéóç¸ré$ÇŒS‰Bv¶6¹{÷.7®ßàÎÛ4MW$ÂÐÍÛl‡Ð_»na_(”*T¨P¡B… *T¨ÐOW…Y_¨Ð¡¿Ý °“ÿ‚o0:¦¹·ÃÝ›7¹{ö,ãƒÔú§|¯g kÇÇ*bêÈ,¿úõo(W+L=Î770¿¸ÂÊêÍvgßÛ @Hgâ÷÷061ÍôÑ\zï|øóŸséÜi"a°i‚ ¤mõ{•§OŸ³¹óÌŸ»?>û*‡¥›äÜ™ÓÌÍŽ2Ô¯P~÷°i…ÇQZí[ìî5è¤)©“…$KwhÖëCäóÒãv|éÄÂÌÑ9Μ?DZo¾e÷þsRmÀH\«PADm`€Ù£³|øî%Î?Âp™Põ ý­Ek"Ÿ“6KÎFIv¯È°,¾Ðf{9æÖßk$F(´ ‘Q‚¨Àï.ÑŽïæ`lBso›çO±²¸HóØ0i­J£“R†@”£Aú'9qò.œg}sÝ6tŒØ×µßã‚êÈ0GOŸäƒßeîÈ$Õ¨Ú"•uø4‚‰áÞÝ{Ü{0Ïήqs@úÝA‚r!ÔHéŠwÂa±¤–B¢¤$J)T ”D)oË¿0õJ¥›ëk”„àZÜ!‰[è¼(š•ÒlOÊ€!I0:ƃ1­]p®nGˆ±`µÆ& Në±C ·aäMkiÂÏ#ì_#fº»ó#K°Ö׆GÇ8qú.]`fjPZ6Ö–¸uë6·oßåÙÓg´;T òMRBH”²Ýü‡Ÿ€ö…íO§.R¨P¡B… *T¨P¡B=*ÌúB…ÿµ¾—í;SâV§rãê5FFúï£V«†Ê#\$©1„2¤`˜þþ¥j…#s§9qæ1·î>äÉÓ¶·wI´Fk“³Ù¥D¥ˆ±±qŽÎçÔÙ‹\zç=ŽÎÍ1Ô߇°m¬•hç„#HRš»[ÿŒ»÷°µ³çÍOº° íUnÞü†s—.râØ,}a© a &•¨R#ÇNóá/[}„+ï¼Åßø.çŽÏ0>ØG¨,&±Â™ŠÆ$´›uîß½ËÝûXÛÚ¥­!íë8#µÇ(ÎŒÏPÝk³ÿ+üÅÍ-!s+ë Á&Ëyµ@¹Rel|ŠcÇO±´©Ùj®Ç#M÷0EfØ“›Ç¹?—åÙë¹õ¶w^ŒN/BÉÿ§í\Š— î»8q›óõ÷†Y ²ÈßÌ¡k~×ñT9rì ï¾ÿ!ëë›Ô; ‹ë;è4ãÖ»yT©ô3>=˹KWøÙ»oqlfœjI¢4m&³ZÍ«««Ì/,°µ³K'5¤7ë]¯t«Qgeñ9Íf“XJxã_È·$¤b|jš‹o½Íß--“ª¯Y\Ù¦ÑLÁ†È Ìàȳǎsùí·øÕ‡ïp|z˜²H!•ÝL)¶'@õó¯·pâG[j´IHâ˜4ÑX+ókg¬ÛqaƒQu€±©YF&§©­7¨ë:aÜqkŸ< X©ˆ›»lÌ?åÞÍœ?>Æäð1¬¿ëÀjœ9w™¾Âö^ƒ»O—YÝڣӊ󵇄¥2åê'Ï_äý?ä½wßbjb˜j)Da‘Æ ¤Ûiwlm¯põÚ·=Ê™s'ì£(‚@"…c1„A…¹“§™8r‚Óßãò“VV×ÙÞÞ¡ÙhÑétrBJÉÐÐÃÃÃLLL23{”ÉÉ1:Õ"‰ö¼ìR&n±ôì!úô~ÿÉYXZ£T!‹T®£W§-Ü»ÃÝ;·9ú8#µ9¢P¡”Dj‰N „%G#.¾ñ¯©Ä׿¾Áúê:) Z†Q…ÉéÞºr…ŸÿügüÝ{—™›¤V Ö8D„”X“Òì´ØX_ãêµkܺ{f›Nj=¼×ð/õ¢2óKz†}pË †Ïëö¯ù|‘=Ǫƌ/&oÖw;Ë݆¥ “Ó³|ø‹_²ÕR´yÌúnŽu;)’XÓnktÚƒBbÿ‘y7kÿz°9Þ•öÀkøÎu‘ÙŸ¶Ç‰ïö݇ȃ>sšnDã>ŠKfªŠÞ—³=c”ÕÒqëUHm ÄÏ~þKgF!üò:[»-b-0„Q™‰ñ).\ºÂ¯þéŸøÙ{o15>L(¬óy{lxi5ëë›4Z“T¢ %o»Ý+©J#\¸x…@ Lðõµ;,®î›ˆrßÇOáÒåK¼óÖ.œ;ŽÑ ñÎ&­t„¾¾Èqë¥$P¡G¼*„Ë{È›¶+ IÜ¢ÝjÐjw0&•í\ñ&iX¦xŒ3¯pñÊ=±Â>Y¤Zo’Øi“¦14ÁØÛiÐ^[äêŸ>åÜ©YæŽL21Ö‡ˆÜu2ÆÐ‰Súj£œø€Ó§æ(S‰ ÀbÓ„ £cövÖ¸~õ+®^»ÍÂâ:V@'N°¡‡ûëÃﯸ5îžf´ñìÖÁ¤_ø¶·ðaz|Ý® ¤",õqöÂiŽÏŒS •:I¬f ¯ŸÒ?¤IаðíÍ›4Z-Ú&Á2ÂØ‘$a +eúG&¸üîÛ¼÷îfŽLRé+¡R–@HR)¨·Ú¬®mò|yƒV'îž’Í‚sß´ˆè~&Iâ$Ak—÷ñÇ„‰ž9Š@¨ˆru˜Ó§/rþÜYææ¦è«(öVVxpÿ>ׯ]çþÝû½uAÒ4õ—S¸B’uaÛîZŸ?"ýíÍÂr^¾ùGv¯Io{þ]kM§Ó¡Ýj“$É ?ùŸ¿V¨P¡B… *T¨P¡ÿt*ÌúB…QÞQß»…ßó—uÚfáÙ#D`‘Ilÿ…sgO3>2H !5†Tk”Ñ®“P¨R‰Ñ‰~jCãÄ„N»C§“$ ÖZ¸@É(t_à  ¤ÂJ)„¨@˜´yrÿ>Ÿþáþý£ß³°¶Ív3¥ƒñ·FwÜ)v7׸þåL373BÔþCD$i Dô ŽóÁ¿¤Ú7Äûï~ÀÊÒ õFL‹QªÑ78ÌôÌ s³G81;ÍÉÙ jå¬ã÷c,IÜF˜->ûôS¾¾zg ‹´“” Ô‡6‰CJä&r×,6‚.îpfyOg´‡b1ÞLY`å!Î쵯¬q®v›N§ƒÖû(&þ%Ȉ¡Ñ)~ýÏÿÁé3¼ýhžå ¬L ÀGžðñGŸ²½›[áÍcÇöÊé+¬«´/ŸîèºáÿQÔÄÁÈS› Ì Z7öÓá[„u¼nƒ!‰S’VB¤Ó3|ø«dâè1Þùå#ž/®²½ÛDkÉàð(ÓÓ3?q‚§O11;DXRù)J–ƒÐ†Åù§Ü¿wŸ…¥š©YB‡¿qa«’N§ÎæÆ2KË«œ¨g ¿Bh-Bk”(LVæÒå “Gyÿgklìth›V›˜dzz’ÉÑASgqå9;»MFŽpâÔ,2 ó\†×ÂZ¬n£Ó6I“¦Ú›–ÝÀMãùúª\czîÿõü+'Î]áéü2Íf“P&l¬/ñàá}®ß¹Ãv3&Nâæî~ÃçŸÏ26>Ì/ù>Q)@ЖR¡-Tkƒœ»p‰±‰IŽ_¼ÌÝGOYx¾L§ÙF¨€jmщI&§g˜=:ÇäÔ£C5J¡DI:!M˜  ÝÚcþéþÏ¿ý;óÏ–Ùk$tŒÄ– `­ ÞF DŽÀ‘nGìí¬—H¥PAÏ£ƒóŠküÐmnnðÙ§ŸóáßýýÕA±‘pï/Œ \ª27w’ùçÿÆìÌ1õ$FdX¢\`l|’sçÏsln–‘Á>?|Äí[·X˜_À³oOÖÍ.„ÀJár¬Û‰EZkŒÖ®ð#™äyg}š µ.þǦP¡B… *T¨P¡B*ÌúB…^ë·~™£K01­Æ ó–?þdb´%¼tžñá>¬4¾ãÓ’héøÍÂuGeI©T¡Öo°ÆzÃYR& ”Rhí»K³.h!0i«Û4w7Xzþ”÷[>þäc®ßyÈÚ^Bl‡vHµ÷¶S×™JŠÞÝàñ­ü±Rf¨VãW¿ü;ŽNŽQ TÈ@aAÙþÁç/”9rä4­f“Ýz“Ž å*}µÕj•ZµB¥„’’4ѹq,0È4fyñ)7®ÍGýŽ{Ÿ°[ocqÝ­9/"ïßî¢pÜx“â…À…z“'Ûè°ß,ïÚ×ßeZ¿>Nº‡oc i»Íöæ&««ëlmÕ©ŒTˆ‚n¤¤µ-Bdi€‰Ù oWÇ8zæ"õVÄ´„à³?åê§ŸS·)‰qìqcö“:N¼Å ›wîg]íÙF|è²Þs˃…>„ž±§Å‹OÅÚnÔh6 Få…E¶6·8{þµÑ#œ¨31w–úÞ­f‹$M ˆÁ¡A†G‡éë tê >!%JY¤Mh6¶YYxÂõk׸}ë!««»hã°D®Þâæ· ã=vVŸóç/¾bböÃC”JP@Igê,B¨¨Fm°D©<ÄØÄqÚ‰qf³ )•J”KÊjž=˜çÆõëì4:\~§J’N†‘#áH5®“XyT»ª¥0àþéBfuÚaow›'Ož11v†J…P8 ŽÁí¸P \âÔ¹‹ŒNåÜNƒ4éPÝ¿…$åÑÓgìÖ;“€êÐÚ]ãÚW_P®öÑ74ÀÏÞ9A5Š)ˆÄ™ö¡R”jƒ «€ËýÌ?ÁÖNTK„T”¢µZýýD¥Q)¢e¬k5BÆÔ÷v¸çÿû'|þǯX^Ù¦ÕÑ¤Ö „NLê>2$Ž»éùbq…+á }á1KÂCëí s/›s „¢Ýl²ðøøè·  ž'°`l˜ïÔAÈÜì †F9wö[{;l7ë´Ó˜Ô’8!BªÕ>‡è¡<0H¹V£\‘HkÒ¸Éöê ×®ßà¾ÁêVL[ ×¥cú»Ý1Âc¤ÞlqcH’„N'¦Zý18kÚXÂ0¤64Ìéóg8vl†ÑÁtÚ<}üŒ‡î³´¼B£Ýö÷…î½ ­ÙéÙ®©Bw¹!ß¡ô— —Yk{;–N§CÇ…Y_¨P¡B… *T¨P¡¿f}¡B¯R¾¿¾Ç6 &ÑÔ·SžÜi!…À¦šN³Áå §®R+È0rÝÖÖ[j‹®9PŠ rH€4ՀLjܬÊPÅRZ´6¤6[«ó<}p“on\åãO>áÆ»,oìÒJP‘ 3MÛDRø°VD«Ûì,/qûê5”ŒDˆ~÷ 'ŽL0Тq m©¤bh¸ÄàÐ8XK«Ó!A"ƒ°y‹ØàB30hc‰[-Ö—rãêŸøüóO¹zýÖ6¶‰5€Ä›‘e<~Åu’»ŽTs ß]ô Œ…³;…çÆ‹n(b7‘e dH˜—_V»ïå÷Áx“o ¦Ýfs}ÅÅEV–×”cjŒh¸\_1:Qch|CB«³ :áñÝ»„Ò"L 6c<‡Ü¸z…ñg)LÎåv¯í8ï™[/èE5õLTÿöÀôí•Ý÷o"3ƒ¯Iõü½Ö_›îë ÒZüÚ;æ 0tZuŸ?櫯®#8é-†‡'èG˜«´ŽIuBT ¢¡\€,V „Ë$ÖÐjí±´ø„/þô _|õ5ž.Ðl¤*al௡n·Ñª[®_½ÊìñãL1zz¥\ƃ3†)dQVU*5  •ÃÌ´Zlm¬óõ—_sõêuŒŠ˜;u‰vGS.C )QÂíŽRùõÛ—}óI Œ‰ÙÚXãö·ßrþô,#• "pa¸6 – d™þAE¥6ÄØ”Á&J²CÒÙaà› Q2@‰mbl{Å'ø"ªPèGŠçNœ`¬áï?Z*TX"¨Àxÿƒ#cLu4¨2B”„J)‰1ÚA ”Íw¥:¡ÕØáѽ;|þ‡Ïùø÷ŸòôÉ"õNB¢ÉÍj“¤=áÉûBÜr¿¤í®Yë3lÏž»oMöÎDlؤC}ã9þìwLÌ Ò?Xæô©£T¥$]s¸Ò×O¥Zcdl‚F»EÇhŒ´ ,V)QX"Š*¨¨„%F‚ ַÚÔ7–¹úå—|úù—ܸõݶ%ñé®à宼aß­é5?pÜ8h­IÓäðgýEÌ{¶‚rXf`x˜#G§¢¿Ñi´H[m¢(dbr’¡áaÇÔッôtÖ éÑF¶›wa­¥Ùl²³³ÃÖöÖñü¿\!Ô=t¾‹¥P¡B… *T¨P¡B…~ú*ÌúB…^ùÿÿ°Lâ–Nœ’´ö¸{=¡¾»ÃÚê"õÝ¿ç­K§9vt†áþ¤u&¸Ch¤ç͋Ϸ„EJR kÓž¦r‹Té;ZÛí6{Û[ܺu“Ïþð[¾üâO#¥; T~N¥4F§H!ó®a!ýkÕ¾Ð÷wÊÅØæÍÍI¢i6šlo®ñÉ>æ³?~Ä·ß~Ãâò*ÄC[T€Ec­qFpNq1H›"­íaC¯‘n¤ˆÞžḬ̂÷YàÚý9kyÝ rÍO»¡¯ûž›ýk³»¹ÎÒóyž/Ìsfv…޹-¤Æ‰1¤H„!BÓ&5ÚÇÃZ )èmÀh„ÕkV:Ö5Ö3é­›rÒn´u÷ Ä!Í©‚oóoçXû¾GÝa1´4áÐ6FØž€ån裳HAåoå FÏè6i‹õ%¾üÓ'Ø BPéçò[ýD*$R% ²!Fw0$ƒI I9ŒJaŒ%MR666¸}û6¿ûøc®}{“Õ-dÉ ©¤FcµöIºž=ºÏ×þœãÓÃ\9>–¸P[c²ýÂçĺ+"$„cwZ-¶6W¹ïü >etê({Ͷ¡6 ˆ<–ÝÅ/¸ù#EˆPÒw;LP¾[A€P­¶6V¸óÍ5¶þþCf‡û¡O훙άVh4BJÂÈ!†ÂÐb•$Ö)*Kƒît@BZßåùƒûü¯8F·wÿí¿0ðöe«©VX!ÐHA dŠ!Eerm‘Ö€M0H„…Ô´IØÛÝei~ß}ô{>þèSî|û€VlÐÖm+0)6M|ÜCàvYõ÷Am¬ UÆgK#\½Åø€bãÌõÞÉ,ò’˜Ø?ѳÌcÚ1îËG¿í#"ª•ÿÁìh… r3UfHV)T¹DU)T( "IÒéøkÒ!|Œ»)áB³ÓNÊîÆîÞç·ÿþ{þôå5W6Is»èÆ’Ûnów¶ôÈ…sx„‹yÁd‡ýìá{ ·»«R©08ÐOÿ@…j9¤*T¹ÌÌäRHÒ4%”Ü_V=hÖmòÐeƒ¥ÕjñìÙ3nß¾Íêê*Aä´¯ñÃõÂiäc§Q¯õ÷„*T¨P¡B… *T¨Ð_G…Y_¨Ð+•õ€¦Þ¸ÊLIMnÄ´÷X}vŸO÷ÖxpïçÏœâÝ·ßâ·ÞáÒÅ+ÔjT 2/gHé4%MS©$ÊcU¬Í¶ì§4MVVW¸qýßܸÎk_rÿÎ-¶··hw:$Ú[ælÒñaš‚8ѾO]‚–ÎÔÄ M›v}ë_~Fcs‰û7¯ñá‡?ãwÞe||Ü™sMI)ö!Vò^l R8¸|[Z­&ÏŸ/rëÖm®^ýНþü ÏžçÏú3ÿö¿ËçŸA'òÈÍÔ#H,Ä©ë4W6E ƒT! ÝqY¿ö2Ä“5ØD£SM}e‡7¾äwÿsœRüO\¹t–R)ÂXM Tàæ*ðWU¸°´…¤…[¤Cœh"?ï5I}›õ‡mþ÷î*«sëƒøÕ/~ÁÜ܃Cý(뎯ÝŒBH5Rúy"2ÓÙÿ±°³½Íƒ÷¹~õ ¾úòsnÞ¸Áó…%v-Ò4uÅ*!üšÌæ u;FÊnýß)®±>aÀcl¬@Ø!#Ê•š+Ú,¨4‹JîÁ-ùkïÆÉŠJB [<øæ Ú{ë<ºõÿõŸþ÷Þy‹£Gg)—JŽa/AHEh|X·tu÷MãîõV€±DB ‰NVWVxpï.W¿øŸÿñÌÏϳ´¼A3Ñ®ˆ)¤ï ¤=ãpHˆê!Ÿ4YYÂø7©¦ÓjÑnµèëë#T^H<¬–ør‰×z†+jjåÑ>FkUR> Q€mÇ&ÛwëéfÙfMþ\%%»»{´šMæk5¢(:ô8;—Wl:ôD„ÅcäœYßn· N¡B… *T¨P¡B…þ¦T˜õ… þ;?67©ÿ^¯k`ºp^“4S¶’õ½-¶V—yöä)ׯßäÔ©SÌÌL3>6ÆøØ(c£Ã ÖjTÊ%B ¤òÝ…‚$ŽiµÛìííQ¯×i6<_\`aaùùy>xÈââs––ÙÚÜt[û{L,‘ñOü›Þ®t+»æŠNÐÍ:›ºÃíÖ›kËùÉOâÄñûpôÈQ =x ¨&5¦Eµ‹çpöì{x÷½wð«W_Á©çOá…^ÄÙsç‘õ÷¡¬kTÁCŒÆþêCA~6Åuöé³ËY‹Ì9”e…~¿^¯kmP»¬5Í’Eíî⻯Dúç=ªºFU×(Ëÿ£†ˆˆˆˆˆn 뉖˜oÃ2«<ÔeÉ€Æ R­J_áìh ¿€×_{ÿßíÇý÷Ý÷Ç}'Nàø±{päÐA¬‡èå9ò,ƒ³šª;G£Ö×ch¹±¾Wõ Þ}ç\¸p›[[¨ª UUǪs±³°C§ÊlM$õ̉GÓ¿> .•¶6.áÝ·ßÆ‹§NáĽ÷â¡O>„O<ø œ8~Ž>Œ}«û:ëÛ ¬¯]ÂúúΟ?‡wß}ïðΞ=ƒ‹]Àt:EUV©­FÓ‡»Yš¦C|ìÑ ccX_WXÿè<þç…_`ºq +±¢Þ™¬”ØÚ8ƒ×^þ%><÷ŠÒ§u–ø¡Ó göŽA€b¼…ß>Ÿÿô9¼ ÃJXÄõ·¡@V°yþ}¼òúÛØMbƒUñv×¾F±µÞšâ'Åï¾ù^yüq<òèc¸÷ØQìöaM@ULQ”Š¢ÀÖhçÏ}ˆ·Þ~¯¼ú FãIZ6¦('ë8õËŸc²uƒ•<^z5¬üâùqæÜEx¤vI›yÅüòµu¹©ýOªì­'cœÿ]üÇOþŽ®Ô裀 Îô ¡ü%l\z/½ü:6Gãö$•¦+âs{ÀW8ûþ;øÅÿ76ÖÎÇ+EL³d¡Â™Ó¯à¥—^Ãt\a4šââø œ»°7^=þ)<öÉOà¡ûîÁ±#ÐË-œ‹¯µ¹¾ŽsçÎâý>À¯~õ:^{í4Î?‡Éd c>Û/;[ÒU‚‹çÏáÿ®­áÝ·ÞÆ ϟ§?õi<òð#¸ïÞû°2ìC$ (JL‹Οûï¼s¯þê¼÷î»8î<6Ö7QU€ÚkkðêK/`ÐÞ¿‚Ì(V+„r‚µsgñÚéwpq«D¥Ý »=­…ÑxÂkký^}éEl®_Ä[ožÆg>óiœ¸÷>>|Ãá*zyŽÍÍMŒÇ#Œ·¶°±y gϾӧ…×_?­ñ8F»Ö¤Ï©ø)A(=.œùë/âôk¿Âñ_žÀƒ>ˆûï¿Ľ'îű{Žàà¾!œB]¢,§˜N&˜N œ9s|ð>Þyç¼õÖ›¸ti=.ËdŒº®›a³ö'Íêjg~Bì”S\:÷^øÿ?zû‡9¬ÆÁÑFñSl^<ƒŸÿ%Î_XCU…¶Ìö6(6Ys#NÓü‹ºÄx£Âdó6/~„W_}'î½<ð9‚ãÇáÈÑ£Èò ý^Ž<Ï‘» ™|ªÄǘŒ'8wæ¼ÿÞ{xÿýðÞ{ïckk„Iê»Þ~’µ-´tá³çãõ¦éîA¦Ó)z½œ³³Št™}æ«ìåß=Åt2ƹ3àW¯¾ŒKc[ª…ÊôvVD÷0l>‡ÛÊú8'À‹€¬`xx?úYÔ#„²„EÏ=[a„õµ‹OuGýXqPÉd@äý>Ãúƒ>b¡oˆ‹¯`˜ŒF[¨‹ ›u@á^,l€ÞpyfaE1dqß&íÿ>x”E‰ÍͦÅ>UÄj¨ã~"Mktšð7;fƒ ƒ‡ë 6CUÄÖPýA+Ã}ôȲ,ö¶†‡†>Ô(« ¦ÓF£-Ä@8^‘¢jTàò>VÂp¸’æHÔP_#·ðª¢@9`<ž ªµŸ¯èЪ ¼€¯aœÅ`e„±b Œ2ëP”¼÷ð¾BQL`$ ,¦OÆ@š/5¨Ëx’&4ƒWUâl q±o¼Xçgò,ƒqYæà\lu%`R«žàClÍ%в,±¾±Ž²,b Äf°©EOUUéíè^‡‘Ž 9 CØÁ~ôîÃJ/ 3>rqîE( õåd„ñ8µÖQ@Ã,ønGOËüGYhvçl´¯í=`,Ä9˜æf ò^Ž^¯ûÓ›¦›”‰£jC\ÿxR´„¯ëxÅÓdõ —e°Îµë¬ÚœNX ‚g?»òX·ÿeË3ªºJÁ¨Ã¶á¢K@mOXÔuñqx³1ul1±•HPhÛ²´­“â ™à5¾wi›ÖeÀè’Çt˦`0Ä×ujýÑT™[¨‰°Ì-¡*´.czt6‡FQ8æLLŽSË!AÐ|kBà+hÐ ÐP£ ³y± |3œ8C±·»Tà‹ÓbŒ²íÐbbÿvé´§ŠS^¡ZÃbU®κŒïÚ^¤³YÀûÓµ¥L!âÓvv±ê9€/ ÁǽYͬՋtÚÊìøR …Í2Xcbz©hPøªF¨kØ<Ç´®1ÙØš+€Øò‡à«*ž j:ù€¤Ï¹8À;„.ìÙöÜó@X‚GY–˜²(ºmcæ?´Ý§â‰Š… ºs©•‰ÌÞ´ÎGD3É5=¯V@4 ˜íànuéekHHã°›¥³çÕæ3#=]7@–²«*ÔûxEOwÇHs<âÅuü¶ië"ڶׯÛÏ M'!:}á›+:Ò±)ýLU°¤{üžüQUøª@Ud¨òu]Ïæœ\‡°»Ù®M›šÝÚÕh'¬oÿ¦uªë›+¼‚¨¨½OÇàŒm‡_ífëžPh^Ë4ûfÚ³ªºŽ'|üLÖNŸ"""""¢[Ãz¢« KyÎûíM šêÌ6°~ÛÐȦK]Æ´Áج?´îÚy®ReI×çN¯ýN…¨ã²šÎ϶uÔYXÎbx+)ì†*êÚc¾.}V >·ÍR¯IÁŽjȦ`%Ô1àO¡¿@b˜ ƒQ‹¦Z·½/³Àâ=±X7.—À¥?ˆOAk<‡CùY×ú&Ô5saûž§ªÍ6—L;„4¯$A¬ o’v€·EÓïY›“ÝŸÂÆ‘Z 5QzÓj(¶@‰ M:A=Bsæ …“%Í9@m:!Òû“ÚÎh| E˜…üÐö@ÚQç¶@Hƒ2›–(¾ ›–%³J2êÔn¥ŽËaLü3åBå¥û~{¨IÛµªPÚ!•¯yèÏvþ Ìz¯Ëbûqõ¡¾©e‡u€Îª¿}ÐY.(2¨7UâíqÜ­N—…^ï˜íM+*-‹1í:Jwá´cjÛ+KâI™UÕwŽT˜tÒ-èl(îÜ662â.¿úfáZ¨ Z¥vU“é¸Gd<ÖæßQÑÙ~¿ôS²³­}]Ç–PÝÏ@™¸ íU>³8Ia~H';¤]§øÞHgÇšûÜ6¦ÝG:ç$;÷Ùƒ4]ÁÇþëE6EÑ參ºŸë×óïÝò×Ð…¶2Kþ4ÌŽw_ã&4—[Ý«Ûlš>_Llž4 ,K~õ¶9¹DDDDDDt›`XOt Dº f!â\œ¸-|¸5zçÊB„!m….æÖ(`O'Î1MUuJKSýwꯩ9¤åŠCUãðWÓ^3Ò’ѹ¥nVÏÀà @¨5õGS©ľî¶ó¾ÅªZIÃycX§mˆß¼†¤ŠvÙ¶‚‚¹ðz®…ȬV½í¯ž4Qa§Ûuû•?÷=$¤óÚyïâ2¸´ÅæƒIUÛhñâ E Kµ‰Ö»}ï›åöí,¡¦V%@êv5mëmájS­ÍÐÚÎöݶýšÙmGÓŽ»Õ,ãÖôÜóûx¼:¥Û"iöÜÒ\€¦÷ÿlf®%ê“Î3×оjù`]é ùL•àmøîÓZ5 |{"¤=QÐì»¢×ø(Û«¯Û éS«š–#´½wº•ÿÒY—®0»gÇ­Ómc´}j¦Ë?}õã~*K<õvýÚ¡ Œí¡®Æã ¬sèå=k`­½«ÿöj:kÖìAŠék/b´µ…ª,ÛýS–Œ‡'"""""ºU1¬'Ú:×D–³0véÃoÔrv_IgË*s­ºíO–-™ùø/tZÕÄbí&xU„…ÞÏÍïAšÞå¦ÕÏÞЩJÔ0Mal[J>[ÏÎY•МHï¡iúX§&ݲ_éTâÆ×”¹>òËÞûù38óá –žêiƒíí1~i:û›4§\RP-«þÕÈžt@]êuÞü(†Ö³­Ûl@5…`: ZŠ:µÌ1)üÕα‚ZvÎ]µÖ›N-Ø­š~q³˜%ûí¬Ò~¾=Îè†Å¦óظîŠfÿqKÞÝÐnûÙii¯°ØÓ“sÚ©Ú–°ëñ=[_™;ž›þô;r]¥“ñ„YºÊCUÓVßÏZ8™…÷Z/ûÞ_ÁÞ<»8ËÃúÝ[™Ý\qX«ÀûØÆk<£?éÃ#&^åpWÿÕ`.Š[›[X__OmÅ4 t6ñó›Y=Ý&ÖíÈÚBÐJ.wys-p–ä¾’ÖA:“o»<Úï¯!ÔšÏK¶×¶@YÚågàêBȸø}ìKR%¸.´ùÐ6Ÿ¯ÁMϕھÄÐyöxiz·ˆÌ-{÷ÑWVû½}HªtöšÅѱºËìÞgþ-•v;šæZ5³~K‚móXµ3(SÛ*çtUCjC"ؾcn™› "Ò ‹M» DÖHvÛn—߯¶öeÅ–ѹwLw=^š+"dÛ»­Ý¡¾MwíTékgíºíö„tÞõåû„lÛƒfé^;qã2Ìù˜ínѹ²KŽÇ¥’ru[ªat—‡ë­ÚÏz³KêQCûÑÖ™Ëàœƒ5w_u½,ÌFP³0Š¢Àx2AUUm+#é &"""""º]0¬'ÚÝ"sÑÒ{/Ú§ËžsW>趸ÝŸtŠée!PÔNçóe¯ÛF2÷$KR/Y¾üÒ4niž&klZ¨´yr–vÚ¾Ä8XÛqªsQ ÎGù¡]QÄö1Í{Õ= Ñ qµÛ¯¿[,»¿ :×´>´5ÌóÝú·m„ùçÒ…-.å]:ÇRaR òYã øsmk6Ãf¥),ïÌÈm‚ÊÐ9ëÐljíì(Ú^ Ûö°ÙÞ΂͚}cnæmotÉvLOµ3”X;'Â.7R¿kÖsáTÃâ³ÌŸY½ÂÏïe?¾švF—Ÿ±pµ|¬ÔFã²îF-÷,ßîE°€îÐFaéÜêÛkÉú]ëv»%ö#iÛÝ~Çå’){öL7aÔ«Ûn™·Loîñx‡RUÔUñxë,Œ±è÷ûqí¼ÎÚüŠ¢Àhk £Ñ(õbb÷-"""""¢ÛÃz"""¢Ûå?ܲ @ìÕÞŽ¡Á`0¸£×[U4”mmassUUAdyˆ ,Kî DDDDDt{ÿÿ|ÜD´gvh>¯Û¾ ºkŠvüÀM³ì3â–"·ä‚yÇc‹ÔU­M„ÚCôú=XkaDn‰íz¥×AhëS›IƒÅE$†ô! ®k”e‰ÑxŒÑh„²ªÚuŒÕõ#KDDDDD·?†õD´G”ÑôÑqk.XÓFD¼G©€ÂÚ8Ä7Ï{È2[I¼¿Ü€ {ékè•nŸŒ³ñ ³FiÞ{Ôu¢(01Q–åÜ@Ý ºd Ñí‡a=ÍaäEt§MhïUYascª++МsP+ðµS±~+‘ö¦ªí-„€ªª0™L01QE{²‚ˆˆˆˆˆèN𞈈ˆè6Õ´ñu<êªFðƒÁ6ËaŒ@Ì­lwÃzï=¼÷mP¿5a2£šNã‰kÙö†ˆˆˆˆˆîH 뉈h†ùÑíGj”E€…>xô+ÈòÄÈum‰£KÚÐÈU|¨4mmªªBUU(ËEQ`4¡˜NP•%T=Ã÷›ˆˆˆˆˆîX 뉈ˆˆnu;õ§j¦¸Š@ƒ¢¬J„qj!Sôú5²,Cžç°Æ@Œiûnp¯»ô|ß-ào§ËR ØÞ‚gÙ³ùàQVÊ¢DY(ŠÓ¢Àt:…¯J¨†XM/‚7ól#ÝÞÖÝš<¾k.®ØYÅy]{lmPTùd‚<Ï1ÑËs¸,ƒµvi`Õíq{úýåúÞ Ð…Ð_Ðö—oªúEâ}%=gsÿªŠd‹ii1Mö5꺎½µK¶À²-EDDDDDtûbXODDDtªËÁÔuªªç9z½zyÎ98çRpkgQ· ŠÐ Ó/GÛÃþЇæ‚ykª¡íKïëÓ¢Àx:AUÅeõÞ_ñkÝ)~4á§?ý)^xáœ9so¼ñy䬮®âsŸû>ÿùÏãĉs9sæ þó?ÿÏ?ÿ<¶¶¶ÚÇœ8qO>ù$¾ð…/`8r"""¢[RÖZ#„€:…àEQ Ïrdyl“¥J{çŒÄXcì^I%DÖZø Þ#„€Jú¦7}]×(« EUÅû,õ&KDDDDDw FJêÝ IDATwtÙÒ³Ï>‹ïÿûF»Þï«_ý*¾ño~ðƒàé§ŸÞõþÃáßüæ7qòäÉ;r»={=þ""¢[PÛg×{¾Ž‰º1pY†,Ï‘§1°ÖÂZ‹,Ë "0©¿½‘Ôç~Ékµ¡zÐm•õñ±ÒVöWulkSN'¨«uíQױо> ™…†ùuXÖ/?‰°dølðlŽCDDDDD{âõ×^Äñãǯê1o½ö2î{ð“W|ÿ;6¬Føþ÷¿gŸ}öŠÓlì³gÏ^ñcNž<‰o~ó›w\•=Ãz""¢[×¶«Ké%ÝîƒBŒ8ç2äy†  ç²,k«í³,Cæ28ka\ês?ךf6@vYXï;!}Y–¨Ê2~=™Àû:®Gz¾ùõaXODDDDD·žÖß±mpþáþ?ûÙÏÚï;†?øƒ?À£>ŠG}§OŸÆÙ³gñãÿ/¾ø"€í!ýOû,Î; Vîommáoÿöo¹ÇÑ Ó ¡¯¸ò¢3ŒVƒ¢®kíZJF`Œm[âc`¤*ûn_ûmÃizÜ«*ÔÔ¾†¯=¼÷±~XÞ^–|Å®õDDDDDtWýÿywbeý~ðüó?ÿsûýW¾ò<õÔSW|ÿ••<õÔS»¶¸ù§ú'üë¿þkûýŸüÉŸ´mt'""º=(½ÒÊúþƒ°ý"òÝS;›ÅjöØGÚŠúnXßÞ3ÄŸ5CfÓ¯|½°|XYODDDDD7+ë?†3gÎÌõ›¿\ˆ~úôé¹û¯¬¬àïÿþïñè£îú:MøßöO?ý4¾öµ¯qè,ÝvÚʦ•ÍBåû\Uýü/–VÕ€`ÙcX+ODDDDD´s§­ÐÏ~ö³v˜ìOæ*Ök‡uC³.s·°ýFDDDDDtqwòÊíÔ?þ™gžÙ“ žˆˆˆèfÛ}€ª^ÁO®ýŹì$WÝ»õÒk~"""""¢[»Wú©§žÂh4ÂOúSõDDDDDDDDDDtÓÝqaýÊÊ Æã1àÌ™38qâÄÒû}ë[ßÚõ÷WêÌ™3s¯MDDDDDDDDDDtµî¸žõ<òHûõå¾^kP¿ø;õÈ'""""""""""ÚÍÖùË_n¿~úé§ÛÞô×Ãh4ÂÓO?Ý~ÿ…/|{ÝڮÌY""""""ºvw\XòäI;v @ Ó¿ûÝï^·×úîw¿Ûž 8vìNž<É=ŠˆˆˆnirnDDDDDDtí̸RßúÖ·Ú¯O:…ï}ï{{þßûÞ÷pêÔ©¥¯IDDDt+’ëx#"""""¢ksG†õO>ù$þê¯þªýþÙgŸÝÓÀþ{ßûÞ\¯ú¯|å+xòÉ'¹7ÑÇbîÔ;yòäu ìƒúßùßÁSO=Å=‰ˆˆˆˆˆˆˆˆˆˆ>6s'¯Ü^öË‚z¶¿!"""""""""¢keîôÜ«ÀžA=]/ænXÉk ìÔÑõdî–ý¸=ƒz""""""""""ºÞÌÝ´²WØ3¨'"""""""""¢ÁÜm+|¥=ƒz""""""""""ºQÌݸҗ ìÔÑäîÖ?yò$´!}7œgPODDDDDDDDDD7’»›W~·À`PODDDDDDDDDD7†¹Û7ÀbKœƒz""""""""""ºQ 7ÁöÀžA=ÝHŽ› jZâ<ÿüó ꉈˆˆˆˆˆˆˆˆè†bXßqòäÉ6´'""""""""""ºQ؇ˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMưžˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMưžˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMæîä•û›¿ùœ9sæŠîûû¿ÿûøêW¿Ú~?Nñ£ý?ÿùÏqþüy <ðÀø½ßû=|æ3ŸážCDDDDDDDDDD{æŽëï¿ÿ~ôz½]ïóÁ ª*;v¬ýÙd2ÁßýÝßáwÞ?~“É/½ô^zé%üéŸþ)¾øÅ/rï!"""""""""¢=qG‡õñ±ëï×ÖÖðíoû÷ïǯýÚ¯µ?ÿ—ù¼óÎ;¸÷Þ{ñ—ù—8qâT?ùÉOðÃþ?øÁðøããþûïçDDDDDDDDDDD×ì®îYÿÌ3ÏÀ{/}éKȲ Pž{î9ÀŸýÙŸáĉÁ—¾ô%üîïþ.T?úѸ÷Ñž¸kÃúÉd‚çž{ι¹–6o½õªªÂ¡C‡ð©O}jÛã¾ô¥/N:UåDDDDDDDDDDD×ì® ëÿýßÿ“ÉŸÿüçqàÀöç[[[€C‡-}ܱcÇÐëõ°±±µµ5îADDDDDDDDDDtÍîʰÞ{gžypòäɹ߭¬¬.^¼¸ã㛡µ›››Üƒè¶¢ªP ;Üš+Eä oWðzdÛפÍ»+Ãúÿú¯ÿÂ¥K—ðÙÏ~>øàÜïzè!XkqéÒ%¼òÊ+ÛûÆo´!½÷ž{Ý~4Þtá&"é#aþ¦»ÞæC{ižšþ7ûb±éÇÀžˆˆˆˆˆˆˆˆhæ® ë›á°‹Uõ@¬¬ÿõ_ÿuÀøCœ;w®ýÝ/~ñ üã?þc[Ü ¥%ºu-ð)Ös<÷Üs€Ï}îsÜ{è–ÑÌQèêžL2Ò”¼ÇŸ©ÄßKê9²ÌÁˆ‰ù½Dc ß<¦}¶Cy…Æ@_T Š ±?HœZ+å³I¶ ˶lùy"Œˆˆˆˆˆˆˆˆî6wMXáÂü÷ÿ7Œ1øíßþíõÿñÿ矽^¿ñ¿Á½‡n! uü2 ‡µÖB5ßÎ9¸<ƒË2Šª*a­Xc,Œ5°b¶U»·ÝpM¯{ÛkhÂzEfa~Ð_Õ¨ªu]CC ë2ˆµ1ôÚVåÇžA=Ý}îš°þÙgŸEŸÿüçqèС«zì‡~ˆçž{?þñßøÆ78\–nŠX®èÚ±:Þ@¬ƒ1ÖZXë`­…1fv³0AF` Lºƒ¦ø}‘ØÖ^^ºa½ìì>¢¢ U…U…q5\žCƒë !ÔuZ€¦Â?>k\Oa…=Ý5~4µíkNžÕOÃeCðÚC5@B" P_ê…¸,¶Æ"øu]µëšÖ:©¥N: 0ëq¡ý¶ó ÜÓˆˆˆˆˆˆˆˆè6rW„õÿöoÿ†¢(ðØcáᇾâÇ]ºt ½^÷ß?>ó™Ïà‹_ü"Ž=ʽ†>žn¾½ìWM¿Ý9f1é_±.UÐ;ggílŒ•òª /+€X "[9u}“ÁX±ý~6ûË_¼‰Ð[ÜtŸYÕt‚r2† 4xõPïQLGÐÞ‹>žD°ñ*€Ìרkï=|ð©NXzÁÂf\¾‰Óù†õDDDDDDDDt;‘Ñh¤Ü ´èìÙ³xìñ'¸!öÒ®a½¦Öï5ce¬uȲ Î9ç ÆbÒ@X¦62ÆZ—!Ë2ˆí!d«ù~¨íÃØ,Uæ[dyÖVácÙòÉìk]ˆë(Œ*$xH¨PÇV7u…­õKðu_ðU ­+ÀPAàa >ÀûuU"Tj_Áû:µÌ™ßᲟjqÁ ÷8""""""""Ú#¯¿ö"Ž?~Uyëµ—q߃Ÿ¼âû;nf¢ Ô·¹wª|—f°ªi¿×æwª0{Ë;ãàÜ, —æþÆÀÃAíp=ˆË`Œƒ±¶muç .‡šjú€í&Œ…AA-ÒüŸHÇ >-´HêSßdèˆ ¤Æö±}sºÀ„€Áà4Ô±_}¨a|…bk ÅèªéŠb cÖfôz_Â×%ª²@UU¨|B›¶^Ìâgÿ³PjßôÍY^/<5IDDDDDDDD·(†õD7ˆtþÕ‰§ õNø„Çö/qPl émŽ,Ëå=8ëAá!ð&‡æ«@>€É@–ÇÞfPãàE0ylƒ‘T…ofƒ]ChBz‰=ð» ¯ 12Ò«H|¼5BgŒ1i=¦/0’r}N+¸Í °›ûPn­c:Ú@¨¦ÐPZÃfÎ[8g`K ©<|Рð>ö¼GSpß–ûwÂüÝÚýËÕ·ÇQeÂODDDDDDDD×Ãz¢n¡—¼"Vm«Â0b ú++p.‹ýèÅ"¨‡…Ø0F Äd7@¯nq}¨‹!½ …‹‡»Òã PLJ·MÓ+_ÛÛȨš’+2«¬õôPÓá&>z^ÒI«Avàô÷í‡ÔªÉ&6×.`¼~Ó5XUX8˜Le=Ø:ö´/«~:…zt1qãI 軡zÛ¼žˆˆˆˆˆˆˆˆèöÀ°žè†ëTÑ7¡7$†Íbç ÎÁezýœËR€nàƒÀç}HoÆe€Í¡6ƒšŒBm1.¶·E€Â Fï6µÎ‰_Gݦ<±ø\`{é.±˜Ô^&…õs× Ì¯›,T°·­D °pùNú¨« ²¬C½U8| õd ÏˆÑÆB5E?³°¶†³%Ô”P(|eá}D+ªP„%eÔÑí…a=Ñ ¦í ÖtJ<Åæ0y—çȳÚ«±€±ë`à€lŸ¯ ¸LÖl09 }@b%} ÅS¯’*ê¢2ëK¤ŸÅúYô>»_³œÍo Ò­ksï¹D_!¢)îŸ=iÓúG4v¶¯Õƪg ÎC\®?D6؃٠z6PN¶Ê êÑ%@F™8¸ÌÃ×|UACц°Ð^ÁÀžˆˆˆˆˆˆˆˆn' ë‰nˆî„Ù&¨OcXÅÆÁØ6Ëáz}dyŽÌ9¨zx1›Á¸ŒíÙp×Cp9Äö“A‘£­’×ù—„(Œ(ŒV 2ëRõû¬]MgñÚÊúÙ’+44ýê11Ž×æd@Skß¶¤I¥õÚiíƒxb Ûî›C Æ@à`¥‡á=û1„dxÉPûÑ«ƒ…ƒˆ@C€†€ê¶=Œ1Ι1èçû†«b–®)•÷!ö‚×ï€ØŸ>¨ÆA¶ÁǯÈ\"6µÄ‰ëçÕ6Áh×µ©àWE ícÈïU °ûñ«P§ðŒ(òÞ> ÅêpŠ0ÝZÃÖÆBUÁfyߣ.&(Œ¦cÔe˜?A@DDDDDDDDtaXOtƒh ‘UD,¬³°yÆõ ¶±}Ø,‡1yl‹cT DD2¨dP“# ‚ƒ7ªip¬„àŒAîò¾ƒ³‚á`€áÊ V‡«8rèö¯îÃpeˆAo¥mw£ M•óªixkŒÛ˺Âx:ÅÖx„õ llmbs2FQ×ð¡Œt'˦ð~ç°¼ùͬPìÅ ½âÀHÀ¾ý1Ü·Š}««8rèV‡Ø¿‡ìÃê°a¿‡Ü@,¢1(—vBl;ú5vIË)Í’»â ÊjÅá(}IY⣵‹Ømb}k„õÍMlMÆ—%Æe ­C'(—Ìkû3Mçþf5mMûúA j_Ã"GžgèY…ë!6ƒWÁhÃ!LGÐʸÜA P­gW3t^q1™VàÑ-€a=Ñ "©AL¥¬?@ À¡BÓzÆ6‡¤$A$ƒ+ýÁûöíÃÁƒ‡pï½'pÏ=÷àðáÃ8røœµpVàœÀ@aÔCB …5q¸,!4ãmÑ4ÓÕìH Õu]ÂW±|fYæ0d8¸€I1Áæ¨ ë§8wq g΄K›µú˜™Çi´Mh+軚Áµ³¹š–C`ó> |¨1 %9²}Gp8ëCò>6.žG±¹Žj¬¸²^€Iñ|]o쉈ˆˆˆˆˆˆˆnE ë‰ö”¢…ð!ÀZgcz±ârã 6¶»1¦qX·‚ZÓÀXÉ &‡C†~–£—÷Ñë÷±oß>;v ÇŽÃpäȬ®®¢Ÿç°ÖD¦ € #ÖŒ¤ju(Tš úÅ<¨o+ÛUb;À‰¹¾(¬ÄÁ°¹ëcuÅ ®àØþƒ¸ÿàq\ÚãÂÚÖ·F%J¯¨4Àû{Ñ›îs£¼+ªq™5.«Q…¨BRå¿…Œ…fØgs˜þL6/¡Ú<¬g™Xg1™LP×>ÝÅl=ç¿bŒODDDDDDDD7Ãz¢ë@Ò|Sc,œÍeLž6‡¦V7âúÖÃõ/ˆÕô9œËÑ7í?€ÃáÈ‘#8räŽ=ŠÃ‡¡ß`8\Aærïk¨Æ€>ª‰_kPøö‚@aRCy‘¶¬½¥mkœï7?U (œ³ÈœCž)=õû{«8<<Œ­ެÀG¸4ãÒxŠñ£²@ƺx¡m½Ó}uÆÿ‚øoÓFGãöT‚Äö¹ëÙn°Š2ÏूßÂTa£)JÔuõ!]Û ³ ·5&""""""""º™Öí‰Åa¦±6ËàRzÉzP×G°}¨Í!¦{Ô#‡!ŒÍÑë ±º²Š+CÜ{Ï=¸ïÄ <ðÀ8tè Vúd.ƒ1ÖˆÄ6:FSøôºÆˆ!xTU¯F,Ĉµ1¤‰•óFâýÛö4±Ü]5  Š 5‚÷€ôzÆ8X„Ÿ§or¬ä†½ö­®àðøÖFc\ØØÄ™ pþÒ%lNÆ ÛISÏøTáß¶ºï ©m»Ù7*j,Œ1È]ÖeÈDœÇʺ†÷y?ƒ1™* %ê€Øwß6õDDDDDDDDtó1¬'ÚÝÀ7EËÆ ëõá\›e°y&ë¡vˆíClÖæ“ÒC‡ª®Ñï pÏ‘cxèÁOà÷Ý£‡aÿþUÜ¿ÖZXc`R¨šêtUøPÃZuYæb[œ ¨Ê ãj‚ªªb¨ç)äG ëãâæYÖ¶Òixà}òê«ø½ªÇtZÂ9k™éÁ8¨ë2ä+ù0Ãðà NòÌ!Ï3HþŠTE¯!öt‡¨Ö,Œ±°Ö Ë2¯¨ªÞ”U §Æ*\.me}*m‡un!¬—Ô÷Þ{¨Uå1p™ÅÊ leˆ^Þ‡ˆÀ‡€Ê˜Ú6ƒÍ-JUÜ{ì0ŒUX øºBQ×ðªA ±ÕÍÜ Çšû¢íÜÎRà.c,¤7€¯÷apèD &ܸ֡ÑN  *ïCÛÝgîUÖŸq>Ý ë‰>¶ùv*MŸwˆÀX ›å0.ƒIíoõlcVéC%ƒŠ…³= ‡ûqôèq<ô‰‡ñàƒáØ=÷`u¸Š^[͈&…êª 4½éSÞŽ8s.3Èó ý~c3L'%¼÷Ð ¨« óŠÖZˆ™u¤oÚà„àC@ð!„xÓ&·q˜N§ãu änˆ,7È2g0Ú¶×Q„Êãàê½Þ W0δ†K››˜–$sªÔ¦vòMŸú¤™ é䂤æ8AâÔé­¢'Ö:8#˜XA¹.ð21[ÁÚ eQ¢.k¨ê|[œøjí¿Ê9DDDDDDDDtƒ0¬'ºÒ z›ÖëÆZd½\>\Éú±W}Ö‡d}X;„HA ýÁ>œ8q?>ý©ÿ…Gy Çï9†~¿Pש}K|Eb•xÛß ŒÔ*ýƒAYÖC‚ªªQ”5`,¼ˆx¼BRu½A ç¡ñù˲DQ–(˪ k Db]»µF,&¦ÄhkÅÔ#χ€qX8dY|>‡ @4@ëÎe8º?Ž<Œ¾ÍñæÛïâÍwÞŹñX'¨BˆmmÄÆ»¦mXèl+Ç–=‚Q ö>Ì*àëÁô,¬2 ú=¬‰Áø¢ÂØ)ú™‡sÓxR¢i(¯¶õ"©=Pçî¼»DDDDDDDDD× Ãz¢="&õYYoÛ¶›÷aòXY¯¶‡`, û÷íÃ'ø$>ó©OãÓ «+«0“1B]!˲ÔÿeVIo¬ „µÎÀZÀÀZ›ZåUU (jÔuc œË`L†uíáƒÕõf–LWu R˜ëíÛ¨ZAjƒÁ`ˆÍÍ F[œûì½i³$Ivž÷œãKnw©½z™î™Æ€´!˜‰¤ „L >ÈÄßL~“HÑ`"!€’Î`fº«k¹[.áîGí|ìídò"C]ŸžÒ4- ¨(O ÃN”¦©IC¤ëØ ö…B¡P( …B¡P( …·Ië …/A¶¾1TçUUã›_7hUc¾É8®É…dÕ#ÎÓÔ¦“<~ßûÑøðÃ÷XÌ'81,õº:× IDATFÓ8ö&5{v§ŽÊûQ¬w8u§çòñÄúK6ŠõOß÷ º¤ * #ÆHß÷äìýÑfÈV3°Ï8GSç¹]wÉzùœºjP…ù¢¢ï1ÚDpY|ïõfƒ0/¸{r‡Íã««%?ÿ‡¿cRLˆêÁÙ'¯©›3ãP"*–Wø R54'0F?º‘Ô¯"u]Ð÷B)¥m|àeŠu}¡P( …B¡P( …Bák¦ˆõ…Âf/*;Uꪢn\ÓäLzß\ ZƒV †§ªZNNîððÁc~ïãòÁûïqzrLå]¶¸!Ž¢|öÏŸ°g[<Ö97¾@4’âúú–2Ú܈¢Þ#ª„˜°QL!\Ó(ÖcæüÞæV‘Z Q¥ò‚rqqIóôŒªr8¿QÄ’#ˆ)•«X®V¬¯6Ô®¡©=÷OOÙ|ø–ë+žœeÁþàÊ9P ã¿ÅxhŸ©Ä¼­zÌÕ˜sˆ uˆÌCDR`sö9CP—m{°|Ö! ÛÝ\»Å%ç¾P( …B¡P( …B¡ðMPÄúBáÜfÀ"7”b‘œ]ï½§©jêªF|¹šä*К$B…XÐ0Ìyôà!ŸüèG|òÑÇÌgSšªÂ©bÉ0u˜!dÜ·â5äB°{¡Þá\ötqû{Puxq˜ ‚¢*¤ˆ B°¼½I–Œ˜â(ðç³ÏÅk÷Ö7˜*z¶É©¼§©Bˆœ¿¸¤mÚIËl– fFŒ†L›–«ó+Î^¼àh± M˜55¾÷ó«ô1./èF/~D²—|J ¹˜l¾/Ý~¿/›«íНIN‰©Eg',TÁúè×>TÎSWù-%,îƒ#¶ýKɪ/ …B¡P( …B¡P(|±¾Px 7{tv¾ñu]Q©GDsnw2b’C}KŒ±†º™q4?å÷?þ1?üø‡<~øˆy;£vbJ^Þ)Jö‰ãçg˪ êˆÑaÀ¬6æ¤g ˜$RʹæY4ïi&.Õrƒ¼¨¨ýï+¼’ˆø]!Ùz6ÝçMÛî®ÆÖøGU™NjóÓvBŒ‹³µ¿BîŸRU‘­£SA*¥®Hâó§Ÿò^õY;#VÆï?â¢[sz.ÏÏñM³“äc´\ @“|?Ä@Òh—#ÈxTìVÀú>ëö*h3!‰ w@KCôs†'¿°A8"Îò~¶¢ÿÞ¨P( …B¡P( …B¡Pøú)b}¡ð:^ʪÎ1‚ .{Á×UC%U‡¨­0Ù¿brLÛ÷ï½Ç£ùøƒòÁÃÇœSUÙ7Ýc!YʼnÃ9 bÀȾóÂ(L'#¥HJ‰d)[ÖX΄GsÏG‹—1S¾®uíY.«Ë'ǧTµá+Ã{Ùh8c€ )X¢e½|›`O x¯4mEÛNX^mè7‘ÕUÏzY¶˜gèܨšŠvÒÐ÷}·f2x¼ Gó)÷îœp¾Zr¹YøR€n{æÑý‡<¼ÿ“£¦m‹ ¹,à+—…vUTêrñ×d£5‹ÙXüÕrÖü(Ô›‘…éý-NÜèá^=M[ãœãâjÍfÝS7Šó¹8nŒã¾`Ü—’„©jÏ¡tÎ UåiÛ†Õ²# ‘ͺg½êhZOU *’ÍæEhššÙ|ÆóÏ׬–Kšº¢O™6 wON¸Úl¸Ú¬¹Ú¬é‡@2PlŒ¼äHsË?ÒÁ·Á…dYØWõ¸vFƒ COzñœ!,¨E¼E’Ɇ]M[E°/ …B¡P( …B¡P(|±¾Pøl}ãýX¸UÔ6 LÐÕ\Ë£÷>äƒ÷?âƒÇr2Ÿ3N©ëï=1FÂ0ÐÔõΣÔ9œ9$åB³»b³fû×Íj¨×ìÑÏ]²uŽ Ôuƒwž¾»d¹\2{¼Ÿ ªÄ¹&H›S¤¾òÙbfô­WQD„ªvÔMò‡Ñ:§ë:,MPñˆÑ"*JÓ6,æsž~ö„Ë‹%UÕ01©=÷NN醎_þú7„~Kˆjö¬—·Ëmë{?’Ì÷–¦¡^ã<âÙfIˆ]¶ÂIGKœB¡P( …B¡P( …Bᛡˆõ…» ‚:OUÕTUÎRÏ‚r Ú´ÁÜÓ–vzÊý˜÷ßÿˆ£ù1uUqrrB]U»Ým Éš!œsãÇd±YUwâ³™ímoÞ| ¤G›˜ìc㣮kêºæòê’Åq‹ÈœÒµLýœ¹Ÿ ÞÆb¼g´ê1Dl¬7kˆuã²Ï{Jt]Çf³¡içÝîï® Äh`‚x„;Ç'<¼wºªpòUSBBL¢¸ÉœÙé}Žî=¢žÎѪÆU_¹qEé…oyâ5’º½Å†/ ¯{×7~íû …B¡P( …B¡P(|•±¾Px D@4ûÕ«sˆ*&‰)Æ‚vrÓ;ïqÿþ‡ݧª&¤$¤˜ÔUNël'3ŠõY¨7ú.Ñ­›Ubè`tAeë·n72ißf ¯ù·¡êÆ1ŸÏhš)CŸvÁÕe`è¨0’%bˆ±Ç, cn®¥„„a t„@ë=“º¢öRÂR3d´Ì#™õŠáR ¬6Ö] ïÈAhO§<<=å¸R©Þ®Ä!vÑÛ§›ÙøÚÿ^Ø_–$u¤ªE¦ÇLï>brtŠo[Dc2ª¬T(¾EntwùroÅKÆ×mïâãM¡P( …B¡P( …¯‚"Ö ¯@ƲͯªŠv2¡®<ª‰š>N‰éˆÅâ}<ø˜ãÅ}êjÂ0DÖËCÀ_54õtë³µJHF·‰¬W‰ÕUäê2pqÞÓw¡®ÜN°—Ñ æ çW õ'pów’ÅçªR¦Óï*ú ,/§Ÿ/Y^&œLI¦ q ë×lú%Æšm0ÌráØn³¡[¯p–˜V‹Iˬ­!ER $3,}?àœ‰zŽŽçÌæ-hâryÅr¸ZÖ›HˆàD™¨çÈ×ÜŸÍhU_¨®%ûÞr ŒÃǰ@@"°‰Â*UT‹{LOïQµBÈ+*•Ó];(¾í1éË&¹¿^ —WŒ&¯  …B¡P( …B¡Pøª(b}¡ðJ²,&ªŠ÷ÎW Ñ¢Rê1ÇÇïóøñ'¼÷è#¦Ó#, i0H‚"xçQ1B2Ý bB.Àê]MJŽÕUÏò²cèãÎÏ~› þF7‹›G~`ß#rø2’EBè˜-¦Ìçs*ß‚y6«ÄòªgµÊv<Ù§Þ0"P1Ãb"ô‘~30lRð •W¼Û¾g[$7á½Ã,±éÖôÆÇï=äî½c&ÓQ£‘>$úÁ!B2¼À¬©¹stLåü+c_F¼ÉDq­®¥™ÓÎŽpuCÓÔ8ïP'¨ ŧð]•Þbغ½c¼v0‘ëÛ¼„å&ŧP( …B¡P( …¯ _.A¡p;‡š”S÷5UÝ⪚ùü“ÉCªê}îÜýˆÇ>`1?&™äâªÉpâðªÔ¾F†!›§9«[DñÞQÕ"ÂzÓqqyÅÑIÅdڌڰðê¬ùÛ¸±­ØK?2K„80LX,æL¦–—kÖëŽËË5í´a2«³%æ”çb“f‰¾ ›Ï•ˆ¯ŒªïÀŒ#)uãè7=ðÁ¹Ä‡<àübMß\^^â@?ü T½ÒÔÙ§¾­kNŽT¿ñ7jü^¿&_4ÇWäz6q¥ž.˜,NXN°¹Ä¹@ò‰4€¥|(¾-ìK¶ù7ïÝ^3–lúB¡ðMŽtoüÂóµ¼½P( …B¡Pø¶)b}¡ð:Æ‚°ÎùÑÊfÆâè?üÑpïÞ'x÷€ª=¥#êèº †˜âUI꨽G†a E‡ŠêW9ªÆ£•Òõ=\]µÌæÚ*2f³ï¼Ø“ý?åZ¶·Ý>k½¶Iþ‡™ÑT³ù”ù¼eyuEß–K¥½¬¨›š…””\tVÙŠyfF×ú>A2ªJ˜L=]ñ^pš÷c"Ƅӊ!tXê™M=ŸÐ´çÈϽo&´‹&G§\öœo¨’8ìü÷m|”lûÂ׎vÿk+<ìöͯw†×yÏÖfklÝ76‘wìY…B¡ðe¿{Ùnü±ƒpÿÌÕƒ1ìö@â 1îkí …B¡P( ßE¬/^ÁΪÆW¨¯p®¢ª¦œž¼Ç?ùÇÿŒ>úÂ0ãó³5˾§Ût$ï*"B †WÅ{"„–ç_)Mí ½±\¯8;¿`:ó8?¥òì4²]V­ñ•èf!Ôµrt<åìÌ3 ݦçòlÉt:¥ï1æÆ,ûĶ8nßEb0*ï˜Ï[îÝ9"yÕ€äl|Kb€aØ .q4o˜-„!z¦3‡ó‰”zBèz¡ïC©EDvBýþn|Å÷Ø $åI½Á?9bqççÏžá¼á\‰CK¤2‰/|“H^ ƒmûÖW9ÂñŠ~uSñ/ …ïÂ7²B¡P( …BáwŸ"Ö ¯E©ªï**ß2ŸžðÁ{?æhñRËÕÕ€%‡ˆC$g§¦´Ï„U’Á#6DÖ뜥Ÿ­hŠc6k¹œÔœ½XRQqq~ÅlVsïÞ)*ÿÃlŸ .û ùíÿCŒÄQÉþú)Y¶ÛÑ[&¸&Ĩ›ŠÅ¢E$b ÁXozÎϯúDJ0 ‘ͦÇ;Å,²ºZ³¼ZúÀ´õ,Ž'ˆ xm[á½¢’¯[Ý4 ÃÀzšV¹sgNåéÔqtT3›W¬×u·Â4â› ¾®p^Qïwîœr6ôœ/—×2Ùwyõ§§&QlY³½/‹õîdÈ­ði¶ËâÓªA&sšù óÓ{tçO‰CÀ9ª#·dÜföCïïo*±úe[Áµvn¶këf UEDI1䦫‚ŒY¦–Rr9GÃvg¹ªô¶O˜ºƒ1$a)Œ+Tt×/D…miåBÞ^„”`c] p.O^MwÇo–Ò­Wç›Z‘òuß§Â÷·—öó]gKˆèX„>“R ¥€ºü=f›¡ "y¥¬¨‹ÈÛîyŸ·ÓÝ÷£ëwÉ®m«¨j®Iƒc™!R•gSé …B¡P( ß*E¬/^7Å»œUï]CS/¸{òÊŒåeâò|CrÕ^@ß êÆXÑU³zJ !Ò÷f.OHcD1™Ö´mELožÍ¦çêrÃf3Ð6Ù.çæzî[mX,R$†„snÛnì³”ö‰§i›®# è8?»"¥ˆQ¾êš"—+–W+ÆtÖr|4Ź„:ÃWççÞ{T«Õða¶p·ˆ¨˜Í=óEͦ˙õ}/„PgñQÑœY?MiêY.¾ÛÎC-õo›0Úõmæ÷ãûÇ@†i…Vt²`z|‡°^Òo6ˆ:œs£5ã„þï’tÿý˜x½2aöÕ ‡¢”8ÙYA‰æU."‚Ž"º¨•:LC¤ÄÖKJ¶!«Ý²­¡!Ûª£ý×øÁv0ÎØXr{»/Ùö…›cSú­¸O¥¿^ÿ ´¯½Úø Þ}/‰9èó²BmÿlÛ™EvIöFïDòJÆíw6‹ãí3̶ãÕø“4n;–ä13œ éÀþæmŠß5»œ¯uÌ“Ò …B¡P(¾)ŠX_(¼j^"2f]9T=ªŽeÂÕE ¥ËUÄÕ`µ½iÌÒ¶ÍxÝú½+fFA_ÈZÓV´“ç³°)}øüó<¸?§(:fªnµ[;³ÏÝy³éX¯7L§SY°×m¶ìV‚Ûf¾Z@]âødÆåÅŠ.’ éjª A"aˆ }¢Û„HX¯9=j9^L™Í¼³õ*„aàêò‚Ú¦f6«@:Ô)M+Ìæ ççœ<—C4¨×ìë¯{¯ü—&b׿‰ï,ŽfƳfQŒ s ÕtAÕΫ6 8ïqÑ‘R$Æ´ûÄïR-;»ñ/ùÎÙwL ºåž½ùÚ}•wúõûzI_רs` *Ęz/B 󘢢T¾aˆ˜XB4¯¸QURÌ–NYÀRjß"* !²é»ñø|¯RDÕÁ r¾³`mì a7¦8ç†Ka `úߊ¶ ïÔ¾¦¾ô®‚—üŽ}~á;;6ÞöÓ/g”õ²}J†j뫺¢jZú®Ã0i|æ$BŒ»P¯¸{0§§Bèã1Ôe[½0öi7~gŠ!`¢ˆxTÓnýüV4r+²P( …Báw"Ö ¯Ò"Dq¾Â;¿Ë¬©9±áìì É&Tõ”vfTÎ#.ËòñU†æÜ1&RÊYãꔺ®™ÍY͹¼X3e³ ¼x~Æ´u-mãqêH–'¬/MÇyZ¶¤ÈÅl¯.¯h& uSãñè¸Ì\¶ë•$"¢‰“Ó9Ÿ?¹ ë Ea³hš 'ÙÚbµZ‘B ÛlX-{RŒTµR7JŒf¾ïB¿»v)&†¾#„žãÅŒ;wŽ˜Íjœ¤öLçÇ'Sž~¾aFJF×o†€«óª€˜åøÇá‰Þ* |ñÉ®Xž¼‡(`ЏšºãÛ ®ªˆÇW1ĸë¿›Óe»UR)ùW_£Ûîã›·øºD–mãk[sðj¾Xpt|Äd2%%cè:,Fj§TâxñüçN•Y”W¥nóóÙ,!…]°öŽgççlž®Á„ª®PqtÝ@J‘I;a>Ÿ3™LhÛ_)É}סÎÑm:.//¹¸¸ ¥ß޶_?pËïì–~DéO…ïÁø¸NÊkFL×é|™ñÏ{?ZÝÀl6ù#|åP¯¤vÂz¹¡Ût`9¨ý8 ï<ÓI‹¯òt&ÅHèû¼L9¨¾=›”UUqt<£nª¼:)iH¬VK†8¬:ÒïÀxSxû¬(ãQ¡P( …ÂïE¬/§>£Pf¢c†–G¤B¥F¥!Få§?ý%1Lh&'<|ü®vø¤{Ë™W|Úv9·‘ËÌ‚YÎæj'-GÇ ÎϯˆÉ£±^ \^®p.a©aÒ6yÚ)¼bò–'mÞ{*_svvF"³¤´­Çc¨î½¦M,{ÃZ¤m+GSbP6›DLi\vž3Ñ®–+ºuO)•WœK aÉÅE¯j6›MΪµ‰¡'Gã”Gîr÷ΜÊgީжžÙ¼ÁyAB2†!bÀ’GTQMÛ³÷®yåÜô‹H©z`YSÊ ÇâßâÚ9®™’6+$9œó8Ÿkl“ül´Ñ=<ˆo}ê¼+Ê»½~c´èÀ½ÿ{¿v}¼׺ë­)Ö[ÈÛïøÁGüäŸü„;wï –X]]ðé¯Ãÿ÷ÿœÍf“ÇøqE¢swî>à“‡?xŸ¶©ÃÀųü·ÿö_ùì³',W«q½Ýwõθòü. …B¡PøPÄúÂ÷zbºEGÿgF;”œUßPWSÄj¼NqnBðÙ“`*¦³SœW\~vŒX“¿-zÄ_¹nºÓOÙ §!CqÎsrºàÓOŸºH×8?_ᜡN¨ëï²?k.&`Ž}ÙÔ8ž‹RÕ5É„õ*€ ¨´yšçAÕpn?T…ºñ,ަt›H×­sf|2R4, ëUO/b 'жžùQÍlîQQqêÚQ7£'Äuª99žq÷ô˜ãù„Ú„` BÓx‹)MãY­$Ã’CÚeÐm-ƒòeË âyµP%^ô?´Cýá5”mýº] õ #Í‘gxu£n¶Ù¯r°ïßi|_»’uët}Ûwç½õ·Q´ßOöíd‰ß)MîP¿µà€ì:íMYäÍWKÙFÆ~)¹¿zߢΡÎp‹¤!BØ­ÖÈ÷$eqX ‰æàa5á£O~Âÿò'ÿ;ôGÿJ¢qB­¡ãÙçŸñ‹Ÿý-ñçÿ/ÏŸ¤8ÜÔU=çãÿ„?ý?þÝcÞVHìIýšº2þÓ_þÏžþš¿ø-ËóKú!f‘K*PÏüÎ}>ùÉð§ÿç¿âþÝS³šÖ š"„þŽùô~ÆŸÿ¹°Äˆf7VÂ|Ãýà]Ú‚Ýø«Ü^„B¶Ï9lò•¤¼ã¶öá­/ØÛ«Üí‹ ûªÛÔïÂØx°êDmŸeŸd–cè6#Ýž;ör#5v+Ù$?äI8|=åî{?à£ôyøà”I% ÝŠ§O>ç7¿ú ÂÕÁɳ¯kN>âãü?z€KÏ?ÇiâoþKMß÷„˜vR“švvÊã~Ä?úÉ™M*†ÍšgŸ}Ê“OÅÙ³g¬G»¯hoYyC¾t|å7bû:È ·Ãï5öòãK¾XW¼mij·í××¾ó …B¡P(¾ ŠX_øÞrXˆK½'¥D ÙÇYÕÑTÚæˆ<ÞÍñ:#áâò]«Í Q£ž{ª…õñfã~šY½J‹3š ¸l1±é‰¡£ªjNŽçÌç-/6+^13c IDATÖ«1¸8¨k¥4„˜P/{-v'Ö+r¦<Tp•g:[py1puðÎÍÛáutÕÈÓÙÚ1›µœ×WÄ´&Y<´1ó7ELÁ«¡µ1{î?\ðøýí¤'E¡ßxǰ\&=) Þ)Üg>mi뚺r¬B«JY,æ´m“ Ô†ˆˆä¢˜£HB mmAv…`åšxÛBƒÃŸ&²°·v·p¸È}Ÿ%¨’¯“:ÅtzŒÕ†hT:æ ¦± L–¯eÖÛšöº9¾|eí÷úéߨ¦»Ýx[ÔÃåjà­$ ûÝë¯ëQrClÚ¶ˆë)×o§ì£—HÙJ s£‚‘=E“ù1³ùœ¦õÔ~@ÂÀêòœË‹sV«>©,çªVãnò\3C«&-! ŠQk.4«^qNðjTš¨4QXE “–¨-Á5PWDQœ¢F´Ñ¯‘Jj /ž¤Q«Ü^|Cª'Ī&xG Zmí@"ë©eƒ…³ðÍç_V™Ú¯Îþ²&\rk'~yƒ7åì'¾|ní›.—¾aìy³×ÿoçwÂmcÿËÆ8×ZÉ.K!æZ=jy\"?0m<¶¼²H76 \þEÀU¤fN¬g RáBŸQcYË…m®Õíi¦S´2¸Š^>E†Ô‘l iòw›Ò86(O¤ÁtZO¾”“ ˆ"’ q:¦>Ș{Ýõ±×-öûêžVÛï’“=¶‰ûgÑ K/{Å8r»ç×®¿ÛÁXj7>þµH¾ß]è·Áö­P( …ÂoE¬/È>§;¯hUÄénò£ZÑÔs¼ŸÒwb"¥D×/yúü7ØO « ©¾n‰Aáv%#‹ÐB‰a\],ñÞ3›M™L=¾OèŸqyÖ#t›ÈåÅïQa>khÚïý+“¹¶"|Ó¶\ž6›K]¡®Å»Uël«ª•é´f:mXoÀ™Ã‰ cæ˜XÀ»Älêxðàˆ»w™ÎÄeõZ|Ä$Ò…uU1Ÿ/xpÿ˜‡N8>ö4Í8yÝet‹番rˆzšIsû‚s}°±ˆ¦Ø×!ªµR„ˆ’´Fê ®™âêâ çÑ9bxeu‚oyÅ\z›ñ° à{<³~ÐyC¢)ÓÐÞÔp øü91"@;]ð“?üCþðþˆÇïRÙŠ~uÁßþ׿æ¿üÕ_ñ?~ösR´Ÿ<÷ËqƆŸb®íàÚÚ£DBèIژÁo£Wó6»?ãÌ<‰Šˆ#^«·«rB¶ÕQËõ"BLP7ˆ¯¼$€˜Œ`‰ˆáRÄRÌãèh½óMeÕ#ÝÉ~«?¢PøROÇWþv§R­×ypŽù|ÊlÒÐTBì×\]^²Zmã8f;ù^òê95Æz½áâêŠI T‰VƒõPUK7Çc%¡qñù»Jþöpû„ÇyT•¾ï¹Z-sð y¥¢åÏÊ–W%rS( …B¡Pøv)b}¡@.<¶ËŒAU5ŒHå•Éd†÷S–—+bÌ–9)Ö›+>ÿü×Ý;f~rÄü8g²ÚAQ³íÄÖDGWíozVË u]ÑÔn6áþ½»,/Ýê91$œ›UàLÖÙÝ@Ôïí,ÎV&2fN'Å9h›†ºéé6k.¯.ñu¢ª²§½Vc–ýÁÚ庮˜Î¦Ìç=]·ÂÆë ¢H@#U-Ÿ´<|tÊÑш\\¬Ùt‘ÕÄ+U#,ŽZî=8æáãSŽ+šVP5Rõùº¨÷JU;š‰§•š£ã~ôµ1ÒuRŒc¶ñÛÙÈÛfï”ÿo z PÕ Í¤e3i°å 4_;2vA„oCLyiúµü8r^Úf’½ab×Dï“<±óS¶›Ré~ŒíìNšŒ¼ÍÕʦ¨úlñPM8½û>ÿó¿øüéŸþ >zÿ>U·bõâ ŸýêïùÙOÇû¥4nFt<¤ˆ³@Ø\qõâO?{Ê´K,õ`ÕÕgË%«~ÀÔcIàÚú€ÑIZn+™=ÙeDÛžFV°@„ÍfÍùó§œ}þk´¿àÊ+ŽDëŒÆzž>_±ÜñÀ~éeÑL¾Ã-͸u ‰]o5_ön¶ {õ‘¼Taâ›g…ï×Û—íž¹cå—ÛÞøüÈYï1?{ª?™òèÃùÁûxx÷˜ÍÅS~ö·Ë/ÿîWœ_ BÜZÚ‰æuGbÄ0pöä3>­ýÙ”Ymzž»üp¬>èʲ= 3°ÍúŒ'ŸþU½aÚz4Eú«+ίVô1ã—|˾õï» ø.±…B¡P( …·¥ˆõ…ãÖÑ^ÈÖy2q•0™L& à 37ú¨'bX¯/9{ñŒ‹óûÌNœwYh“½w¸í–ë(Dºn@Eˆ!g¦Î¦S¼èxñüpô}"ZIÂWMÝÐÔ Î &é`š=Šõ*(BU)³YKß ¼xqÎÅEÂ{Åû ï«q¾§¼÷L&-³Ù”ó³ Fög—q¼ÓD;©8=r÷Þͤbµ:ãÓOÏ8;_­!„W “yÃâxÂì¨Å×Ù‡;¦„‘²Xo ¦xïhÇdâñUË;Ç,»H1Òu)Žç8Їbrͺõ¦UëÛLUå…ÈnjŸ³ôœ§ªª¶eX)ê<â²5ÏV¨¿éƒÿµµÏ›çpMH–[Rå·"†æöz-ëо¼§ÇWp/ŸÇ7'MeAú°õØ®¿ÞÖJÞ^ÿÈ¢Ù2õ í„„#ðì³_ñßÿËfyöŒ¦1b\a©G41t¿ü‡_sµˆây— ¤×êjHÎ^M–ƺ  .Î^ð‹Ÿþ-ÿé?sz4ASÄ+ÔÑøûŸÿœß|~NïµÜ* f;ûï‚ tPèòÐú»Ñ/ö¹mÐy‹6¿;߃]¿òl7µB½|=]öZß|…§‡¼ÅU|Õ~EŠxøåÇøo¶KlÇÇë5FKËžôª’ëcˆ ®¢žÌyðÞ‡|òû¿ÇGïqñä—,Ï^ðäÓ§œ[Äă$¢¬#öžþêï–|>­¨4Ðw+ž}ö”õjEÜ.W9°z“[ǘ­mÏ5o|ŒÖ\Îßÿbàìâ3ïQ3¬ïyúôœM‰2fûs{M†¯ÿž¬ê:(À#öªö7Wlöf-ýºP( …Bá룈õ…@J£‚œýQ꘣œP¯ÔmCj†>¡R!6ú¹köŠ¿Z^p~~Æã ¯Šs>§†/9?‘’ŽÍ…eÈuMˆ‘¾ÛPW-''Ǭב‹Ëå˜a›)b’hڎ餧mZÚI5 ÅYÌ3¹.©¨ ‹£)1F^œ=ãòòU¨ªšÉd†¨h>QDŒªÊ–<íä’Øg'RB4QWÂ|ê9:n™Îjb <{qÉÏ~ñ)Ÿ>yJUÍh'Ç„˜Ö3ÄžMßQW ÎETòË{S’ ÞCÓx&£ikǺ«ìûŸâèYŸ®%Áßœ˜îs¡ßeÂ)ÅïŠÄš\34UÔ×TuËàZU¸®M“ž¾éòáäø¦ðw}âœsÁÅì ·~ïÅ¿êE¬Un¬Û}ÐAAÞ>¸7ŽeûûÛ&ño+Ô½I¤Úïç¶#y7¡k¿YöNÞ¯ÂØßÛ©;™×Šyn³ò_wR!×y Â¤¦™žpÿñ‡üÞïý˜ã££|S Äûl!“@бÀ²ì#AÿýoþšgŸ=a6›â]$¥ŽhÙ#Þ’ñ÷÷+Öݰÿ—h—ÑbÔ´”xþì9õ—Éå§¿àxÞ‚½VP›Èêâ’'Ož°îºQäÕõOdÇýÛïÓÛzÿ^ë×îÏ;HËb^® mׂ9¹\ÌìÆxôr¿Üþ^nÓân•èóc‘\ñàöÈä>À oÑxIÞ“Wgì½Ôä_ÕԷׂÛÎë–‹+_ß)7î¿ço3n෽綀†Ý2.÷KD®µ“›Çñòws Õoô+иîæZöñ©ò’4œÇÍ”W!ÊÖÖFuø¶eqrÊâäÞ×ósId»òK÷JG».ƒ¡ëxú›ßðâéç=)¬È+Šb¹_©ø‘ >A $¹í[ŠùYù†ñÄlߋ޺­½aLÛõ(³ký2ÿ©×{›ö¼ëCvãÖÍvu눱»ï&7bØoXQtý\ïKoÛßEìÿ2žð‡ç\ˆ…B¡P(~[(b}¡°›Ñ)âU]S75Îû\¬Õy¼÷lV=Ïž>˶0cöU«‹KÎÏϹ¼¼ä踡®›½¿ó8O)±é6\\$âÐsuyÁfµ¡iš]¦ZL=UÝp|²àáÃ{\_Ò[¶è ƒq~¶†d ýÀéé‚Ù¼¡n<¢Fˆ6ú»æ€ƒªà4R7ÊâhÊÙ‹K®.WTþ‚¦niZ¯rv»÷½²•{Ëcž}~Fµwx§,æ “IÅ0¬ùôÓ_qquÁÏþwüç¿úï|úùsLítÆd:åɳßðüÅS~øñ|üÑ{Ü¿wŒóJŠ!O‘ÑR| wî.˜ÍY·¬ûšõ&@g8çó6^©›Š!D¢õD¸]ªzé`|»’R¦xu4“–¸˜±>óÄÐc"ÔuEìûŽ+·hq_­ •nc¼&Nªf¹Ä,á]…Ø®¬)CL˜*x‡ø éãµcVÉÁ‰8 ù"ˆ ÎåB¢;ß”²EQJªªÇàS­@Tq˜%ÌR¶RRÿΓmÑ\TÐ,a)à|ý’*£hfѰ÷Í5³™o~¾™ŒÇ˜}âͶ×9¯`ñÎe7÷òïƒ:i[L1æ œº}ã!¯lqR!ªWqçÑ#þàÿˆ{Ç  U%«7¶cEŒKÃ(Ð÷$u ¹ðr¹ä¿ø%¿ú‡ßàœ €“€ŒÂT·îé7$PÜhhcU[À‰ñDKýfÓÏ6\|öKœ„¼Z†´l]‹…D×möBÙ+‹Ûö«¸ªÚ‰({Ñò–ìÒCQn,½¦ã(Îù½ÀöÔ)ê]^érPe{ßPEÕ킵! ÄÆõ¨Ï¿‹1·ÉÝñŠ\W·Ø9Þ"· Cò²8lÛ¶%ŒVlÊ0ôc»Ü*`Š¢»8›ŒÜhç‡×òæÇÛͰøÊ*×¶Ø÷Kc0s\h–ûöv’äkxh!·Ó´tÙ]£¯‹*Ęv+ãD•ºžägiÄõ¨Ênœº1ìÇVÉϤ7¯!Ÿ¯ãXd1ÊA}Åêª|bÀ,!âÞúËÈa›y›IÛ1L4_íd6®H{³8œ Ìç6›Ûu?ßíc…⫨ŒÉ Y°ß® ḐSæó9ÓÉç ¦È0Œýh»šÏRÓõ ý ±ï@†k"ÇTAn­]óÒ]Û ÷û*#bà\5žçø T Ù§}!ÛíØËmVGk@3ÛyéÛeÐîß¿@vÏËm¼=°¬¯.§ƒä‚<ä8sÚ­2´m¢Éá~U1ÍWÌÆßmÇç}¾‡‡"øa<ðu ²d?þÆ·l·*U¾e%¼V8uX2bмkèXUñÞ3 )ÅýçÈ¡Ýß>rËõuÞïÆ‹Òkÿ¯x` …B¡P(±¾PøvûíDk;1q8çH)Â@²€Ó •ÑLdœ÷ýÀjµâòò’v²Àù7rµÁ>š±Þ ľgrV™ªGD‰1Ð÷œ*Mã¹sç„¡ëBO B0VË•«§nËŠ˜ ß{š¦¡iZêªB̈Ã}×E•¯4­ýÆ´_uŠ«ràÆÆä@uJÚ­jÈþûI¾>±þæ„4OV÷5¶«+T ¬ÏZƒˆfqQ–Ä­‘'ýYü8ð&ÞŠ[a!IHšF!TÆ Â±PðþFÁ/Ž‚¡î„T³C!öõ¢Óíç»=®E³÷UÆÁ^ðµ”­¶B†VA¢:úÑ“û·÷¹Ï¤”;t°”Hd‹ªJ-‹ AÆ lÎjVJl[…á0¤ª8¹w—O~ü#fuƒ7Ë ¥¢¸ªFÔ—ý8qM%“¼â'ÝfCgý(ή ˆÆ,Ö§QqIÛ›¡×šõ~ɨɿA’L£ÕW‡² ×÷‘as „}̓éu73Ã;—W¤WH!cPHEvÂ0AƬ=¥Wwd륹–*×TÅÛõ—Q´²±Ân.$>® Û”ªäÂÚF”ˆå€Å(´EŒdñv{ñù‘ýµãxNþZ;·WÈ@»,y—ÁÑ"C–‡îíp l  9 €ïŠ€gA:mWcÀäåÌn» ØGîYØFw«µöYþi\X2 ›ÛûaùaèœÇÛ?÷ÞVý*²Z_ÚéÞòkÌrV—]ÛàëË"¨í—0dÂï¢ ² !„a'̪ËâtÄH2Šˆ*0RÚ^9(|úVg¶Óo޳뚤ºî3ý±—ÆÇ×_Çí­ß ºÛ€šYö‡·m_Ø­0ÉŸ“RÂT0çÁå`Ö¤m˜Ô5•ÛCÏ f«ñÙ?žO<È`OÜXÙ¶=‡lÇ%(ÎôåGô×+eXÛŠÈš¿?lÇ‹”´búò}°—Û\²±ˆ×Û¶n|.± 톫›âº\WÈ·ûÙgë<’…\Ÿh|›ÛX:Œís öåë©Á~#¥˜ ÍKCd\¡ðVÁôñÞmÛ³¥ñ<Ò6з¯°_ðÅû·™cƒJ.¯¸1xîc*² V6îdãó{¬#óz{¸"Ö …B¡P(b}¡ð[€"âñ¾f!U L@“â¬"‘ˆÉX¯×\^^pt|—ºˆÖ¼<76] ö‘”õ®ªr–­%ú¡Ã;‡jËâhÂåeM×ç‚´yN)ô}äòbÅ>Ÿƒ ê\.Š:&¦Qñ^hÛŠù|Æê*qu¹a³èûç †÷Žºò»ìGAð^™M[泖دI¡ãäø˜ùÌóüüsþæ¯ÿ†_=ùί.Y®–+#ZÎ.Ö!²]è²F ÌSNNL' “ÆbjuªZ89=f2д ÑŒ¶õô½eëÕ1Ã3†@ßuHås€ã•R‡½4ýºiùð*}ÿÖŸ‹d±LuŠ9AÜ~Ëk~ß_±Z¿Ï®Üy. c¶Ùd2e6›Q×5ˆ¡bx—Ðûžå²ãÅåS‡á1ñT¾¦™M¨ÛšªR*Ô")Dú¾gµ^³^^1ôØý8 7 ‚EœsTuµ ¢TÞ™™’m‹†ŽaØlVË«}1Ó›‡›æ=¯º‡b¹rUUT•§ªj¼w;N3£zºÍ†õfC˜‘Ÿn½ó¶½aêq휺ª™´-Ó¶Fc#¢D$EœE®–KΗK®BB\"µMÃt2É¢0 ëÕŠmÝ2,Pßç÷ÿÑ'üø“™Ô·{¨Ç·æ'§Šã8(ñ²«þôßéܾï4ž’å9y^LÞäy€ã•×ò²SÛü 䲯™¥¸®GE(G!‹Ï:‰c’4%ËR²,·ïDZû–ÍX„bJ.Í3²4)Ðk/Oxœ~ÞÆ\¥ð?QRSFù™ :’8±ëRÛ† Å¿ýJ•ü+vE{>8g¿N]ó¯¨õÖA_¥y^`ãróÎü‹×G§ØË”RgÍBçL§SkÐ!\ÏÅõ\×CŽÐ$ñ„q#}/ˆP~„•i7”C% ÚdÇ¡\­Òl·gTÆ"i¦ã™±`,¡TP <”Ò¦(¡IÆ’I‚ÎÍysè÷‰¬â˾A‚Q(Ï#}¤ÉìŸç$“)q’‘jc'žx¥xA@>m8Ú{Eè{Žʹp¯”=?µÖdy†Îí=LœØƒ.¶Ä—Ãq_ ùÅ „Äó|ÏÇó]4)k™Žc;spa/u{L]?°™'Ú6Utžš4MHó”<7/Mì½ä”ÿ¦»â¢Ñj§9ìµØUª¸oµÓ©BI¤ÅôšAg9i“e™=_N'ÌW ÂÌù½m:V<Ëtj1ŽC¥¤>™N™LR+"äÖ¹©ûd!ÔKÇ!üSsaá°Ï¬¨æø`$ãL'†ÉdH6‰q]DZnúj­l¾¸ŽuâOËyì’gšîLƒ\è³¾¾ÉÓõ5FÓ (/¨âø>ʵF¹V“2‰3¶vh®m²´´@»Ý FHÛ I¹Z" RÁÉ<ÏÁqsò<¥ßïs°@ÿ¸Ït:%×9®p_õÀ~A5U®¯گѯ¾ôçÆŠmÒq®Â¤ rG9äRBžŸ=oJóûËpÛ¨xè·ŽQI„¬®®òúë¯ÓëõP®‹’WeÈlÈþî÷¿xÄ/?þ‚“±F#ñ£ 3ó‹,¬,ÓëvhÕËÔ"—<œ°¿¿Ïöö6>àèð<ËPž‡£¬¸•§ŽãÐjµ˜_\`yù µJ…Rá8yž3 ÙÞÚäÉãG<~üu­É ¿ñÔS¦\)Óív™Ÿ›cf¦K¹\B9 Ç+œšÒ8e4±µ³ÅúÆ[›[ O†$IjE:×-4a…-;.HŒtÈݽ¥eîÞ¾Åí«„·nÞ¡7Ó‚|ˆ+‘ ò)ÉhÄ/ñ ~ûÛOè§œ ÿôÔ¡yñkñ’ hÿg¹ZçÊ­Ü{ýµrDÉsñtŠžô)1ä`wƒO?û‚Ÿÿú>&Ë-NG8/u N÷ÄS4Ä)–A)E¹\bii‰…¥%aÁ—\ØÇý>{{{ìlï°¾¾Îd2fÇŒ§SȲâ}‹Â üꛕx~@»;ý{÷¸²¼LµRað<£5Çû<ýâ!Ÿÿî3Žú¤F#„ Ro0·°ÈÒò"½™Õr…0ð‘B¦)»ûû¬¯¯ñüéS676Hcñ’kÝœ¹·/XÍ/âŠ÷™ƒR×õ)•J,..1;Û£ÕjQoÔpG:Å‚fØpppÀÆÆOžFçxO½^§ÝîPo6ð<%•mÎÃñãþ1ÇÇGÁæùÙ1ɲ£ T.Ój5©×ëTªU×G"ÐyF–¥¤IÂîÞ‡‡ŒG#’il¯>Ò^÷. íVD×ð)òLd·çC™z½F­V£T*ã‚ðÅšN§ŒÇc&ã1GÇÇôû}âlzî|v"ç+{A0?;O­^£EH)˜N'¼xþŒƒƒ¦I†–¨ÔêtÚ34M<%qMÆÁÞ.›»;¸•Ý…E*õ:Žã°0;G»^Æ•¡s¢r™Ù…%¼¨ÂüjŒ”’x4¢¿Èî!±ȰBµ·ÈL¯K9”¸ù„ݵMv7wœŒÈò¯i²_˜Š”¢@朢pΆoÊ‹¨4:ôæz4ÚžÊQyqÌú“gìí0OmæG1Ið•­-¥p\×u ŸÙÙQâ{>AàºîYcqO‡ÄÓ˜Á`ÀÎî®E«iƒ¶)“e™m6žÞ?QLm„RT«5f:]fçº8ž!N&ìíîñìé &£ ¹ÎQŽCT.Óh4h6šT«U¢ t[g›×G2 žœ sÜ{: z–^ à«’-DѸJÒß÷©V«´ZMjå*®ë⸠åº8Ê!Ms¦qÌ}mÌ IDATh8¤læx<&N»ÿ›ó;ýÊ›mZG|šÄgÍ3©ª•J…R¹L­V# #ÛTÕùK¯5I‡ŒF#FÃi–¢óü Û÷÷"—uY—uY—uY—uY—býe]Ö ™þ‚``Å>Èõmbå›k+Š;Já*‡É4A 5dzüy$Zç¤yNùTj%rmÐz‚A’kë€ÏR R5E—ZMà®åÏK@k”°¸×…rTbZÊÉRÍt*˜ŒŽ‡H!ñý©4®rJ⸒°ä#L¡=´žòàþçüöw¿fkc‹d’¢3ÄÁ•!yfEá;”ÃFmr=ád4æèdÀ`<&,ù8Ê=s•mp=…r‹×€3ñ¤ÏóµG|ôË_³Ý26 ¼/qÜ”,0 ¿¡LÁc¾@6xÙUö5 ‘Â:Ó¥‡‘>B&‘¾Ä|}uí¼$>ýïn xét–yÿ{?àõ7^£R)ãÈ©ÇÈø˜‡î#•ǧ79™œ°´t…›÷ÞäÞosçµ;ôzªeŸ’hëÈÞÝÝec}ƒ_ÿꟹÿÅç<}úŒþ`lEoåÖêܼqƒ7^;wn±¼´D³^§V­âz>YžÑ?>fwg›§ñ»O~ËÇ¿úg677˜L¦$YŽò\9ed !Ëþòý€™^—••+ܺqׯ2Û¡ÑlF!®ç“y¦ÆäiÆîÁ.ël¬¯ñÙgŸòäÑcv¶w Gdy†ÀA Š†Ìùؾ–.sË×øÎ~È?|P—'8Ù3=a{í ž¯ØëË27î½É»ï½Ëk÷îrýê*µZ!Ïž?ãÿø?ÿ £á„·Þ|—?úñ[ÙÁq‰¢¡gÏËSİ’× ˜]X¦^kñîû©ñtÊ‹gñLÂÎÖLJcDjðÊWoÞæ‡òCîÞYÁ—92Qù™Ÿxöè!ñ8&ùWtŽ$¶Ù$^ÉÜ´t•Ü€V·Ëo¿ÃŸÿÅŸÒiT©.¾IÑãcÊîˆGŸýNùÝÃ5“¦§!œ ?¹9Güx®O­Ùbaa‘ÅÅ®¬,³re™……yªÕ ïS)—-Vå«:<zÄgŸ|§ŸýŽÍMFãI1³d± ä¯8Ô%ÆHP é:Ì/Ìrmu…kW¯²¼¸ÄÂÂ<33š:BJÊŠÍBpr2`oŸ­ÍM^¬=åé£GÓIlM'Ø#,ÚFHs¡Ù*Ïö)Ç èÎö˜íõh·[T+ªå žg¯Ë®ïã8g' £ñˆþñ1ÃÁ€£ƒž>zÄÉÉ Ói‚6vwâeì%º ÛðÕ9®R«7˜-~n½V¥•¨V+„Qhqv¯œišrpp`'¾ú}vvvÙÜÜ`4O§¤ö"UÜüPÿe]Öe]Öe]Öe]Ö¥XY—õï$Ê_Ôy ×›\eEG \W œ„RäR-ûT£ ‡ GýŒ$ÎÈ¥ƒ.®ïS®Ôé´{”K<·‹Fç9yž‘g):·lÖEç€pÈrCgL¦v„ØQEجÑx¾OE$‰fç$Sv)…$ËãqŽ6S²Ü²ž+•0²ˆ“Ó\Œå놑¢RÕ$iN'diÆà$FëŽëS­ºÈÈàHò<ÊOÄØçððþglmn§9µJ-~Xeff‘“á”iœ"ŒƒL%Õ¨F­YÂõ FO‰ÓŒãÁ€R% R­ó¯àq;®e#Bi\Ò|ÈÉ`›££ âL`dˆ$Ä"¤ë£…Dh]<ØfÇÁ«cï§¿Ÿ;Y/f¾Ðwúg/s5)=œ †_jLcr=¶a«BX‘¹`EŸ‰’ÿFÏuBHŒ°H­d©Fi¦ÇÌòêåOä¸zŠJúLÇ1ÍöcDPbþj¾ûC¾õíïqýÆu–g©V"<”ÈPò4ciqž•¥æ[U®ôÚücðñ'÷é›)•f›•[7ùðÃïóîÛ¯sõÊ"µr™râØ#iœ°´´ÈÊÒ"«Kó”=Í?ýbÊã§ÏÉ´>s, ©PHtžž£"ŸR­ÅÂòÞÿÖ·¸{ç&7V—YšŸ¡Y+ÙsÃuq}·v1’ÄŽÖ/L–¸~ó:ÇÇû\»±Ì¯õÏüöãßððó‡ #t¦ d€] ù^ ŸJ½ÉìâeT2ÅÍT>A‰˜f§M³;‹h_ã»?üs>øÖ[\¿ºH£Z% Œ1ÄIN³Õ#çˆr£Eg~åHdWQÅÔ‹å¤[ã¸Tª ÊQ ÅRåé“L˜i4pˆ¾R®Öhv:tçf ¸zŠ«Ç¨lÈÉ¡C½Z)°Vÿʺ[p&ÍÇÔæÀ Â(¤Õj±0?Ïl»FÅwñLŠ“Ôé3Ü]£…8²v)/Œ Ü(¢;·ÀÛo¿Ç;wXY]fqi–V³A£Z&ðlÀoàyH¥02cÈsC»ÛcùÊ„éxĽ»÷Ø\{ƳÇøä7 ~ýñ¯ÙØÞeg¶yj„Š‹³!ÑÒ#÷ʸ•6ݹ–æ{`rRàJƒŸk^tÚTÊíÞÍù%ÞûÎwyÿÍ×YœëÒjÕ©TKø¾‡ë¹H©Èòœv·ÃüâWWY½2Ëì\ƒ>úˆßüæ’Ì p¡ˆÉ<ÉÏxѹ/$j¶YZYæ­×oñöw¹}ýJf£N¥\&Œ,²„\ƒ¶9 Ó$en~ÄÊÊî^ãÅõÞŸç7¿.óñÇ¿fÿhH’‘’4ÏΦ% ”Ý0¢>Óã­·ßäµ»w¹{û6W–©”ÊTÊU‚0D*…òJYÜ©.¦ bF£Óш×ï¾Æîö&¾øŒOþ¹Éo>ù˜çk뜌bŒ,ÄÈ ßóÈæ¯Â€|Œ_|m$y.ÑÚÅ÷«Tjm\Ò¸ÏþaH©Òœi±¸¸ÄÕÕº*å*åJ}*MJ…çùT²Œj³I³Ý¢ù<¸ïóôÙ:‡ƒ˜R¹ÂÒÒ"7®­°´8G­VÁ÷=<ïGÅ:3¤:'‰Êµz•FµÌrvwv9ŽI…âì, \Ç6_— *Ñé°¼¼È•¥Eª•2¥r‰0ΰ¯ædÆd9“iL{vÞñ!»[ë„¡ÃÎæÃáÀ ’œ7®Î.QBb”‹ñJ„õ6ÕÖ k‘*®R®ÔˆÊnÞ»ÃìÜ"µjƒÈ÷ñ”ÀÄ.åR€ïJ×ÃS.® ”Bº áh„HíTƒ+qŒƒ W¸8އŽS×%+(&×c(‡!õZ•V³A¨ò‰Oøv­è ƒ,»vŒÍ˜¯¦Ô‹W”{a.„3;a©B½Ñ¦VV¨l„ŸÇkÑ^ESO c;˜`…kåáº!µj•«×®1¿0K§Ó¢ÕjR*•ÏØõ—tžß óÜÞêœ8Žét»ìíì°µöœ­õ5vvwˆSCv†±?E·99ãú8¥¥f“‡HGPÝ?À÷=õÝn—Õ«W™›Ÿ£\©àû!Žrñ\ÿ¬i¦9H²ŒV«M·3C«ðøÑ}6·¶MSÎ…óрΊ{c(„ëSmÔY˜ï±²J’å†É$E*ß·!‡Ë'÷|Ÿ°”SJ2òlHžÙ‡É\ ²\“f if9µ§™‹QÉÅqYVp“qñ}‡JEÇ'ýY¦‰§y6ÁuûH!”‡”Ïx‘BäŠñÑ„_|ÊÖÆ::Ïé´;Ôšmr­Â*‹ ×8:rxØg0’SH4ÍJƒ™¹&†åZAa8žEe¾‚”ÖùiÝe9~ ñ|ëg”Ëe"&Ú#— ¥vŠAy†(ÆÅ©r*Â_pÞŸñI/rn^ (äbXÙé3º@(éWñJ â£;=(¿â¬Éóoþ('H¸dÂ#Sé’8ŠL#Š@dŸ (”êx寿ý?ü“?å½wÞ¦^«P Ž£3´Î‘BáG!•(¤QŠèUBºÕ2ËÙÙ>Æõ'Ì]»Îw~ðc>üñ¸uu™fµ„Ô9ÂØ0ËÌh¤t K%Â0 ^)17SG¦G¤£]öw׉ÖÝg„eÝ*éZF²¶®B¯Tcéæ=ÞùÖ·ùó?ÿSV—çèÕËTCEàÂ8ŽA \Ï%ËRËÃw<×'Ër¼(¤Þª3—ÏÐí5è´*TB—|<äÅÓuÛ˜2 Œ —² rˆãŒ8-ÛÒš²5¥„ëâ•J´ç˜oßà½ï|Ÿ»wWè4BtlCh³Ó‘~å‘kAœåLó”Àó <ƒ]WºHÇcz- YÛ`ÒS×½”ˆÜb¯¤tq„c…A!H5x\@Iƒ’a2”08R}mLÞÅ_¯þ_Q4N'‹D@¨ ‡¾ 4U(®Y$6zŽB¦‘[ì:ÇäY|~¹)\ÜÅÉå„%zËWyûÝoñçügܺun¯EµÙ@_‘ãþsa BIr!1´É *e*µ*†Å…9®.ÏqkuëómJ >úÕox¶¹K¢%&+2Så9j&ã3H$IÁ¤—(ÛÈ1%$¾«¨U+\kö¸öÖ{üàÇÌÝ•EjQ€ç‚ë)¦ilÃEí#¬”(UBº3uf»5:í2J$l®?ew¯O^„;›"ôñt/…«:j̰tû5¾ÿƒïóþ›7xãöU–zDjl6„´)y¦-ÒI€ë‡Ô}ŸzµŒ™i°Ô­su¡Ål+BÇ#~óéû2c¯–CnR`¤Àñê½9n½õ?ú“?æõ»w¸º¼H³VEbs|µ.šLŽ%àØì]”£p}ÕlâKE²²ÌÅYV»5*H“rÿéºE<]8¼‹y3ñ* èBÿÜ|óÕÛ ÑÆ!×.ÓT’i‰'%ʸ®¤V¯à!·îÞavfÏñÈÒœã“ÒS¥XÊCº>a¹ÂLw–Û·n°¼4O§Y#ŠlæM–¤ŒÇS»ç]ø´HÏÇñ‚jjÓ¡ÖjR©FønŽ41[› ÇÇñ…P_y–‹ ‚I¬2 #@9Jù4[3ôææ¸qã®à¹ÂÀt2Á$cò,“‘LÆìmï'*Q­—©×<¤äi‚H3Fý'ƒ)“\âxƒþ»‡œŒ†dyÑtÏ3\!ì+>#)•eÿgöZ¥‹&¿ ·6œ·Î7¹³uS\ÿ_¢ id©@8…i®ecwÎôÒœ³í¸žO£Õaii™;¯Ý¥Ó©S­FDQH–iÆã I“¥6SCIu–7à6ã%#JÕ:õjZèQñ%Êdì N-—ÿ,‰Vœ»Ú#kÁD \$Rºxž‡ø´ZMVWWY½ºJ©T"N2Æã1ynp¯˜ÈÅ}a‰È ƒÍZªdc¦“!£ýó 7#Îçí>å€p)UÛ,^YáÞík,.t¨×\Ç:Ø“IÆd:!ÍlS>Ž\ÏÇó”ë–«T«ŠF½A«Ѭ×ð]Ÿ<{Áh4"×ú¥«“A`¤ƒpC*õ&K×npûö ®,Ìz ÇäèdJ<3žÈ„=¶§YGŽãPŽJDaD¹\¦V«P.Gø¾‡6š4ÛBçÉ—¨¿lû—‚ýe]Öe]Öe]Öe]Šõ—uYÿ1Êî(Cg¦A·Û V.Çp¸Ÿ±±33…<#Cº½Y—hÜVc4y¦ÉMBžåè,Üò/8çÕÚ¯­Èž&š$Nq”@zª`ž&(¥¨T¢³`¼ÑÉ”$ÖVü1VÄŠ§9'ÇN'ê•zgRGE>•J‰R©D’ô-ÊG*F£)GG ¹ñÑ&"ô ¾Rä:%NcŽÉ´¦ÓžaùÊ¢rÕŠŸ¹CÅ/S™©S–%vòŽ‡ÇŒ÷ŒÛ#äL‹¹åE23AÈb!×6`Rœ"Šñk4ÆäøK«]cq±Ëîþ,ý©Ãþ çxbH⠞㢄c“t‘Ö•ú/±´¿’ef¾¢i󕢑6 ÇŽÜs1ðòßûñít<_‘ ‡\(r)È…°$R88nH©T£;;Ïw>ü×_¿Co¦Úº-•²”u1~/”¢T*QT–1èøìÁÕ£!«wîðÁûïsmu™¨¡×uˆã!¤cE•¼ÀÛHGÑŸãƒÞeû Ÿ~þ;Ž'»$i¡Sþf¤B8„K½·À;ßþ.?þã?âÞ·©ø’P¤ÎÈâ WpBh„ä§.]Z*Ð`r+þ7[-Þxó5<©î2=9&žÄÄI£l^ž¬¹øh®‹†Áe AX«1e™ÎÊ]–Væ¨Ö"iÐBâ)…4  ¤ã Âä 4Zd8ž™ýžŽ,P®v£sÒ<Å)„xÇó1&'MòT“'à*W9Ä9VéH„R‚B 8\eñZJ9ˆì•å/.ˆõâeÑþ©½R~ýI"Š=Í\X‹¯¥R¸®ƒÎrÐÅ>äú”Ú3¼ÿ½ùOö¼ûæ;´š.~ A ²Ø~.mƒ²!Ë4Z:há Y`ð³ÌËJ¥Jeu…ÅNRè!¤`òÓdcçe@YdV!~2á’J‡\H›^P 5¤’(åâ{ËËKÝyn½÷·ïÜ î9”°ø˜üË/m†ˆ¥$ž#ðgfð”æø`‡Ÿ}Ê? Íh™Š&ˆAçE˜h¥Æâ|ïû?à/þóf¥W¥[dÙGØ çL' Yœ.ÊuД+q”ƒ3Ýõj@¥wöéýÇ'¸ŽKšië’÷=’4'h¶Y¹û:þðøî‡ß§×lP =BW¢$ÄÓ”Tç82@ Èrû²ëÄv$&·~P-­¬PõA§cF“[{ûôÇ1ùYð­üßÄ}ºZ·µ ׆ ŒèõzhéÐíÎ¥){ìïÐï÷™¦)nÒhuhuºÌtg©”J(éâ LbÔu®]¿Îò•eJ¥ˆÝÝ]v¶×韜0™&$¹¤ÖîИéRm·¨×«¸RÚðoeX˜ïÑ?ØåèøˆÉ8ûò5*Ï‘C¥Þdeõ:óKWètÛÔ"£SNú}öw÷ØÙÞæèèè,´øÕtææY\º \z³…H™ŽÉ’)ñtB’jòÛ\:ÍM\¸Žç‚°™(•ZRTb~qJ¥Bn`41 1É‘  ‡¤Ó„£“]FS¿¹_mpõÖ*^ÐÄQ¦ŒØ|¶ÆúÆ{ýáx$ñ„áà˜ÑdLnrÎC–5ÊdÑ8ür.9ßd¾)‡Ã¼’½ñr[Ò üæ½&8Ï÷8WûÅi´ ‚R•ù¥î¼ösó=J%%5“ѽÃ#öv÷9<8bprB𦣭Pït»3t»=Ú3]ÂR…F«IèB9´ù;“Ï2ŽSNüÑ`î´öZ•ÊqÃV«É•¥+ôf»(GÙ,Ý}™Œ§(å\ý€J¥ÆÒò ¥J GÙ Šnw†þâ{û»ì“d┡þ4Ø Üˆ¥•«Ü¾s‡ÕÕ9Ïà{cÆãkÏ69::á¤?d0“METk :ݽ¹j•ªÅµÚ¨"€6Ë5Ïž=g2É Áþ¢^.‘nÈÒêMV¯ß¢Ûíâ8 ò”á°ÏñÁ{»»ìîí1ŒR!q\Ïìº.¥¨ÄâµZ•0 ‚€……”’“3ô-r2)²‡ôå“Ïe]Öe]Öe]Öe]Šõÿ!ë'?ù ó7Ã_ÿõ__~—Âàû.‹‹ Ì´TJe²ÔegÇam;ãdâá0»°ÊÜÜ"õz¥ì±Î2Ò,#Mm°—ÖºÙ<´2µ ºÌÆd•JÜÜA…’C†V\ „G½QEÉI>) 0Z0žd §gB\Í\Ïâ7ìûIŽCTrh¶ªLã1ÓIä$IÌx"QNŽRX­ô¾GPoО_ĉ":3-nݹƒ0Šõ[ìôÙ[߯*54)§0ˆ™ì÷µOp—fi4š(× ”Àq<«³‹‚ËjÄ…g3;UP¯VYœŸçd0f¿Ÿáì‡#R!P2LjŒ  ¥´‚sáÌ:óÑ‹Ó`=ñ’Vo¾AÃU|—gÔ‚s|öAúsdã·¾ø7[¾·xIb>ý)\×enn–?ý£ñö½[ÌÖKÈdÈÁþ>“\àú¥r…¨ä‚4[ñËu|j7nÞáÝwwØ;°|m•;W樺0<ܧ?’kC£Õ¦R)áJI^è¶ŽtpÓjÏpûÞë¼õö¬íþâ“ ™Ö˜<'·Š.¸^©Æ½7Þäý÷ÞäÞ*‘ƒød&ÇdS¶¶¶xòì)_Ïr¦ã›kk¼xöœí­]Ë³Ï '‡G|þéŽOƤ:''ÁaÖ¶Áw–q*2™bõsQ?ÿ²¾)¾^àz¥]yæ`å\Êú½ËûôõcÐÆk*¨wfxÿ»ßåG?ø>o½~—v#Às(» L&#öw9<Øcwg“Ñ#|¢J‹vwžv·G³U¡ä D*‹€ÚÏ‘¼ýî·HÒ ü—ÿëï8™äLrÍÙÎkN›¢xO¿6U8‹ƒ¹%Þ0ŠêL—¥•yÚ¡d|¸ÇÁÉ€i’ ápo›õµ5Ö^¬±½µÍx4´!¤Åg– IP­ÑÜÞæà舫W¯ÓjÔ‚·Ý!Y^"žØð߃Ãc ߘÊ9G_H˜é4)—+D¡Ïöökë›ì2Ž KpÍ”£Ã]6·w˜æÙá”ú”Û#z ³Å}E’ ‡¶¶6yòä{ý©E­˜gä:/Þ“<›Œûòkº›³¼‰ IDAT¸û|Íj)ÆáΦ˜¾t…ü×_jeáÐHðB:s‹,_½ÎüÒ2Q @[G÷þÞ.=e{wŸ££cF£Q‘õawKG9lïnÓÙÞaaa‰«7nQB¢¨‚;;D²spÂÉhB6¿ò._¾ÆÛ×c³M*• KKK´;-&Ó1/Ö^°±±ÅÞÁýþ€8Nmó^Ú@úf³Mœä,,­Ðl6=‡RP¡Û›¥7»Í“µ Ì8#KµE-*—<Ï1Bâú!ÝùEnÞ¼Îâ|ÀspdÆ`pÂîîO?fíùÃá„É$f'–lçùa‰Ê‹ —X]Ya®×%r3=´”ÄYÊÑñY:EÇYq±7á¸8¥ ³KËôz]*%’!ñtÈó§xðà»»û ƦIBšgHÇÅñ}\×# C66ÖX^^fqi‘nwGº´Ú-æççY[[g:ŽIã1&7ˆ¯ %¿¬Ëº¬Ëº¬Ëº¬Ëºëÿß­¿ú«¿âïþîïxüø1W¯^½üPþÿ®Õ ç{Ìt{ÔjU/Bg>ždf6#¡N……¥k4Û‚ DQzå¤iJÿyA)rñ}…ë2CJƒëCµ0äybêLŽÖ.iª™NS|?Æu\×!¬Õ˜[¹†WŠè´êÌÍ/Ç9ãã ãÃ1Óá# ô(y!QE@YRv|\-ð„Cäø‘D:ÆòÞ±>ŠÐWSŒé»ÊACEÌõz¤4ަDÑÕò “L¢˜¤šÑ4%1šL@.mp£6ùËB½8Ó1Ï âÌ‹”œ‹ÇLÂýEQ_â¸)þÆ+dü—:ó/J#H4Q‰•+ËÔÚ³të%v^þÕïÐxãÅýý=ûc’LcTn H…ÛóU&ói€²1§{Í¿DVÿj-ÿ¥õõŠXÿµ $ñå•©uF’Úœ¼€¨ÞfùÚM¾÷ÝyãÞ]z:®²SØ ãaŸG>ãþŸòôé66·ŒbŒð ËMnÜ}»÷îpcu–²´áÞÒH¤ãÒž xã78ÜÛáɃ/øâÙ&é`lQ8FbĹة æµ.Ä{)¹1¸~HgnžJ½FXŠpDÆÓß}Ì£ûØÝÛçd4%w•uNNèôëŒÃâüô5 ¥ ;ÓF Éx4à‹Çyö|ãÃc’©&ôeF21H‚Ä r‰Ë乯h@¡­5“ñ˜ÁÉ £QŠŠ‹6fcÌ—¯i…0ýræ§ùÊE"NÿâŒâûÍûœø†Þúiã^H…ôKÌ.^avq‰RµŒÈ'$ã1»Û<~ð‡žrÔ0žLI³ ×uÑy†Î5B)¦ñ”þÉ€ÑxŠWª²ÐëѪFDå*®av¶ÇþÁ!ãá> ^çÂ=Œ(ö«,׸@©17;KšÄlonñèñÖ×7Mc’$%ÏÅWp—á`d›Y^ˆ„AéxTë Zí6ïY,"6Y InÒñˆÊ5V¯^eaaŽF½Œ"Æd »;Û<|øûîs¸{D’äŇ@H‰P1ƒá„£ÃcF£ YfÃ{çz=*¥€Z³ÅÜBçÏ û'$Ó¸8övHǵùÍ¥R„#sÒdÊþÎO=äáƒûôGSÒ2£Mnƒš›ñà:.‡‡‡ŒÆc2†a!¥"Š"{;»L§vìí|-ŠË Ëº¬Ëº¬Ëº¬Ëºëÿ#ÔO~ò“3¡ T*ý«¿Çßþíßò³ŸýŒ¿üË¿¼úÿ?+ΟršíÞ@à(R¹Žç—AúíÕ%ÝùÆ(§F«3‹r-r&ÏsŒ1dYfñ7§cë§¼cC•(GžZŸ†zå™&‰3GA]Ö1®…ÑAˆ® ÒÄ¢¦“Œ,µb¿’,ËcÚf yP.¨Š_„§f A(©ÕC’dBšM ¾¾´Œ} Išf.R)œ0dvy¨†>år@»yÂäxÄÐŒˆDˆ‹‡„R„׎Ú%ªå2iÀUÖéŸf_-îI!‘R$)žãÒj4Q* ÑˆiÔÚÌv‡ §“T³ß²sЧ?3I5hÚi§þÅróÕ÷òTÔ0¯ˆâÂýÁV¾?äeZTÓ)âÖºîqšF%ç}zIÆúú:?ûûÿ›_üâ#¾xô”±V”›sܺ÷6¹ ¹}s¯UCaȵ!5GHüR‰[·®'S¦ñˆµ'ü·ÿö_ùù¯~Ëãµâ\Ñì-ðÁ÷~Àô#îܹ…ë(”©!-Lv‡«×®S¯–ÙÛ?&Í´ “3 E©Raqa‘×îÝ¡Ûj#sƒ4à(4ÓÑOžðóÿù÷üÏŸýœkë$`œ 2Øæñ³Zí.íF…F5ÂU­-Ã?ð<:wï^ç—Ÿ<ä³§{èLÇV1Z"½>Ûß$R¹øQ‰v§C-ž"…f÷Écîö€_<âéÓç˜,G Ãt:bcó›»Û‡L (¿FTîðÖ»ïb ¿fŒ!ÏŽwxúè ~õOÿˆ‘e >&ÒŒ$ÏÉì¸Ây0íé23çkϺéõ¹`ÿŠõÿjiß¾ ѱ'ÖLj8ŽG£3Ëk¯¿Ã»o½ÃâìŒ ªÔ–•靖dzÌÚãûüÃÿøï|ôOñðñcû,EÇA¨é–¹ýà Ç|ï\›oày® ",ö×v·ÇÝ;·øÖ{o±ß?æd4 ˰ˆb=ésqšOÊ‚ëûtfÚV™ŒNxúä?ýéOùøãß²³È`š2Ñ’ÖìÞùöøö‡òÎ;wQBM€…’•r™+ós\¿²ÄÏvØíŸ3Ú…ÂñKTÚ]®ÝºÃÕ«+te\2| nÑÌY{ú˜Ÿþýçþá#¾xð‚Á(#ÑZEˆ`ùÅcp¸vußuñ”m|ÖZ-nߺÁÓ;×xôä!»Ÿ=g”Ù G¡<Ür‹vw‘^o–z9°Y-Z#tB:íóèþ'üôüÿøÑ/ØÙëÓh¦™$Ã!‚r¥N½ÙåÁƒ§~Àûï¾N·]Aꄉé8!ˬ¬¬R.•q”²¬÷¯–ýƒ6êÓf7§ ¡<|ak89:âÙ£Gllï3L0YºøûÚg9û667©5[T*5‚Rˆ£|¢H’óäé6/ž=æñ£ôû”pmãÇL–’iA¦!Ó°öbn§Iµäc´FùQ¥D©Ù*úL7€ã(|ÏÃU’éhĉ©cŽvÙ(,‡»$i†«œ—BÑ…4žgGŒ§)µæ Fƒfµ„§¢R…Z­N½Zao×!ÍóWÔúW.V›ÝQŠV³ÎáÁ![ëüî“ßqttÌt<ùØ{“`I²ó:ó»ƒ{ÌoÌ9³²F,APIEÉd—-Yoº­-4ö¢Í@ã–FãŽ4r-ƒY/Ôf½ؽÄbk ÈAb¨TeUV•ÃË7Çî~ïý{q¯GÄ{ù²ˆ‰ñÕùò…‡‡ûõë~Ï9ÿ9„ª dFPøHúÔ¶:"( JY”2hmɳ km"Ã<£A$DQCðQñ¯–tðJ¥¦§…Ò^žÔ|†G>Ox{}0¶ÁÚÆ—®\cs{ ¥…P• Ç<¼÷>ï¼ýö™%+e’:;ââóàd·oÝâÎíÛ¢lÊôIÁÚ„²(é»>wÔ]6¶/rîüy67×p¢É[&Ül0M¨Ô‚ôEYòf—í <óܳln¬“gšP”Œ‡ÇÜ»s‡÷nÞdçáå´D‚Fé,Þ÷¾rTÓÝýx:ŠÏ½Œ‰"® gÏI+ì~U«ZÕªVµªU­Àú~½öÚk|å+_9ñ³K—.}¤÷ŽF#¾öµ¯ñòË/óèÑ#¾ô¥/­ÀúŸÐÒZ“e6-4”2ˆ&cGÞÈQÒ`0 LÊÀÖ…Ët73*—!ÞàœÃ­XRX•ÒŠv»‰s޲¬¨ª’ªò´»]šÍ­n‹²( ”Q1<•€sžbV¢Sjif£J Ñ( ív¶£ôÐ÷)‹ÎE _DáªÀÈÍ(‹’ªlƒ@«Õ$³‡‡ÖšÍ­JPŽ=š­­3"Ãဲt´Ú=:ë=z£5rÇç¶7p£-ÊሎÉÙj¯£Š€›Ì¨|ÉæVÖöY»Ål2f#XrÁ,'u/À’)R üˆ dư½±N§Øì­3š”LË’ 3öúcÞ{‡›wð`ÿçcL´ î£-àÕ“~¸ü ˆTQ¢¦N4©×ƸêG’;¼§ª\E%ùÚ‚sØà1nÄßý×ÿÈý‹ÿÆw¾ûöeQùîöñÙݵÿ‰s[ë4¬ÂÚŒ U±ãa[¯Ñï;¿ò?ø//ÿ9ß}â-Ž)E£lÆÅ+—i5ÖÈE´&‹GÞêpéÊUžîiî3ÑÊ´ÁXK¯×ã©kW¸zé"›kmZ6†ÆW-EÉÍ÷nñ½ï¾Å½{÷)gŽhcaR0xÿó×Ë O_åÊù-òÍ™ÕX“c”EiÅS×®réÒyò†¥t˜T »¬­cÒ+ÄÍ×ù<§•oPŽú<¼}‡¿üÿ¯|ý[ܸy—½Ã~Tá+A”#H ŽÊU„J¥¢,* 3Í\Ga”Æ*…*Küt‚Ÿ:œ.ðŠZ¡É•#XÊÒ„Wï½» œO0~èDò€=¿žu–alƒ²ØF—+O=Ë/ÿ³/ríÊEÚy>wÁ2T”“>;ïßäÕoü%ÿýå—yóí› Ç.YLÕˆšnðÉŒYåXïuÙêþ Ùf±ÑF#šf«ÃÓÏ<Ë¿úW¿Æß¾ú-ÞøˆÂÅÛ(û\öýŽ/!†æ:%ØÌÙ6å¨ä{ï|—ÿòç/óñÿñÞý‡Œ ýîɸuÿ€GSO¹òô§h\ham<A…€öB«‘ñôµ«lt¿‡áxRkC»Ûãú³/ðéÏ|†K—ÎÓÊyÈg:ðÚw¾Å·¿ùMÞ~û‡G^e8 JUÈh‡7¿ý·lÛäŸý‹_ãúS봃ƹh7µ¶±Î§>óŸ½ó"o¼w¢4ePÚ’å-ÖÖ·ØX[£•ƒžA¨<:”Ur÷Î Þ½qƒ»·î3Eõz%QÕ­²&£ýŒ 'ôº¹pý©KÌFÇLŽŽ™ì<¸Ç;ï|—Éxœ‚¥Õ'Ÿ—Oç1 8見»;¸ýîMî߹ˤDt èq÷"%ÁŽ9Œð¢p!ÒÖ*¼›òàÞ-vvî3Nbˆ»Ô¼^žC€Y‰—1{»ŒF3BPhkQ™¡ÑÊÉ›y õ >†‘+ƒ °ZÑ?<à­7ÿžG²¾Ö%·0qçý»Qï£õÙdEð(íQ9ê(] W€6´Z-Ö׺hõ$PZ±èõ‰ e³ÝBfSöqûÖMŽ÷)¦“8÷èjúDîKm§=εÎP˜Å<"!þs~‰¬R°s Ò£NûÈ+¼w8W¥¿×Qî’n¿áCywy´?ãØø PÖÒ^[ç…O}š­­M¹Á‡£b÷!÷ïÜeçÞǼIÏ1UQÖ• ‚¯ÞFý!wï¼Ïµ«O±µ±A¦:—.]âê•‹Üyï&Ué’µSê:H‹šÕFÇÌ_0¹w÷.÷ÞŸ~¿ŸÂËIÏ ©‹Q›ø¬¥4ý~ŸƒÃC£ •W8ш²´ZMÎmm0 (‹ç…²¬ ïÒݺÀ¥+×¹pá"ÜÜ”é蘇÷îpë½wÙy¸ƒ+=JǼˆDVð>=#ÅÏöeÅîîY«Ëµç^ ÑiaŒ¦Ñjñü Ïñàî=†ƒ>£Ñˆ °h£Éy êMcÄ;WCˆ–[*fîˆHL®»Šc/8Ïl2áöíÛìÑlµÞQΦL&c¦“Y öUO f_ÕªVµªU­jU«Zõ?äFüéŸþéÇ~ßÍ›7ç ýr}ùË_æ‹_üâjTýÄÖ’j XB°Œ†ÏŒÒ;#GQjœÔal’\V¥E‚Vø7Æ`2‹6¥£j\é ­A<ÞGP9Á-mQh¼  DˆÀmYúÇc$ÄÞÖf—f+†“y_ÒlÖÖÚTÕÓéEUEü^¯Ëht̬£Œe­×esc ÜŒY5FÛ5Î_ÜÀ—SÞ/ß§(‡¬µ;œÛÚ£É6[ø–]ÑÈU ÍMGØÔð±€eåÜBM[Ú‚Nn0A°šV:Ãê.Ág4š0˜Ta•Ü*† Šø¹ ±¶Øyìl+uƹ²4þdg}øÀÿ?|‰ÈÜæ'Zõ¨Ø‘‘çLÇÇÜúÞ|ç›_çÝwnppxC‰© L8>ØãÕ¿“ú+ÿŒgŸ¹ÊÆù&¡òå :oÔŒÑhŸ;woòÚë¯r÷Þ=†ƒ¾ŠV1åxÈý;·øîwßäáίqq»‰jeÉÃÀâ±h“Óh¶è´šäÆ`$f5h~6åpç¯}û›ü_ÿçWèuhñ´¬Fû+³aŸ÷oÝâ÷îÑUL}òR*'> ÜÇ•ná° ãISÖ°uî<½^/BRÒ¸[€Ì'T€* ¼G+×EÁÞýüÝÿø+þú/ÿ;o¾ý{ý1Î)¼6É3Û£TE_'ÉJôÒö¨èÑŸä<÷AR ¢" ˜øûªvr6É“{ÉîAGk„'ûP²9ð“¾/„¨ž%ÏYÛ:ÏÓÏ}ŠŸ}égé´Û1@B ’u Ž÷¹uãM¾ù×ÿûwo3#®jR,þ.^Q ûÜ{ï]¾ñ·ßà¥Ï<ÇZ·A£Ñ$xE% ¥,­N«×žâúõ+¼w÷!“G#œÝlòœ E}m;Q–ÀŠGÊ!Üâí7_@êÆ“)EÐ¥ Sòhg‡·¾÷o½ó.[íçèl´‰#¡Ž€ˆÁÍív›<ÏÑ*vˆY»Áæ¹mžyæ®\¹D·Õ/X ¸ŠÙdÈîÎCÞøû7Ùy´ÏtZâEpâ@G8?¸2Úðþ»ïò×þžíJc½‹Õ0d›.ré깆Y…¨£5¼I#k`µA\ĺr£±Jã4Mò¼µyî©Bb8‚«Ð:v4ŒG|ûïþ†éè€õÕlL5áfS¦ãƒþ!{û‡¸Ê¡T´¬€?t‰!¨€Ñž²š2ì÷ö©f³¸æ•gqö# ç¼tΣm†FágSƃýÃ#¦£1ÁE‹¬xþ©+A<Ì&eéðAüÓBÐ* Ñ„4)ålʱLÆcööÉ3Kf ø{TU±ÑQÅ.' ‘€T?™1O˜%.¼IÖ0:‚™j šHµdµ°s«»s">ÆðÎþÑUYDàµ6ƒ'¤ßK$åR‡Yì”&Ó‘ Ô‰ˆ‰°4Zkt×61™å ® ˜ 9Ø{È LY”ñ3UM‚Ïynæ^W‰lªf3†ý>»‡Çtº]šy‡V³Åö¹s¬môhµ,“IXÚùx­´š¦]E»ÃF£E§Õ¦ÙȘ•.ug,†Xø+‚÷žÉdBYÎ0Ö@H™ ÎGë?tâ^¬ÀúU­jU«ZÕªVµëõÕ¯~u®ˆÿ(õòË/óòË/óúë¯?öo_þò—ùÒ—¾´Q?Áu¢ÙZ@‚&8Ãd"Tx É£¨âÑÞ#!ûÖÄvî΃½´‰Áƒ:–)­P¼¯¨*…Öšà£Ú¬~O qÊ“ek#ð¯´M@|ÀXE»ciaŒÇZa8œáBô#VhD4ÅÌ3dF– ±Ö`l›†Ñ(0VÓlYz½6kô§EEQ”XÛ ÙÊ) G9›Z9N- ›Lhn4ðÕ:³É€ÃCTÃÓÜÈh÷º„¶¡4É­v†Íp!€gáBÂIýb±[·¸k„ O†#àÀZ+Ãm÷xð¨C§Ù`8­¨\ìQxYÞè+.u 4PêÌ•Ùbñ®üÕ˸]”F0Œ&ão¿ý·nÝâàð²t lZÇóú`ç!÷>âh8âé‹ D*¼ èè,ŽŽñþýÛܼs‡ãᄪrñÖ¡A|Éèè€Ýû÷Ø}ôˆâS— ÒYxJ´E06£Õl3×FjÞ—L‡Ü¿íùËq­ã¾5t<ï:8|Y2M9ê˜:CÏ‹ˆG‚g:PN§„àb(0!ÙÂ:£Ñê’eSÀO t<&fÔ½!)£U„Í'ã!Þ¿Ë믾Î{ïÝâàèˆ"€2Ž%O¥÷¢$%FexP:yj§ÿDJ):H|¥¿ >e.G9ZrÅPܤù]ÊVó€æÐÁ%ò±¡ ‘¨ìVÍŒs¸tå*ç.l‘[ÒÑŽs™ÏdxÄÃ;·¸ñÝ79<<¦¬<œ°ÇXF¼ ú»¼óö÷xøhŸëO]¤Óia’oyPÛê²uáW¯]esãíÐ@Pu$´¯ÞE‚ÊHIU yx÷&7o¼Åûwï2Ïp!i²k6ȃcöwðö»oóÙç/py³ÇžR„ý¿U–ÑhµÉ¬c_<"Q1ºµ½ÅÓO]ãüfffâ˜K9%•+Çìì2W”ÉÅDéHþâKwÐ?>ä½›ïò«¿ús ¢XÔ`šmº[çÙ¾x™n¯ÃÁ¨O‘T¯*xÄ9\¨*Èê{c›<ý̧ùùÏý"•ϸ÷à;G FSBécWDâ¹±ûpÊltHf âK¤šEõº¯Á1ÎÒM0’g$ÿ€½R©«H°L|Ád4bÜ<‰Ùš›ò";¼”.P: w4•wL†C&ƒQ²øPñ%ñÚ¬Gf$oT"ÈK\åñ!†+×÷{mH³Ë"JU_±ó®(˜Œ'±ó@EÒnVTI6`9KóæÉRƼóx/ˆUsðrޱ/‡È"€E€wã6Ç£ƒþãáï«¥S#ó·G6´&=dNL.ì±NÄ*„ÓRqÂÈKÎ$jAð/ì¿X²ûøª ÔaÅ蜬ÕáÜö9šy†Á¡¤À͆ úÇ ‡cªP?Ô|xy˜N¦ ‡c¦E…(Í-ªÌh7tÛ-²l@$vpt‰/£5¡( ŽŽŽ ÉæåÃjô¼/§ôM c0/2¿?.î/–F«Go}3>ƒ*R⪠G‡{‰T ñ¹BÎ çã-¶«‰”³‚£áˆ‹•áÐ6£ÙlÑ[kÓîä4† Á{\9ÃWÞ·ð(‚Éèmlqáâeúƒ»{û.àç§\-ÒÄÓ=RBÀW_Ra>>T"ÂTݰªU­jU«ZÕªVµëô5$O€ IDATø³?û³3ÿíµ×^ãsŸûÜü÷N[Ý,W§ÓáþèVÖ7?é@½H ð’ôçÖW¥f:JJEÃÉAcÉÈh ÉÈ3C–ghmÓ¢&)TTÑjeÑ ŒÕU…s%”F£}î‰þÞ–äy*ŠP ³BÈ3EžYPYz”GiÈ ¬o4h6!Ï ¬føà (”Ê“g¨P£Ã1ÖFà_éc£ZÕZE«³¹¹Áxì(Ë’ápÄtjY[ïPdÃþ„Ù¸ÏÚZƒv«I;ר<Öîb³«ˆ*£`±h_hšš¦U¨\ÓîeØwïßåýÝ}¦¥H£ðH?1>>àÑΣq‰[‹ Ÿ AƒR†v«EÃZ àE¢†øjÆl$ܦ6z”SòF£u<A$C5Û4l†Ê"@†7chMºxk@‰CÄ%-gFPy EÍ!ù¸®× -¢,^E€ Z‰*kë+†G{ܹ}“ïݸÁá`@%‚²9b ¡ Ñc^T"îÌB¯ìDÔ°V²3@ Zâ+^ÁEŸ‚ö"X/b63?$òr„ûDZ6u†×Ä’ºQÚdl¿Èù‹çi4£Ã–Ø+ ‰\šú<ºww0šB¥b51·¢ i»Ú3õÙyÿ.wv9>ÏúÆ:]á¯2L£ËÚ9áêµklm®c휀÷I68sÿÿ¤ü%*8”Lq³>÷ß{‹ÛïÞ`gg—ÂE@J© £4TS†ÙñoÝx‹Á¯~QÛˆŠdVдFg ZÝÖæ±{B"!Óh5ØÚÞä™kWØèæ4¬JÞÔ VSç9­Î›ç®Rª… 4ò64Þƒ«í.šm6ÏmRL†äx4‚ó§5:ïÐÚ8ÇÖ¥+\¸p݃)ÓiúËɈÉ`Àx4aV6HPx±ØlŸÿÜhw/ðܧ?Ë·^}•ï¼ñ]î?Øa:ž£™N§ÌªŠ"”…çp2Lc! )ã|´DTKÈ­N@‚'À?ò|ºƒ¥fduTÖ;?e:1Í@"ѵPyŸ"[E>PUŽ¢t¸#xïFLGc\á¯Óçj+%`´Â'+Žª*©œ‹ážY´¯ÑFGFE2.Á¢ â'¤||PT*ŽI·ÑI¯U$öO$ñÖ¤ƒ6èV—v§µ!å×,Pú?Žª&Å$’”ãá€aÿ˜Éhˆ¸d;VOjsu=¹ÆÖ`9<Ö¡¦âþêÔuÂGÌñTJ}´¯°¬ýˆ¬‰÷® 5É[ÖzŒT(Ñ~†+F¬q€õÑÀ^ ø">cMf…Ò†ÌZÚ­&½n›Üf¥Ç-u*ÔÂ)HÅ<¢(è÷™LƸªúÈ`s­¬/]ˆ–„JÇ|–4ž¡»±;®ÝYc}k;*Ò©à¨Ê)GGL'S‚€1&ÞŸp^s .xú£…wx.hrmèõÚt{M´ƒÁ…¯*&£‡{»l43lË¢ó[¯ò¬ó(cÐêÇ£Ó²¢J$Ym ¸°LJ9Iì2ÇZG{šlZR¨x¿ªU­jU«ZÕªV`ý¦¾úÕ¯2øÍßüM¾þõ¯óÆoð‡ø‡|ùË_æ•W^yÌêfÔÿ#ª çF¸±g\ 3çénôÈl†U9 ÝÄš&Æ4Ñ:O€Îò&|\ i°Ê¢DS:‡ó©<øàñ! !(’zÊ •¡(e.ä …±*µ9G ­h4F‹,3LfZM˜L<Áƒ6ŠÌ´@³Ù”ƒƒ#”v]º½h‡=@5fÎ¥Kç9>î3rçΈŸ}éy¶ÏmÓé´8Ø}ÄdR’éÁ6(ª‚fÞ¦³Þ¢Ñ´´ºEfr²FŽÏ4ºa1¹AL o¬×DJ/Öýe%žåÙä2Zb˜¤Õ¥`ÄG`Cƒ1èÒ:þ×û.XüÉY¶„ŠñxĽû˜U>)ŠO@=Ñ»{4âpoþ`ž7½Žà ýö8î(K$ ›„¨æSMCŽCÆSOYAÃFP6v—+”Ñ4ó¶öÔ]:ÀZi¬±øà âÓ¢?§ šV¯Çææ&ÝNc[ä6Íf ¼ó8Ze\»v§®]¦ÕhD<·Æ²¼Ô:ؤd?%={í{›ŽM–k² Ñ¥Bù‚áá;÷îópg—ié(}À…ñÑYô V6*©‰êà /$m{> ¸:…MF%}z$»AHùÑ¿ÑãWG hC@Ñë­³¶¶»–¾¯& %0ôÙßß;±9IGd(J‚U*‡„)ÅdÌΣކ3.VÐ0$›‘€Q­36¶¶é­u#Näk`2ÚIÌAP¥0JEOqRŽ)úûì?ºÇÑñ!Óª"‹¶ù‚HT ŒÕdÂÎÃf³Ù‰s;÷k¶†F«…µ&}/Xlfiµ[ôº]&Ú-«Tj±´Úk|êÓ/ñ¿ÿ¿K8¦(«JÚ xI׉"h6Y½ Ö{[h4Ö$8¼2å4;._¾Äí»Ì&TeÁð`ŸÃÝú‡}ÊR¨ x#§(¦±ÎsŸz‰KO=Ãç¿ð«<ÜÛçàð˜Ãýöïßçæ»ïðî{7¹sï{ûø9HæÄ`²òN¢eœÖ±Kl Ç= 0ýØSµ*FÓcF£#¦Ó¾òX2*µ|ݪ"ø¨| ¨Ó¢ ËWUTÓªücp.ª¶h±ˆ2m©ÉHI&W(“îÛ,MUˆaó6†#Ì|à›Ì7s:6Ýn‡N»C»Ýas3ª›—PÄ-*o"YÌi¶Z³Ù]€¸s[š¥–TÕõÎ BÏ Äd4$¸HòF¶åcÎ gNV'-Zdi¾¥8ó[º§/sgÏ_›7i4Z‰ÄpøbF10 ˜N&¸Ê/¼ê?Æ¡)ª’¢ŒÄNY)r™Õ4ò,v¢[@Õ ò$ :v“Å,¤2u§ÙG¸F\ð‘P !ÙÕÄ™fÎuÌO’"o¶èt×P6žŸ²r GSFãç=Š&m—ò,èØM2ê0ì2ZkÐhgdVÑlµh6›ÉòÇ D᪒ñà»wÞe£× Û¹D3o“C·×ãêS×ùÔg~†G{û<|´Ë½G Lú\Y¦©xÌ+É ‘”/EHfXj)”]P«DÙU­jU«ZÕªVµë85F'‚c—Aø/~ñ‹|ñ‹_äw~çwÇŒF#þàþà·ùì³ÏòÇüÇt»ÝÕ(ú)ªEó¶ ”ŒÇû¼öê+”.'¨&íÞ½ö§h7šäY«ˆ˜HË<=riI_«7uôÁPâ$‚ž>xln ®bZÎè4Ö­£âÉÇmŒKL¢_q37Ø:;K|T5iM£a9a¥2B3žD?|/>©ï`Võ’²ì²á fŽ1ͦB‰¢,,“±f2*9ØÑn7Ø:×Fë5T0“$#ˆA´Á4-YS¡›…V6†îƒ²e¢=AÝe±™«Ä昽:;Sˆ>Ô˜Œ¼©Ès‹ qÊ2õ.¾iAiA…ÑSY)Mìg«~OŸ÷'¨¨mø €K„"$¾>ÌôƒÀ‚¨A«É„½ý#&³ŠàëÁZ i@e -®ô¸²Jy)0PÀ;(¦3FÃãÑçJ”Î’-Ž¢ªÜUžñ´dZ UÄ"£Or N/)g%^AeQ ]yTfi5»loãg_ü9ž~î®=}™s7étšèZbˆ¡hƒHü>F[ºÝמ¹ÌÚF'ÙšD;©xŽAªè)Ï"¢pn±â‚^B@‚'@ ¡ >ª”“ÍÎñáa £KVñ÷kãqgî‚z2 E¼&ž´þjÉÑy ì51Z´GLRÚ×XRÂÏNbr OûÓ¿8ÿ÷SïÑiüϯUcÈ®=ßvôøÊL•^óãªÉ ››ëllö¢[‚רNóå`Ðçðø˜ãÑ„QÁê !èä3?C¡ÐÁ¤C(„ýýãi‰*À(º1 FY6·ÏÓéô–&dAyA{Áúh?T‡1æ™A£q¾b4p<8f8›1 ‚SD«£¥ë ±  A ÓÁ˜Ù¤Ä9ÁبÖ4Z Jƒ¨LR˜‚µ˜FƒF»Mwm›Ù¹å…1â¥-­µ6WÛ[\"Yœ8O»ÙÀ¹srÓñ¥Ú ÆÐh˜¹ÛHŽ5šFžÓëuiä£.T„r½»wxçwøÌgžg­¹MfLìëP©Ã¤Ñ`}­Ggû›—®1žL‡L~¹ÿØÛßcoŸ;ï¾Ç[·¸õÞ»àë.Ñ©SÃÆë!ºÂƒÔ%j1òŸòÁ7µÆ Uô°÷:T‚#k *âq“z2’@HçVkƒÖ:u 9\9C‰G«Ú K±¬ª?›¶ŠEѦ&CB†ˆ]ta-¤ËQì«4ØÝh²¹½É¥Kç¹rù<ëë]Z­<'Ë2ÚíÎÜϽ~Έû`m!ïÒlu°&ee¨dÑ3ïbPOÔ—C]㦽w„àb€-QuNt‘%²QbÞCMzÔóâgœ$ ÒŸçzqYìãbœ¨ h¿|DÔiB>íµ‘8Éò kÀ  ^Ê–ë%Än0%s¿þœìÒSÄü„€óŽÒ{*塚"WЬ‘ÓjµÐ5£dzÇàóøŒäƒïïñUóꌔôI2g†S‡'2Ÿ{”6`-bô¢;CEý<ÿ¡>yŽi6±Z”h­—®½À?ÿ—9ãI‰¯µøî’º:eÞ±‘æ*­±yNkmÍ­Mº ‹V*æ`¨ ¥²y7(¨ Üñwo¾M'7dÊsíêe¦‘cò&—[Ö.\åÒÓ#ž ™•3úGG }†ƒã#öv™ŒG±«ª¾†ˆa×Z›ù=]Ññ±L¨ °ÂñWµªU­jU«ZÕ ¬ÿÖüÁðó?ÿóü»÷ïØÙÙawwwº× þýÑñ{¿÷{ŒÇãPÿ°—zqã˜CwÇ”UNÞØä¼¤p˜Ž&SYRé'¨ÈOþóvnEô´GDðÎcrƒ1šÒUøàPÚÅwLKýKŃä4sÈL\{’…NÆÆÆÁ«d0¦*ÁÅ@?tTÌM¦<å, Þ²¾ahµsy£4®jS]†ã ‡Cº=ÃÚÆ&ÛÖp3› >.(œ¼ ˜œfXvÉkZÉÜBF¥0^>S«î€6˜LcÅÌÿÑÅúZ›N3£a53j¡¬Ê?9Î[Ë?N›óœ„‘ û³œqÔk9¥cGGYUŒ§%e%©-ij**˜,®óƒÌm\¤¼Â•Žª(qU‰„T|%µ"=æ-Az˜©ª …=B}NëÀD!:c9ñ"/¾ø"?÷ÒgùÅÏÿ"O?÷ ç/oÒÛl’g ãÊ 4NlüÉ¿^¶ ¥…à£}Q<7 ©%zÕ<>ÊBH¨™O¯h/¢‚LjG¼£œN™ŽÇ”e5Ï„ˆ_JŬFUk!k¸¢¿l$FNhõ¨€$;¨:ØöD†¤J*{@Eû«øç"Éww9WA´H輪›¥¹H-S,Û;} ±¥`ÿü:Z¼Nç<­iµ´Z T5@ ޳é„i1eê*¦ŽèµŽBjËŸzŸ$Z"űA³É¤¢ôQéëï­t"r ÍV—,o²°±H`½v›êc1^áD(Ê’YYRxO8„ u°fÌ "ñB =‘ãd•’’ÿ³<~ ¬ŒA‹±9Y£™T«Ñ¾Á#àUTÿ[‹ÒBžiPyÚ¹¥tç%ªEÑ‹ÈÍÊ]_lxVX›Ñh4i4Ûˆ2HŒr_òðÞ]^ýη8nƒ¶ýj6*w3Û ›uh´º¬­mà/V˜DWeÁ¨ßçÞ­÷¸yãoþýëÜxëmnß¾Ãþþ!³¢Š>Ôd 6‰‡9„iÒý3 §1Î7÷)°FcLd¡‚Š`ýÜ3}1г÷Ü®*ÎmZk´òˆŠÖk%)Ðùd°i=òeéþ¢T=?Øn ®üŒ®Ç¸± Zk[l]¹ÂÓÏ^ç©k¹t~ƒ^·‰µÌmô) Y#>ÎwƒÊ»±Ã…ûKyM5<žñl&!YÔę́ zˆ-'o„òxìãGiÉÚ…³ z>ª­Ì'~Î;5Ô–Aûl¬Ád&ŽÑh ÊCH„½¤s½Ü3 ¨‰!ubpJz–ðç“ /±kJ[‹É³yë ›þtàUíIáÝâÃBg{Ç/—ÖÑjQë%«³šÀJöLõ8±emº&b@²ÉZlœ»Boí<>¤o®T$‰–ÏaíåÄ}C¡u¼Ãü~©A6ka²&"&u¦ÄüšPT<¼ÇM£ Äü‹­ÍM:í6y–ÑZß¶zt6¶8ïJ ³é”áp@ÿèˆq¿ÏÃûwÙÛÝa48f0èSe 0ž“ÌËw¼“׈:û(®jU«ZÕªVµªU­ÀúOZ¯½öo¼ñ_øÂæ?[öž_…}þùç?°ÿõ_ÿu~ë·~kÔÿ–œz—Ôrì|.5 rÝ%”W¼1¨Ì²¬Jû 5Ò¼Í][¬öxqˆó`£{n ÅtŠnfØ<§‘+¢rJáÐx'àM¢"X™@³™±¹ÕEœìÇ;tlûV ï„IU1 £êOâb¥ÛmÑjÙ¹¿»29ÃñíÑéžyæ Á¦¡ œÎp¾¢(6L¦£æê\µ$E¥fõ‚Už¶,f9^†å÷!3šóÛ›lo®±7˜0.*<±Í9¨´ìL Ì‡uˆ×‹µú½%Qó3Õn‰,‘¤J–ÔªÆê±1«–…¢ã{–‚À†¨9yOÀÌq‚¨Œ¡«'u5à/Im§óí­m>÷K¿Ìÿüoþ ¿úÅ_áâù-”D9D—(*¬¬±hÈqNE¶(´MVž"Õßi α(N¡kJ’¥EÍ(¨ôïÞá«W–TU•ÆH ¥CGq¢’ùˆWKÁµÑ/û DÞXWXºr–í6"è&g{†üCΉòƒð‹/;Ï«Xx5%ºæKtRì?>*‘ä3/s ‡hG.‰#L–õ¸Å¢Á&v„¨ Ð!*{ ‹ãZ7ÈÒ>E²‹  f '(ôœÀÑKp$’RÒøhÊãÌeT4вÄHˆ€šƒÑ´D[Ñ }`ì3\4'OŸ»(“”ñˆÇè€Ñeð”É(ƒ¦ò‚Ñ%G»yí›ß`6«ÿäs?dzO_§Ûë`µNj^jKsŒÎP¹e0龕¯i¶Ö·xöé§ù¥_þ%vþK^õÛü§ÿøç|ão¾ÉýûQ•¦OC½ Ë™À÷ÇŸýX²¹’¹­—"*øƒªíiNCqK“°DÍáË8æä C[- çºuE×ó­ž“<̕4*oÒZÛäêõ§yés¿À³Ï?Íz·‘"º,yGU–TeIYVq³ZcŒEk‹«<® @™£ÕéÒnÙzR‹×SbÕ<ƒ:AnœÀïeѨNßyåI÷ –¢+ÂIøCŸ‰>àL~dy}úDY!Ë Ð2øž.ÇŸjh´é]ºÎKŸÿ<ÿËÿö¿ò ?÷Ö7×âÂ>F;ÄÍ¨Ê N*2Hv6‚Å‹Ž!}IÌ®tŒw5Ú`”Á`!ÄÐgcM$ÊP  ¢ Æ`Œ%3kL²;‹ ¼‰0Þ㪊²* !£&EB ”~ß v²Ô™«.QglìG0 ~É,Y\|ü9õIVáÉ1ûÉoQg#jA…xjGЋN‘ùÜMÝyqj7Ô‡VÉé=[`—òØM‚'r³ò¡'lù·NÞ7´&ÚÁxÐZ¨Ü„ñ`ÆÃ½>“i÷J\‹>$}k}ò³LRÌ !é0ñþí÷xt0¦ª<"ÑŠCª1£ý‡¼õê˜ÿ»¿ÏÛ¿øy~í_ü*_ø•_¡ÝlÒlfØL-°gj+£d–äSFˆS£0­6žºÎº]¶¶ÎqõòUþóüϼ}ëŬLWÖÉ9(,Í÷ÝeùX~´£’¤TgüìgÎ3ˆ„e 8í;e‹-‹â=¸ÑjqñÒ%žáž{ö:Ýv“,Ý¿Êј½Ý]=zÄîÞ.< ,Êè5î}›ÑL‰¦wþ Ÿý…ÂK/}švkñ•d™{âwS‹kþÄ÷ ©«E–΋zü¸Ë¯ÇŽÔ?à4v:`Vä“ß'‰DXÝM!*C‹òs \ÕÄ·ú þ– ú£oS>dÌÏ­Ôêl•°ôþ¨æ¯B…ŠÉ4T!,ì{`~MÈ©ƒ¦ãö$øh!¨bøº&D›1U‹ ä:Vƒ÷¸Ù„þ£nÌ Þ{÷››\¾|™ëןââ…‹t:íh'&“ì1dyÆÆæ­Vƒ‹ÏóìsÏñ½ï¾ÉÛo½Íîî!„/¢~ Ÿ÷VµªU­jU«ZÕOrýT‚õ;;;sk›eýYõòË/ŸP×t»]~ÿ÷ŸßþíßæÖ­[üÛûoù­ßú­Õˆù)/Yj‰¢·rUiBh]´Ù¤*[”eƒÜe1˜xÀWa ‚QŠLk´‰Æ¬±£q:àÊ)†V»K!.@½à%PºVÚ’‘g›üw'Ó Y–“ç†Î9Žô€ÑpFUx$èd¡>*Ħ“Šý½>eYqîÜëëZ­6A“i›~ÊÁÞ˜ÝG}:í6½nEN9+pÞQ•š²Ô4u–ô'AßÝÙOXžœ‹ëÓÔúZ¶neY¥eŒ¢e×.c\8†Ó‚÷w÷£=OÐsU«:u"Îì—qˆ“ë|yÔ¨Upso^ùAJ`cøqð¨ögÑ’ÿ°ÔÄŒföðí’5Щm~(\©4äm¶Ÿz–þ¯ƒŸyégØ>·Af5Ö€ ‚® ¦Ã}vvîóÆ[ïqëÞ#GŒ¢rD7 oÑ]ïñ‹¿ôOø¹—>ÍÅóÛqßutÆ–º³C-lR˜·¾§N’ôÒ)€Î(… ayI- 2Ç2HÎÛáûƒŠÉçîtÆÂÜÚæƒ7õø¸>0©¾ßý\Œ}¥NAŠ…eÅ|W“<]é =Â{¾† -ˆÑË_Eè×H„ç8aò»Q‹ãšÎ¿V*Ž0«çÖ5KRcµ<¤€kcÑDKš?jêc¬$¬´TLGCîÞºÍúó¿äö{ FC|( "Hˆêìű^Ú¢6ÔÕZÇm–Ó ƒãCv>àx8JóWmXUÜ”Q¿âïMìqûÆ ¾ñ×_çê•+\¿þ—.]`{{“­í-òFTì&Ð:Ù¡Ú¢­`mFžgX£yñ¥Ÿ!Ì®døgÿ÷2s±?ì„ûyêŒêûPD³ds#sGª¹æ'ÁúÇm?ž´½…CI'C 0][ßäò•«\½z…õµ6¹Q„bJÿð€[ïÞàöí[ìîî2™Lé÷qÎÏçõ@ÌýQ(1Œ*¸þìs„àCB©ÇÆ™š‹äOZfÍã)T4ØšGo.OäµãÒ:§n¡§;NO"'µüŸèþÇIµúcçb©AéÉÂBz^Û¹ÕÝ1’‚ç„£,ô#À|î‰]_óÐÙ”³ y¿Ÿùý a…œ¼o¤ÔyÏPUîíòö›ßc2)b6Lˆ–>±efiœ¨Å$ºÜÅ!éš sR$0 9Øß¥r>íGX 6Ö„ÊU¸þ"ñ O·n²¶¹E§×¥ÛíÐ[ëqáüyÖ{=ZÍ&"Bf Vm,y³í#ƒàœãððïâ˜Õz)WGø÷ÍU­jU«ZÕªVµªO^?u`ý+¯¼Â믿>Ößxã ^ýõùï<ÿüóó?¿þúë'ÀýåúÒ—¾ÄW¾ò †Ô®ê§·dI™åƒÞ×’<¸Å ×ie IDATTt¡‰óM*—Q9ƒõ ô©Qø|ÿÝ(â¢F͆¢ÓÉÑ™fZ•H㥃F–§m3ún 86(£Qš¨¼Ô™U4[–­íJ@+Ãp0¡*%bLÉc<ÓïãqÉt:#8‡xaëÜyžÓë­1›Í ûì=êsþÜ&kÝ&­v# Hlö^ðŒ]˜)uÊÙ÷Œeâ‰\V5_ü×ÞÝ uÒCv.ÚKá`)DöüF—iqŽþpL<¡ c\pHò˜Kçæ´Í€þ 5UÝmçªùgÏI–½ÊÖu'Cþ úJ-´,XlÿqA«œ 6Ÿ †$:Ìf4Ö7¸òìs|þ—‘­Æ*¢^]°TL‡¼ÿÎ[|ë[ßäÏÿ꛼~ã6;»Ç †`Z˜Ö:Û—/‘å9O?u…Ëç·û¥ãõiŒ9iu$Kö~Vàja~¾•RsP·öÅ?óÔêÎ%äPNAóàÁèrB]&2¾¤Â?´¨% þ¤ïü)¯‹%€çÐ# JæÇ`9Œ—¸WƒóÔþÜËZyµÜŽIØTU•üþª­µäyNžeI]NômŸ_€jî+^+™%e`4š–ÌÆ9Ò(0H:_ž€£, \å†q”w&bQ'·…Ã2<9ï.©Ý§çó‡F+Õ˜Ÿ¤‚Ç9GY–E­ÌÒw°FƒW08ÜåÕ¿}…oç v(ƒK“–ûåŸÉâÌ1J8‡x&‘T&‹žìਃ/‹IÅw¸û¯~ûÛ\¾|…gžy–«W®pîÜW¯]ess“µ^Íuº½½Í :½MÃh$qÁº›ë¼ðéç¨fCÞxýUÆ£‚ýþ¬†—¬Îeîãþñæ)9í¸þ· >‘µú€¿=ùj:¯ Ú6ØÜ>Ï…‹—ØÞÚ 7 #Žñ°Ï½Û·ùûï¼Æý÷ ‡(¥çcN¥ðàºkͧN¡Ž{Ò#]%ˆ%È=B£éž¥?¯ÿ'¢/éöß/uÊÉc÷÷é’Ç·¢Îž§>.@¿Œ±ÈiUgìÙI¾!ÞÈB8ïq)x\´FY‹±k-Fk¼ _N >ÈîOë…õФûŒ÷±s&ÞojÒ}ɆNäñ|€ÕE 8>O¾\‰TU –hù檂ý^ûÎßqp0ŸUÜ’Ñ2XÏüYq±ùp‚åQsÖçÔ’¥P\­R–NA(½ãp2âð¡ƒ,#o6ét»¬¯¯qáÂ676X[[çܹólooÑn·Ð:'kX._½FðŽA¿Ïd:ŒU­jU«ZÕªVµë²ëßÿûÿ˜R˜+ä!*ç/\¸0™ýÚ×¾v¦jþ7~ã7æ`ý_üÅ_¬¼êºáúˆ¡H ¨J´Î€ ¬Åš6Ê6)½Bt†Méë<Êê¹燥*Æ€T:L9¿Öã©ëÀÕîÓIÉ zÝu²< 󴀫$ R¡”AÁf†L2)½TX­hwrŒZ§‘åm8>1›¹E§Ä°N´E‚p|4Áû@å*¶Î­Ñí¬S•WÁÑá˜ã£ç¶»l¬7id9„ZÁA¢ÏrÜ—¿»®ü9F:—X--leÍÉZ+[ëÍùàb¨¨±Ðk*.l´¸~å<GŒ] ôcDj€CN€ÉË ý²ú?ÈÉßY&r¼wL¦c¼jTWUÉŠ`z2dîG8’@æ@ýò1>Ìú4ö'K±P;£$k­†”Ø›PÓlqîòež}áY®?{‰F´8Ä{œxl(Ù{p—oþõ_ñµ¯~ïÜ|ÈîÈáUŽÅ‚hBPH%x¯0&'Ëò°¹À2”Òd6Ãh³ .ä´³±,àäïÕ YRb/G°†Pç0Ș^7[ÈI‚éI6Î!† úåôfÙåaÞôD°F/lä䦗·N`r°âvŸŒ3¿ R÷Ba02ñþ¤Í‰RŠv«Íúú:ëkä9”e$IçßKÉâX²PZ£9·µF§Õˆt¤Âù‚Áñ1ÓÉdþ=çÀärÓÁR¯œ ”–Ü<Yâ}´%3ß'$6ÿת¢˜L ãÜö’R77¬b­•³ÞÐä”h©Ð:ÚDvôô¹ªDYƒÊEU•|ù-ÊfhH˜Ô1J¥-Vœrï™G¼ûÖ÷xïÆ ¡˜MØØÜäÊå+<÷Ì3|ú…ç¹zýiž}ñgyêÓŸ¦Ñn³e›ÑåÝ´ÖØLÓYorý©‹¼ôâó¼ÿ`—ƒþƒ™«jƒÄ*¨ú‚ý±~RПàI¿ :ö;l% ±Ûn‘©€+¦ì?zÈ»o¿Å½»w©ÊŠL™È»°Û㊱Êf(Ñéõh¶šs;’Òªž»âõ§Q©K¥&­ÒKb2­sŽ¥4ÖBP?¤#¨ž¨ˆÿÀR'sC>Ò[ä Ng* øªd62+Jrkie†¬Ñ¤ÑjÓn·Èsì*b'æI?÷‚¡µÖZ¬5ñ“$ª¼§ÓYÌ(ð^4J™'6¥¾¡ÁP|úàÙ+Ý fcüdŒ/ T·…_|âPâQsc”ÒË4O¾…y·Þ×Éšn)=$ C%hï'’, !$Îà('cÊÉ„£Ý]n¿ó. hwz¼ð⋼øâ‹<ýÌ3lmo£Ä±¶aÁWîíñàÁEQ|f¡NÜýV6ö«ZÕªVµªU­ê'oÝñcX7oÞœðu}ö³Ÿ¢2þ•W^™ÿ|Ð?íM¿ ê/Ó~õ«_]˜,Ðý¼U754ÍvN«Ó oZ‚r”~ƬšRúcÔIEÛ®)= G3Wl­5¹z¡Ë¥Í&W¶[vËíÂVEתXo?ö!}\kYÒeËWå·+¦<¾²þñe*4› ¬®-Qo@¤@9‹D#ÑØ"%ë÷é¶8;8¡Hµgä:55Éu%#V/l³¼r$®ã,˜Â`t1^xÔZSè·ѣѦðB¥ñ/k Ƙ²²±(¿j´1˜quea(´¥0‰cŒÆ:3K¿Ò¹ÄX¸á¼ÁáG½Rx¶“9a?æœ>Ê'öã¼R˜Yžg?n¨$2þÙqò)gggtÚgÄá£Zl,--qacf3$ Rʨ²• êP[D-­²½µÉÚrB=ñ…æVh„ÔÊ)ËÁÁ.g­3Â@MLµXg°¶¬žušÂ9Œ±å80e2ÎþJ׎O³°imHÓ”Á`€’%)1K> )ÅB-f¥ÑL$Ià«îE˜øÊúG°.ÓŽ gN$…c,Âå9¦0hí¼w¹”P2î+Ð:ÇZoª¬Ó!Ng˜b„ÍGH ƒn‹{w?௽Âÿù·Ëÿöÿ#ÿóøüÅÿò¿òÿõ5ì·d+”ƒ• Š–c¶·V©×CŒÍ™ÉÒNÌ|Ý£¬›ƒZFŸ?ÿE”Ôˆ“%%Vçäé€ÎÙ Gû¤YŠ6Ú'òœyìœt”ÉDk ÊuD9ýÙ¸[ÆNç·›ˆÚÒ”yœ;Ï™wsà&–_õ#f<¼¥#ÏS†ƒ>Zƒ6’´$õ¢0 ”ëö§µ´õb}Ç$IBÅÄQŒsŽ,ËÈÒÌ" ‰,_Uvycv9î ’祄(}:~ÇÑž³Ž,2èwÀj¤sDaÀB=f¡™(‚@ý’swÜ "QR0í¥’Ó.Åq—s˜<Ãd)V寋˜k³ó-MSÞ¿õ?øáùÙ[ïptÚ!/×¾0ŽÙظÀÊê2q›Ëó˜Ç<æ1yÌcÿòñ;UYçΙ¯›››Ϋ¯¾ÊK/½x±þoþæoϵï÷û­šÿú׿>ó_~ùe¾óïÌGÍ¿†®„‘Zo8YP…ë1,ÂÔ I@Æ8 ¼½¡ûØ¢å©åVA[–ë!Vb–‹a¥)Ø\«á:7²þ‘Açè²ý8ˆ#_½„ÀZÐÚ‘åd™0”BJÏ#Ö¶ T‚¸&Y°‰ÇA8kŠB—b_@ÆHápÆ‘Ž íÖ)C‚@Q¯7 »ôºggC67, MA di.hQjÌ«wØŠx럿oûIÕ§c¦¸”xñ¬Ä6híTëè²rZ(–Ë‹ $§D·÷‘¨Ši•®~ôì”H!&v‡Xk(ò Sè²ÊzŒl(«×ÿ,_<Îèïãa1nW¯Ö'ÞˆógѹÀ!<~T?I"š„(i¼ƒŘ‚"ËHƒ^†.œOH‰1“Ûã<Â…%žzæ³\ܹD£^÷˜[‰Ç HÏM÷UñÒ;eÖùõR"e‰&%ÅN¿'KœŽ(M@gˆÎ¿D%ð„ ¦U–AE¡-JÑeÌ‹©`fÄ·ªÈδƒb:¶Ý¬79UnÆÿÑUÊô«È¤é·+(˜±œSùŒq2GU>´ê™àŒÁÇG‡ìíÐëÃRDÅzB†!KKËloo³½µÉ°8#3Æ›–>büª@D$5¶.=Áöæ:(DXƒUà0(Q`tŸaçŒÝw8kyÓðqǃu~ý(×[îóäÿãŸxTAF–Y«ÑG™OV¸˜Šs•ús/$yžÓnw88ÝŽ¢° OÏ8ì éŽ KËÔ—XC¤$R BAK–—j$QP&í¸Ýj"²Ž‘(Þ>Yý'ÿ¤Õñ<7åܵÀÖiNUÆ3­«ž†ÇÔäžWEi4+ ŸD‘Â!l-2²tÄ0MÆ¥7½·ÈIåöøZUúº(é»V×h6š¾pÀú$6n‰6¥×Œ™sUßMöÒU׃ñ{Yç*Ô¿¾¯__¾F|\²¤ÚáSMRWæ¹ÓX="èö†Ô“DH"’¸A³¹@£‘øŽ»É±3wznfŸB)T½ÎâÒFÃ'W¤7.ïútû=бñóÌü®Ž*QyMDz8‡áùçÝ<Œc4ìÓná¶W#R’f£ÆÆ…Úg]Š|T~Ê« H!Ö‘ç×47™cNʲ@CLpA‘ÇÞYNçˆ5†Q·Çû„Iƒ¥õ ÔëO)¿^.¯¬Ðl6 £ˆÑ(ŸéWÔÏcó˜Ç<æ1¹XÿkŒƒƒƒGÄúëׯOþýúë¯ODù­­-žx≠ç­·ÞšùÕx饗h4 kH;ß]Á^(‡ È”ÌtéNˆDJT_õ^A„±EidêEQ1)õ Øi¡p)4qèh6BuI¨r ="’97±A†9˽–±X]P”ÜNNÑÖ ´¶ä¹A) ýM ¼¹ªq–@XT ¨ÕÌb‚Ñç ÙÐâœÁ:‡ I’€38g0Z3d„Ñ€F£F†Äµ…ÎéusºÝŒå/ä )À0AK#>â‘û܃þGùÿÍT»ê¯Z_Ý®yžc¬$B¥QL…,.4H’¥ÆwS/‚YÙ·bOEˆ²úXN.ãÏwÆ`²[8£'‚vU£ž `~ÓOxîñòÂTœxœ¼^ý·Ä“'}Ì?w³!çÏñ#ª¨0+Çï ” EY*.qxŠƒ¿Ö Œ•šÿ©\Æ1«<÷ÜslmnÄRºŠ¯p¨R„›‰úÓm‘“Êb_µX¾§"ìËI%cÅ_Ñ8²ÝcÍ]åœTPIUJLy@†¡÷|pr2Ÿª"û´H·"¸9/&Zç›u^:·Q¿šP©‚fdÆó`7Y»ÎóìÁ͈ý^¬g"*RõH¨àƒlžÓ:=eïˆÃṏ́Z¬Êjj —–ØÙ¹Äõ78îYSØòoW˜øB‚ŠXZÙàɧžáÒæõ0Äiƒ.™õBäi›ƒ½»<¸ŸV»ƒ©$*Ƹäñö»É>ø¯–*é&ây¡qÂe®š4N¿N5JQ9½V‹ý½=:”ü‚¥Œ¯ )#õW¯ì°¹±Âƒã3ÚyÖîܤôÇgqq‘gŸû,k y6Ĥ#ĨK>Ònwé§»d΋õA X\Yemm‰Å…:8f­¹H¤£Á€îñpï!½AÖ¦Êr’ÄÑÎá„¢ÈsNŽùáÌ¿û÷Â3Ÿ{š%‚W® R*Â'@]e¨væˆ_ }ŽZ?cFι_âߪ®¨®Êlô ÄÝ#ëš›üõÇhüYT]eWËnW1·Æ•&žÖws•×%?Ÿ=&‹R°¬&–¾3¥¹¼ÌÆæ‹‹‹w3“ˆ+“°“„ž¨ì]KR¹VΗ~Ô˜¯ õâÑ+Îù³4MÛGŽâÌüùgÈõÂUÜã·HÌhÆ“_œbtÆÛ«ÁHt–ÒîôX[]!dD$,--°¸Ð Õ:ÅëñFÓ‘ÆÔebüTŠÚB“¥¥eêµJ ¬1dYF0 7è{ƒÕ1ŒÇ_Wm%a;ý5…ôëI™Œ—|K:Òë´=P”Š8IX__go÷„^7%7¥ï…àã·¡\U×"¿˜F)EÕ¬½Ü§ ð†°QRCJ‰Ñšt4"KGm?bËÏm‡1¤Ãín‡Óv›\L¤¥¤V«–ÞUŒßãðùó˜Ç<æ1yÌcs±þׇ‡‡ÓØ—^ziÆ$öµ×^›ˆíUÙÛ·o?V¬øÆ7¾1©ÂŸ‹õÿzbŒ¶R“›>Ùða‘Ò0«,­Ö¢%‚( (rŽ0½˜ñ÷÷ãz+)AQ,‘ÊçCÒQ›Ù\Y'ª5 Õ;Ùdè\c܈˜:2|µºc (,Bj<¢X–Õº¾ Ï•"º $õFŒ³%,=i°Î`¬$JjÍL.,ÚX´Öt{,š……–W× zôG–‡û-VjH%‰”hÔF#JŽü¯O±ž¸„bŒe4Jé÷‡diŠÅJIˆB¢P1õFz½N’ÔHÓŒ4K=W|ÆÌÖ‹b,Ö;é ³–’¥ æp6Ç#Ð#°z¢`Ú‘Ú«1Q·ì°(p§v*ˆ;#Œ |E9¿ÚÄzüÒì“kUÅssåŒ/7‘T8a°¢"k 16lQ`Ò=ƒA*¥òÌkD5¢¤N܈QÅaŒÇà” ž¥ÅÏ<}ÏîI¶×‰äTÔvŒóË”‰‹ ƒÃTªÊ™¹Oó+Æ/[©dŸåÔ?~²ÛåЦÔâDz› åÑ/ Ïí6brÞ¤-·M ϲcÓHÿ»þ {3ì)¶ÈNñG•Î ;Æ_”çÈrÞàQ2CÆ;ïwpNÄs3ÄS2Œõ,—ØXH‡ Ú-öw÷¸sû.ë‹×©Guop bqeO?Ãï}ñK<8pÚIé{„•1ï1_¢VgóÚ¾òå?àÆµË¬4"„ñh£(i Snßz‡>Øå¬5À¹uSÁ_*ÏpGNÄu'ðÕùÊ•CÙ}DÓ„«Ì%KyÜñ„,X•á/fŽ«p ”ÀÃö{»»œuíl²°¨¼Pï@ K\_äÙϽÀÏÞ¾ÉîiŸnÞâl¨Ñ“¬hù7„àòµ«üÿÓÿȳÏ>ƒRÐïœÑ=>ÀõO9xpŸŸ¿ý.OZœv‡XÉâ*O=ó9¾ð…ÏòÔ“W¹xaƒí•U.¬¬Ðë´ø»¿{™ÿýÿø[vwwIÓŒDЇ»É[m¢(àPN ’„0¬ÓX\å™ç_àé«WX­7¹Cª€Üd¸““ÄÂX_sÎ?Èû}º­ÙHÓh^Ô·€“ˆP°ta‹§_ø<³zí*ûÇg°²¼Í•+×øÌgžâ³Ÿ{’$Ñ´Žöp„¬®­Qkå<êFÄ„ñ"7ž~–¯üáW‘áÏȄ䬛sÒr˜rÀ¹ ¿ÚËÜ~~™ƒ1e6—øŠa¯"Ø;WV¨†ÃÃÁЩ’5©O޶.]æ _úú™åÎ^‡Þ@c³‚¼uÄ;#ríp¹õú£ðì|'=ÞÜâ“"VŠGÑH“m{1ÈòåO")+`ÇHŽI1bÅýsJ]öI€J)³T’BüĸÛÂ:\6ätï?ûɹñ™ëÔ"®^\§©…PDABcikO~†?²1¥ \½þ'gmÒÔ TÂÂâ*k›[<ûùÏñÌçžãÒæ¡R8í q./Øûð>?ûÑ[üèwhuS ^ ÁÕ2{¾ðçé»(f#(ÅÞÊuâœb;ín©&Ϧ0L„éRw’eCNrów¸zy‹ÕÕE.¬5}2F*ÂHR[ÛáùßÿC‚ÚÍÅUn}p—£öEPo²¸ºÊ _ü=¾òÒW¸°¹†t†X:B§Ðª`ï,eÿð!Þ¿‹Ö9ÏÚÑYN¿×'Ï IRgcchKxò©Ïðï¾ö'¬_Øäöí;ìíí“çÎc©„@ I­±@sq…­‹WøÊW^â¹'¯²\‹PÖ"„A›‚A¯ÏÞþ!w?¼G«ÓÅZpÒVª`«©Šû¸5°b¦;³¶‰i=sUDþ$ çW$o”=›X®jì3>¢Â•Þ+1ƒ¡ç“Me©°À-M6FÚ”9µˆ…å¶w.Òéuéöûä…E‰ÀcHð†Ôa­N³¹ÄÕ«OpãÆSlon§CºzD£“,ÔQ2 Žõ&ÍFƒAÖÅ9Ã!¥À”º¦_‘„0á&®3‡Ç¬ùnæ¾Æ—¦{¡ß˜¢4J â¨ÎÒâ*ËË+ô²SÌ$±+|ÂLù{Ÿ\öx¾*–çSÞº«sß!&ów¼®Opmb:…ðFÍ:Ïh±¿·Ëêrxc™$ŽY\]eçòeºÝ>™»K»3`”h­Ê‹¾Îúqž4¬¬^àòÕ«\¾x‘µ¥%j=`Ôër´ÀÉÉi®1&,«ÄBx\”ÏÁ–ˆ6ç²R ¤bÚÀðKÞ€Œm™¤=”ªžš"ÒnóÁÛÄ:"¼@5©/¯sõú L᱄'íiî(´¯þ—RΈõ ¬¬¬réÊU>ó™gÙ¸°Jº-Içì˜@tœâP8!£:Í¥Uš¡`)‰]A1èKÁY«E¯?ÀbË“ð ¥2@*…TËkklnn²²¸H…(eȆ9G''ô²¢˜ló¯zû:yÌcó˜Ç<æ1ë?&ªú;wîL*à¿þõ¯óWõWÑï÷'ˆ€çŸ~"Ôâæ›ßüæD¬ùå—ùö·¿=ùŒyüNÉõØhí… A(©7k¬­/³¹¹ÁÒâ2IØ@¹áe=gÊÖÚR“”’( 1Æ”­·k Æ(¬¯÷F;G Ž#'…!,ËÍ]kÐ/ýQJP§ *ˆTX6 ÛïáÈ 3IÈ]¢&E‹c,Ú¢(`q¥,™II³ˈzÍP‹cÂ`Y’Z@«5`0ÈÉsÿ@†G»Óg¡¡X¨E,DñŒî>ÕqþøŸU ´ÊêfJJAR>h*(uH…UkÚøVqH!?Æ,ÌMõÄJ•¥(«îqå Ê\‘QŒ(áÙÁÖ™Y¦éou€NÑ1tC>âü*#´TÄûs½ïN<*nˆ)Håîþo¢Â!#D%á2»=ò?Çn·ËÞÞ“\]GÕBψ§$Éâ;ן&j.°óÔ3œµ;h#X^¸À•.¬6‰Ãý÷øùÍ]—øì‹ŸçBÜ ðÈQC„‚ëϾÀ× \ؾH¯ßçwïñ£7?¤“Û‰Ðjˤ›(Qrlø%šBˆÇ­Òœ zí³6éÐR« Óq‡D «¶xþó+vØ=è2jÒn—Ý÷ÞæÿD»Ÿã ëǶ³>±"+B“«òüEY%|nsK®ý¸¹aœ×‹ó>CQ)±œœ@1Ùy1>qe×ÅyqÌ ]bZ%;f’[yÊàôˆ;·nòÚ«¯Ðh&Ԣϭ/¡H¥PAÆÒ:Ï~v‰•õmžyîyŽOÏ 2‚ fyyíK—غ¼ÍâÒ¢ß'ç«K­Í(²‚ÖÑ?þÑ›¼òÊÏøð~›Q)Ô;TÅîq,½ÚŠlw~¨—‰¦ñ18-¯¢;„Eû¨Ô5Á‚LÊU'r²Pc£ðŒQçˆ÷n¾Åöö:këKÔ›Oc#ïMâ„" l_}Šæâ ÛÛ;ÜúàÇí¹“„õË.ðôsÏréÊ%%, ‹ÓÃ~—÷o½ÏOÞ|‹·ß½…±Æ¯—¶`ØïpÿÞ]Þ»ù.W¯ì°±ºB Ê™Ƭ¬mò•¯þ.]y‚‡÷Øß;`8ÌÑÚ#Y¬4šM––VÙÚºÄóÏ?O³£”7Lw¦ 9<8äïÜâÝ÷pÖîcphkp28çe2ß?Y›®oN<*1>®rzbý Øxݯ.Y3ëâxTÄyáf—aŒ_™µ$>ÿb’µôÚ-:­3k«¸$DªåÕu®\»Æ(ËØ?8¤×‚ðë ˆ’„…µu.n_äúÕkl¬­ãŠ!{»{„qÌöö&ËÍ&REDµ& Ëk¬mn3ÐÝ ¬éÏ¡cä–aïôIWï1ßÞâòÜ'W7ÈÍÓ!¦Ðà¤ß†ú"k›;ìtd" 7ÆA8Ž2ú™!Ó†*6Ìý²B=L“§®š´|¼Á##BÌtÅ <:È•ÅzÔc÷>k«M–j 1Q­ÉÚæŸq «<<äø´Å`0B¨`2VT²¶µÍÅ+\½òëëk,4(—Òï 9ÜÛã`ÿV»Cšh'±B•ùSQÞû0ì•ó]•ªôeò\qçéËû'¨Zº:Qõp°!°&cØkqûö-–WWH5ÖVâ&›;WPB€TÄŽéõSF£Œ<Ï'ÆÚJ)â8fkk‹í‹;\¼t™­­-¢P¢ó£Ñˆ““SFƒ!ÖèI¢ÔK§Óãî½]ê&ñrƒZ­Áæö:KiÔëpxxL/ËIµ!´&ˆ8!cÂ0$©ÕØÙ¹ÄW®°¼Ð$ Îæt{]îï> ÓëRè¢zÇ3×êç1yÌcó˜Ç\¬ÿMÄ·¾õ-¾÷½ï³ðßøÆ7&|úÃÃÃÇ íßûÞ÷øÞ÷¾Çõë×¹qãßøÆ7&Õ÷7nÜxDØÿÎw¾3A¿sj½ÃXƒ6­5J @KKK\¾|™ÍÍMÂpiCÈEE]ö‚Øã¤Ÿ1Ma1ÖkÍ`$ŽF¾Ú/”4×dh‰bÁjÓÎrzƒ€Ñ0¥ÈR¢¸N^ÆsÕ˶s]XÒòaG‘’(áp c Œá¨Õ"‚`4Ñîõ0&ÅhM܈ÙXoRk¬­-p|ÔâààŒÓÓ>ynqÖsI['Kõ KMÔ¢ðfµ•Ê´Oõ°#=Rãn[•A&޽©qMð#A „ °`´&Ëüƒ¢Ñ¦"ºŠÇþiy^ÈqãªbëE@ë¬%+2F£Á”®\>ÄÐú·’Re"A:;)¦þ²jöõ‘“*Õ±t‰“Fzá 娷[ÊòA„³(4jEQ £Î•ÂÖÔPrLoµÎxïý÷yãG?eqñHjµH”5} eHÜ\f»ÖäÂÕ $R(¤„:‡¬CïxŸ¿ñ ÷Æm•+ÔÖwHš Å„2À â[O4¸pé þø¿û:íûwùOÿ÷ÿÃÁî ½/Ö[!gD?¯|OÀ˜ûü©ÎŽk Ø´OŽ8Ø=¦sbXº@86tT¨ &õú¶¯ò"¡èóÆ?Öxë§o¢‚•DØŒtÉ$‰àðÕ–ÒJ”%Ö@"Î%j„3^ÌÅ–¢b e)«i­0Øâ*FÑ®GÂI”ó&®Ê¹Y½ðÂòäŽ1@²ÌÚ›öé=ä¾ÿŸ ¤¦ –¾øEd#ÆÏ··FQ[¨s­±Èå«Ox±‡Ò„W…È@ ÕdY¡!2Ã>G÷øÉëoðýçïóOo¼Mê"îQȉç © =e[÷× p Kˆ¡ï̘ ’ÎÍ á&¼oéŒ?.LÁ,h¸ÔXe¡ìzB(ßÝ ÎfÐrçƒ7‰Þtqeý·–I‚¶@(c×/òÂúÏ}þ˾ö¹dïgÖún «ÑyFH@3è¶Ù»¿Ë?ø ?ýÙû<ØïçrœÓ䩿Á½ÛüøG?b}mƒ «¹¸qF-@Pè• YݼÄç>o)rãͼ¥Ä:ß%–$>©Pä­5¡òÇĘМœœòîÍ÷yõõŸpëÃí)Szç!U Æ¿ZŒû% Êu¯òn’Þ”åÏgzŽJ쇜€¼ìäºPMç¸s ȱ焛ˆËvš@ÅNæßxM'Çr¨Äq|tÈþÞCÖV— 76hÔb—VØqWˆk5VîszÚ¢(4"Šˆ……E¶¶v¸ry›¥zÄ }ÆÛ7oróÖ.k;,/¬úã)!¬7YÚÜæêSÏ48mµèö{œž•г¸!~¹1á Xãï|LŽõéŸ0ì WIL²°ÎÆeƒ jÄkÛä:GØ‚|Ôgoo}|†.´7Ø­T¹êm(×#¾ê¼ìhŸ7Óñàb2Öª^r†¡/Ñ/ —÷9ØýF#d©_ºˆJ"’…u.Õ©/m°þà{{œµ:ä…FQ’P«×عt…Í­mVWÖˆƒJ ;äðàˆ_üâv÷öéF¥Áu¹¬¬’õËëýd¼Ç/s¬|Nvœäw•Ùá¥&~2¢ütkRÒAÁþ®ewkƒÕµe– %Is™‹×bê‹k,¯?ô&Ö½>£Ñm aP¯×Y[[cçÒ%VÖÖ¨ÕêÎhÝ>ûû‡Ü¾ó!nml¹?§ §Ç'üâo³¼¼B#¹D¼Ö–¸öô縰u‰“ã#ŽŽŽhõzt‡)ƒÂ ¢˜(Љ¢ˆZ-auu•­­mV–W‰£ˆ,ïÓïµx¸÷ÛwîÐô1Îùîй*?yÌcó˜Ç<æbýo.ªUô¯¿þúäûU>ý'Å;w¸s篽öög61žýæ7¿9ë_~ùå¹Xÿ»¬Ù—F^‡’Z³¸¸ÀòÊ Aà§µÖÓkƒ’%ÇÚr)‚YGš¥eEÞ­v‚ZIˆU€Å¡­ƒP’Ô"Ð,7%ë+1yªé µÇ>8[V.•Üð±«smÉ]áÜâˆ0ðʪµcüvS Áâb€5¡r„Ê?6k¡¬“(ÉB-! Ž8iå67ä Fƒœa?cØÌ/¤£~sKŠ×†m)ryý~Šòð^–Úh´ÖcpÎ~ÌØ£³mÍ«o=Ã׃Î2‚RÉpÖMyõ¿e‘ž²ƒCbã¯ØÆTx¦¼ìDØŒv]E诊úc|M)X87áÙ?*ÚX[ ¬.Ç2î¤À#,X\žròp—W^y… «ò¶7VHBÐL>Þ6“Š Héq'ý^›³½¹õóó÷ÿüðæ!‹;}®<ý 5jµ5” ¶ÉDàÅqa¨'1±” ‹’Á=6e“¤ÝD¶rÒ‹ÕzD'ÇûÜzï&?xå^ù§×988$ÆØ4SC1ìq÷Ö-^m,È/}ñ÷¸¸½ÉâB)%Y1†­ùcn¥¦# ¤õ8%@á|R&Í´ZÇíñÖO~ȯü¿üôç7eiy\¼…©¢D•?ÿi× r朡¨_¯Êù€-מ-âç02íT‘š+­a®4†µb|þ)yà†A·ËÑþ{+ËÔâ!ˆÂ¥•u¤ÆÂòYšá€(ŽAª2aÓL"Ú'Üûàïß¼ÉÑÑDL»Õ¦(.û]—õÅn<ý4/ípÖ:cÿð€›ï¾ÇáYgâ¡0Å÷=~!¯{îœH.…CÚ _äéµÏèu;Œ†+ÄAD@²¸ÆVTgakǧ@tJûäAÈÉY»L OEêGÓêò\нL–×le}SPõlºO7Y‡ºâ®2~Ÿœ)6pÎø™*@ ‡ $y¯ÍÞÝ»DJØ\[f©Q§–ÔX^‹aÂæö%ŠB{#f!PAHÅ$IBœÔƒ€¢HéõFì?ø?x—÷w2ï[àFïéðkŒ(;œ™|Öã¤7w³&Ö“]AŸè÷³YL(gãësÕx¹„Ä•k¤eïÁ}Â0$ÏR¶·7XHB!ˆk‹\¿Q§È ŒÖXkŽFDaHÇ(¥¨ÕjÄqŒÒшNç”û÷>àÖ­w9í´æc+óÒèt@¯u­wß!qe‡Õf@%ÔVØŒV.9…u!Êc•”(©£ZR'P‚"Ñ:=æÁýÛܾ}‹³NAˆ1nb0+˜ëöó˜Ç<æ1yÌc.ÖÿFâOÿôOùîw¿K¿ßçÍ7ßäÅ_üHCØ?ù“?á…^|Åý[o½ÅÑÑý~Ÿï~÷»|ûÛßæÛßþ6/½ôFƒÁ`Àááá|ôüNEÉb.ÕE­51„@†„* B¢(*»Ù-ÎJÏf‹X%óyb8ê¦Â¦·œ ¬Öô‡ggCIL#(„%’ÒsdU²@0d©P¬Õõs†ƒ>:aŠ¢hVtp^ü0Σur4T¾²0r4£ÂІ’¤£Ɇ` \‘"„!R’ $Ë5ë q ¨´9:ëÒ 1d£‚,Õhm=·^ȨÊŸò ðˆQ«sç>æj—ft%gTkK:Êö‡diŠ. Ï‹w=œçÙ:JÌEÉðvÒ{² 'Ö¢¬ÅŒ†£Ö¬ñ Î+ë~›¶²‡ÆÂä„Â"­¯JtXŒ¶(aù dˆ”šÇ£q ÂæžÏ_-u^ÖÌ h_‹=5ÿT!—= Â'6D‘:M œO¢”ݲ4ë+4¤r;N5èŒîÉoýäǬ,6I‡=ž}úÛKÔã:I¡ä¸ºÙç&Ò99æx÷>wÞ»É_×~ø&wR–2ÅôÖW¤zší Qì+ŠñÕ¿ÃÁÓÓ6nŸ¢ÈAœÍ)P¬ÑhcPB‚2Fˆh2ÇøXÇ”d1Y—‡wßáŸþá¿°\Oyêúe6V–XNê¨0ÂI‰1†"+&Ãd)g'Çœœœ0)Œ.¸—áláS”TH[&eD2ÀIIŽ¡kÔc±ÞæH[ ­A7DD ¥Bkã1B¢T€ ”/w¥j ®(pE:Çå!2”(ÎX¾½prj¾:>Â’“c){wÞç‡Î`F#ž{æž¼~«W.±¾²H³Ñ D¡D pVSMžŒÒ‚‘>±£&ÏrFÃ!GgGÜÿ€»ï¿ÇÞ}Öàáî.[Û;,,Ô¨%’0©†’Å¥T¨è‡Dq‚t¬ÑS`­7uuVM×8ç»È «q"üH_ PýÉSÎNØß}@…8³ÉB’ I3!h.‚-pYŸ´ßóg}ìŸ1îcpÖ¦ôÝBcG¯_~únÿ0£ð†ÙLº|d9æíd hp…_WÜø%ËÄ©œx“¸ñXœ¿Ïéœs×iœ5\ÚÚfscõuêõ„¨Ö ª5”ší¯tç:1èvi·»´ÏÚ<|ð!|ÈY«ƒ3E9ô§XÆ a|7tÒ¡(¥ ¼ªt"ˆOHm•wXV#ÑD²\…OçZ!ÊÏgüßöòÂ{ ˜œÖÉ!ÆhFƒ>½öU6Ö×Xj6¨%õZzÝÕ (´.ï‰¡È Š¢`8ŽRŽO899äÁƒ»$õH{mÎŽöqÃ:1ŽÀÔ¥¡év†#‘"D=©ÈO΂Í)†ºg'!MNH”Ó˜´ÇÙÑ­^J¦]%{â*¨€RÐ09£Î ý³#Ú' &‘Ȳ*Oa8=9£Û2H ¹qˆ 4ðEzÜ»Ã?¾œÓ:>äÁgŸãÙgždkcƒÕ•%êqŒµS¤äinë˜{·ßãö­÷¸uóï¼õ.OHÄìòÓ¼B½¦e)Ï&A3ó]ÉSG9>¼ÃkÿX˜Ç_x‘§®_ãòÆ %ÑEÁ°ßä#Ò~—ƒÝ¼ûþûœžµÉó)B$£~‹öÉ'ë4Aà K‘EŸÞI‹ÞpDf-Oá•H,Êi(RFÝí“Cj‘FG(‘ÌÈG´è3¬ð y'´ß‡R¬ÏÓýö)§{ÈtÑbDlÑ'’'­AJQš/‹*ZN“C8MÖïðàötNZÜ»}‡'®]ãú׸zù;·Y[Y¤ÙHhÖSäyÊh4¢ÝérvÚâøè»¼ËÝ{÷¸uûCÞºyË'óœ]…Ë‘%˜Æ¯É‹ô•µfD¿}DëäˆÓ¦—cŒ¡˜a—Ó΀~êÐV"J”ŽŸƒ~q’Rbñf˜Øb|lP¡”" ,èÝ3¥cK!TŠR,+gmv8M Ú.Çû÷¹wûÏ=û ;·¹¼³ÃÖ…uÖW–Q$Ÿ´ËF}Â'TT IDAT:Ý3NN¼Pÿþ-Þ{ÿ}Þ¿}›ÃÃc²Üam‰ƒ‘¦<ãÖ¤€"²ÿà§'ÇœpíÚ5®ßx’'®]çÂ… ,¯¬°Ð\ Ñ¨†Â'´¬CH‡=zý6½^›Ããv>àýÞãwo²¿·O·Û£(¦Õ¿³Ö'4*]<ãZõ1‡^|’€&Bú¤ÃhÐ¥ßë¸˜Ì å9yaÐÚ` 8üö¸¸R¶#¼¼:j0¹Çõºt膤i†Ö¦4Lµ% É'y KøŽ),E–2ìwéuZy€2ýáˆQ^;áxƒCZ‹±–^·ÅîE¦5ÝÁõ k,,Ô £€8 I¢€@ ²,'K‡ ú=NŽ9=Üçtï'GôûœŒèuO¹ÿ.ÍÅu¶/n²²R§ž80#¬Niµ[´Û-²QŽ-4&Ïô{ºµ‘…ÈlDžyoc¹3¨²Keæš\Š¡ÆœðžÆtÎNøðîmŠ"'MGl¬®Q¯ÕJ¢¦H˜Q—öñ‰75¾;L8‹NS†½ƒD"…ÒY–c­C–Ý ®bí¬¥È3²AŸQ/D˜ƒÁˆQ:­´vFœïª1ÚÙA¿‡Ô!C†½Y®Ë„¥|ÖMqÖ $ºÈhÒï÷9|xÀöÖ6—/í°º¶B‡“s(E %Ö²tD¯×#¥t{ŽiµhÒï¶) ë+åñI%!”¿råz‰ÄZM‘ö: 5Ã~ŸÁ`„6ÞDÝ ù‰Eã³Í3ô¨O6ìÑ/$ÒÃi¡}‹Œ @SSuéÎääCÃižÓïö蜞qñâ6ëë¬,/²°¸@Da@y^¼6š<Ï)²œ~¯Çp0 Ýj³»û€N§E«}JwÐÃ75 wãD…,;†î©æN>¤Û>åää˜õµ5uêID³'Rø˜jèBÓn·Œút:m9Üßå¬uÌ`Ø/Š);pd‰QšÇ<æ1yÌcó˜‹õ¿Ñ3ê«âúÑÑYe_ðŸþyþâ/þ‚»wïðÚk¯Í¼çù矟žßeñ_1ª ²[ †C:ÍæòÿcïMžeI®óÎßqÈÌ;½¡ @¤Hv/º­×2;-´×^ÔF+mµÐŸ VÚÉL{meÖ ±ÉV“-# 6'A j|õÆ;惻ŸÓ ÷œî»¯P#‚þ+{¯î»÷ffd„‡GÆwŽŸ9t4ÂÃÈñ¬¥ñÀ!¾t‚ɾ½x ¸)Î0Fc±TŽgJãZÆä˜6B;3ë±gL#§¼õµS.®œßDÆq‰Œ-ÎͲ±¹+b¢–nÑ'õŽb‰Ø4YlPZ&Õè– ZuOþx†w‚(5¾þú ®y“ÉÔqq±@œc¹\syÙ2;š0uþS­Äþü•½fv+ï‘hŸèûžù|Á0 Åê'/}é®Õ4‹zZˆ­Çz±'°°0¢Ã@Ç,Ì¥œeƒ•ÿYÍXƒ8ðâñ‡üÅwÿˆG¼Ã¬m˜1t½Bbäɇ³˜¯ƈ¦"nxñá»üÙý¿,ž¾GërÇ'–²??ç'?z›gç7¥ïQ·žäFJõc·âýwÞæ~ï¿ðý70mÙúëzK,¯.ùÙ;ïÑ­»ì¯ $ÑÒaQxúÎO¹yö”ýÍ÷ùßÿ·ÿ…×ßx×<ääø4 Aã’nuÅõÅSÞ{÷§¼÷³wY\/±Ô4Ë*«Å¼½fµ^ñ“ÿ˜ßøµoò«¯?äìdŠéÈjqÅÅù3ž>ú˜wÞý€gWhsÆåóGüåÿ÷'Œ‹s¼Ž·Ž©3œŽŒÝœw~úSÞÿè)j›nZÛÆ•Þ-‹lºpsu\ßðâýžÿëú‚w~ô·ü£_ûU¾õæ›Ü;;a6A2ÖË9¡[Ò-æœ?ÎOò.®ç¸Æ3‘V¼÷“òßšÈÿö{4gL$ iÅòú’?ÿë¿æü憦™bîTÜå†~ÉO~ø?øÝÿsÂý×bã€Ó@ã–<ò1?ùÑÛ\\Þ°èb¢xµçœ‹Åü’Ÿ¾ý·üW'œÌ¦p. º¦åãGòö;ï±ê{²G·²;Ns±m|˜-»WCà{¼ýƒðàÁ}¾ù+ßà×¾õM¾öÆkÜ;=f6õˆªF†¾çòòŠóÏ9úœ'}È|¹¢#lÓÒV—½>xÝd‡èÀzqÉð}~Ïõ|íÍ{‘±ï˜4–¼xü!?{÷Ëõ¸í†¾cÝIaÍüâ9ø_wø‚oæƒÞçùù9×Ëëð¾%™Û†fBÊa¸b[ñK ã*ò£|wßy›¿ü‹×xëë¿Â7¿ù-^{íuNOO89šÑ´›+˜c榄¾c½š³X^1Ÿ_ðÑ£xþü)ç—Ì×=®ˆ«¿õ’—b#/Õ¼>KÉSóJ05B#¼÷³wXÌÏ9žy&näæâ‚ÇOžFCdŠmÄf)gni¥ujÊr1çÑG`’øèþ '­C×7\|ôˆË«9Ã8æ®]äŽíÝt,+)Ž|ôá{ôao„Yã¸zñ‚ÇŸçDÙ…Ù"aGÎ/.¸Z¬8¿ºáþÜÏh[OÛz&­Ëë1Ò¯³°~qþ‚›‹sBßa1æd‰u¿äéÓ£ããÇ_ãÁƒ#NžÀ°¾áæúŠ«‹kn®nˆêÐh\<ÎO¼ãÅãN½£‰#OŸ>¥ëº¼:­\o·Eò=+0ݼÛdÕ(aìyöäc‹Ïž=çõ×^çäøç„1ŒÝ ¡[p5_²\uôc¤q?zŸ®[òñÙ1Ç­ÇÆž÷Þ}õªÃ»&ûªyqž~Ýñìñc~4ðáq‹iG·ZpuqÁ|±$ª‚sˆ(^#Ë«sÞ÷Bßs2mp©§›Ÿóñãgt]W©Ïs¼Ýš×}î¼WKžt#—/.øèÃG³£ ³iËÑlJÛ4Lš41tk拺®c¹ZqqqC)çꤔ×íˆË×S‡¡›CY¢ussÅ;ïü˜qµâ¤Q,t,æW¼8¿&&‡Ð~ŠPÞ<Ϭ—s}ðiìpfx',7}F7¿áÃÿÓ£6[hDÃHGÆY¬{Ô ¸ÈåÓù«?ºä§ÿýOqMÇÄb‰5eµX°š/ÑWf¼J¬·m ¥†Õõ9ï¼Ýñäƒ÷øÓYNpÌÐ8Òh J^¯;ºq$š$ ã‚Ÿüõ_ðñ;?bz4CÔpÞe‹#íI1põâšU7ä/EèK±[ñ£¿ù>~üílŠ…€¤ˆ“€s~½¦[®èûˆ³€™…š¡FÏøÁßü%þøGL8ÁÌÞ}ßq=_’"Ηž~@w†f¶]ÄB yHb5 „õ’ÕÅ9üôÇL'MÎ'𠾉4¢cÊÞØ!0ôc?_j·<žErÃÎé:aäùQˆcÇÕ‹Çüíâ’G?û¦³çŒ8%\:b¡çúú†Å*e‘Õ»àQËźҭ›bÏõ‹§ü·ÿçÿæh2ͧ—¼wx‰zúuÇùùJ—¾vãC7ù%V9®ÑøâryCwõ‚Gïþ”ÉtJ;iq‰bu•wdK ŒK†aIG«}ŒÄbm‘}¸7f-¾ØØlÏæ"`§\DÐDåõ­{ž|øMãiÛÜ1,.æ®x„InJÕ@Lã¸$¦‘~èX¯;Bïš\LÞ„W˜íÙÛ[¯ƒì…2WÛ§¼H“Hýš÷ß{—Ç ž€³±¬Té²­“k1Ùäe(F*Iùk¤AÇŽù‹gŒÝ’ÖCÛÂâŠØ÷E¤Þàl«\û]´ŠÆGï¿Ë³§à<4­'~=`¸²ßKn±3•\‰Ëð”Åù¾ăsÅRÌeÏðGâ8Ç¡ˆþeþ0Á’2vK.žÀjyNÛx¼d«3K=1„11Œð¤qäêü9ëÕ‚G"´šh5@· ïÖlã>KöÅfeÖ6þ]qÿL+×MyµCß­¸üø¾m¡q˜):öY„µÈد1¡@{žô.WOiÛAy\GM$¤b³ñŠáÙ“',ç×L[G´.¿Ça¤Dz= sik-Ó-oxüþ»\<~JÛº¼RÇåÕ£¦\”q~WG3Ù¯òçÉ+*&Ž(‹ù Ëõ'Ù’ÉK™{\É҈ƅëéºq›_á¶û®âF¶wÚ,/, ëÕ‚'>âúùs¦q:ÃÈzÈùGšRPvò‰E~Řß\1O?B4‡úÆ”X¯Wyõ eňPr?J³Ã&%æE¦ŠâX¤À8¬yþäÑÎ+Þ畦ºùÌdäÏO! 1¢!‘H¹€êö쯶B½!·ÏJE%i¢zλ%7§q0m”¶iJ´Šå¢`™J’&†>ŽÑ 1ãXl‘Jà·}Þ‚a¥R©T*•Jë¿?úï~÷»üÆoüÆg …===å;ßùÿù?ÿg¾ûÝï9¨öw~çw¬t*¿œ¨*)æÀ,s8ôt«Eîfs ó“xBó®ñ8¹Õ…W„aUA\ƒoZ4«.!6†Õ‘ãÞiÃýÓ ÷N'ˆ‹Yl³†V¯½~Æå20ï—ÄÐãÈw-Î7YX+ƒ–óÇH)ß ª:bÈÞ§) j š)¢è˜°—;Gsè`ø¦Å9kdÖÒ´ ÷'ÈÃ3ZËKó-*:– iåçøÚîžÈx©l_èΓìV ÜêÍ,ßšc¤ïûb[ÎnwÔo/·‰j‡­b¯õlÑb¡' kÒØçî”¶E€í›|éfï+Æò23eµ˜³ìà¤æ =‰gYX$Z™‘å ~1wÔšÑ/®—Wœ“-\3Éã4Eh<¤„¨n¢÷ÆóÆ×Y‰ãÈâú’ëË ð‚k\ë‹§°˜¢iÌÒÄ&SKhžiµASbCwQƈÍažBÈáª.[h8$g2¤Í{*[æ kæý’ùe¹lc šp€Ç¡Þï,40¬nx±¸ä…*~:É‚¤¥­Ø‚åכෂãÎâîÀÊÀ³óº¶Ë›+–WW8ó9kÀR±ÌIÌJµK­a) Þἡad~Ñ1¿<ÏÁÉ”€R‰E€Ð¼¦iÌð4Ù&Z1õ4¥]ñ8W<ÃMÊ 8ð|çU"™}:ÙL6Ÿ²¼ºÊ…‹x³çvr8Ú<–¸åà²ñ*'á}‹ªú5a耄8Å“hâȤqÅvM?q^6Ucµ°•›Éã]w~ëW5Ó­0kÀØ÷ŒCW¼ô÷BWËç ÕP<ÇIã‹?;e%Iîζ40‰1¬7Þ{8‹ˆ„,\#“rªÆ^»$ERÂk`& 4 Ùm¯Ó› aW@ߕŨÎuG,T~ŒEwÛ`ÝíûÚìS—_£[-éÖ«m³ƒ3ÃňSÝeئš“Ï—~½dì–xÑÌb¹<—ªÈÞD «åœUZqÙðŒ„Q_ÎGe÷žöÒh,×"_¦¤ÄØ÷Ä¿¼¥r]Ë×iWBx÷Ö>fA¹n%–1Ù„án*âÂVÈNã@7*=B“Fœæ¢YÜœQòÉÑçR> FzÂг˜—™`o¾tÞo- mSÚœ0²ëJÛØ¼)1h^Õ¡iû™HÊXØ~Vrn;;5üfiƒÒdÜþ˜çĶ!抑¬„¬«2Æž±ŒdO¾n!›ƒ»£ DË×›Ïe;ívB¥R©T*•Jë¿rNOOùÿâ_lEõßüÍßä;ßùÎçzžù/ÿågù+¿,f‰âFtìˆëýbÁlÚ€N„¦É!®)å›ïVí&um«’l:›e¢åÄk ј/º.°œ9ºqJP¹)ÞO'$AáäÞ=îÝ™^w,ûžÔö4~‚÷®t+ÛÞ¶OË"LŒÙ»=%A5ooj#"­z5JÔõ ï#¾i  þhJ;9ælÒÀñ”£uIRƒ˜ÿù}Çb‡ú¦ÝŠ´»œÃ;¹k­8rÐaJ C¿ÓÕ îí6}I‹x²µDØÈz ‹VXXa±ÇR$¥,Ƙî¾¼‰¯ZŽ~»³ß>Oª™í$’ÝÝ?8—=ƒÕ/¾Üø+¦Š“¦È=ºÛÕ¥0&œ¸­]f9cÁùì][<\Mäç]¡bÛ›­?4„r£íJ°éæ½ £sÛŸQB@L ‘X¬Þn \9_°Üù'9ÕYîÎÂjÄ\p7°‘WDdAÒ!µ!¦TÄ[ɯµ ±µÍù’Å!çb94Zrç~1µÚ˜ªÜ5<_ö¶½_(Ý™ªÐ6-¨ Š›C*B‡’h$‡Þ¦b$n#ˆOrn†Ñ,€w8×à\ƒyƒ$Û®X-99èÕŠHRd“ÜõjDŠ7?{¢z¶áHñ8±ïYÈM¶+µm2þ6§ rrh›ùP¤XT®ØR%Ë«ƒœËÙ:ƼâñX“Ð1çs0tLY s{Çä@βÒ&ܳtÈ:ò¹¬ 3ð³éNðÜx™o—ùè¾ì_NDÙbʸ\éàÍâXbÓÏ¿ó*ßÅ= ¨Ëûå9²†ärWî&èR KiO,öÛIP6°eÌ„ð~‚Ÿw*Ûí6Ö3Å»~+ÛàSá¢J'“]€ˆI^Udi»Êæ@4aŒ ç„Æ·ˆåàdc#úÙ'Ôo÷21>í´(RÞ—@ÈEiãl¯óºÝwNÉ6sÖ&¨V›)ö›l·Ò̆ã0Jzÿ}䢾—‘™ld÷<¶7fœË¸å3ï]Ÿ«lï3Ó¦¼WøÄÏš4jm¥R©T*•*Öa~ë·~ëÀç­·ÞªG»ò™TÑÍ=·ÆŽF„¸¸äڦܜ}‹æÍ Óiö¯Vuy¹°6¨O?›Ð¶žÆ,®˜Û‰,D’¹Tüí[Ì<±7ÖѸêžÝ$¦“D;q4í„vr‚óGÌŽÎ8ž-Y-®qaM;mi7B«ÜºEQ!jb{Rˆx1a„IÓ†l_0ÕÈTèþþÜÚùíú ¸¥¹o-ØS) EbYA´5”ú¤¯˜»n_ß7CA-ÝVú_ªÒ[ùËN䶆pë^ôð=d!ž[™ì‰vûå+9”DöJØÁ‹ßõÜÛ~I\9ØÐý6^“g‚Í¡°=;­²ÿ\®G·Lì_ßÚ–O2è[_Yé”=•[öö¹ì‰Ý&wªä@vº«ûo#tì órKcÚOPÞmÝþ9fÛ=²[ ${²²í‰”úÿmñnk‡³'ÊoÏç—Çí˜d¼tNɾ…žàs×p–—@{ßFNºw¨öíM³ü†î+r¸]Ÿ ƒÎ_{oBncá†Õáü·=žúR‡ø]vrçʹ5~äîÍ—0j{ é»pØâ?µwŽÞq\dg›ñÒ龿v÷.üä]üŠnb+V3vxü^Ò mï#wÏ’ÛµA&wÍJ]ÓÛg·‡Ü2!ÛyÍoÄØ­}g5xn­¯ÚŽ)‘Ûâg!Û`X9¬1›Þ±g*wDéÊþµÇfºÝdÿŠ }Ò8ä%ßðͪ…íÚ‡ý‚Òö×ôçÌÃMp·þ­ØímÙL“ÂÝìïãùKnn¹uÞÙÞ5h;æ6 r¸fP÷.VÂíÎôÃ.ñOs¾¼ônϱûó‹ÝúX ¯~þÃçÑ[Ÿçn_‡_ž"î<–j{EQ9ÜC/íÛ;ß¹uÞÜ5Þ¬ºàT*•{³Å IDATJ¥Rù…¤Šõ•Ê+PIJ’„w#æ=),¹¾zÂÉɦӳv’—¯o»…²ú8ß[?e'ÖïwÌÞv™nšsœE£"ï ïW¼ë Cd””òªrM–}TýÎ+ôУ –;í»_åU›aŸå ÷u,»ãFWn‰%¯¼)¾¥ÛÈçÛ'¯’Äås½Ï—ŸP¾œ úê“ý„¿ØpÙ°–Ïôžíæ®})vx*¾zÃ÷E*yeAK>Ã~Oµ£ä•oØ>ËN~Id½ýãÛö9Æ|ÑSÿ“|Æý&ŸãÅ÷ ö¥œ6ŸwøË§ÛKŸnì³§OÞ«ò Cl¯’vPà°O>Ÿ^5Îåçl­ìŸ¸ýv0Ïo³Èå®1_áo+ÂÊ~Qòóø‹¿|&¼ª¼%_Âyi&Ÿj;äööÜí7¶X/#ûJöúíÏ··íçÏ òΰŸwm—/:ËÔ®ùJ¥R©T*¿¸T±¾RyŇ{3ˆQIEwàV\Ý|ÌÙƒ×8¹wŸ™<ȧ‘XÉ–Î Îo¬î¾A8¸A;ðÑ,B¶9bưY<â,’’Ñ÷FHB«B´bA­‚s‚Ší Þ $/'C ë×4:0káôx†{Tm×ehZüQÙv¡ïûŠ Þùì-žd‰˜nlÐI 4 ÷4MKÓ44Çûì?nÅo8‹øûÛ›Û6e/±ôˆïù^gÝ!˜±è½˜óè|ÎMéC"©Þê´h¿ öäWºì¼%œBì CGŒ#¤,›J`­í‹þf_š÷eßtË—þxáÓŠ~5®m¿ÿû«ÜöÕløÿÔÑ÷ zÖÈW´¿+_í!ýJÇú/â›újæû%òìÖÝš‡O7¯Øgž“¾úùõó¿B+•J¥R©T¾LªX_©¼òÞ#ÛÔ¨:Td‚Øša¼f±|ÆÉâ>Óãû´“‡%„Mñ2™6œœLh'%œ’éò¾æ¾±ä®x·±É±m·ýz¥9 Šomþ~ˆ0¥FÔìS¼Ñ“ö™­>¬ØÇmÛ²Z-9ríÔáålÅUˆí¯¶½§8¼!SSD‹oª Ó‘q ]µ“¶e2Ò¶\ãÆã›×44m Í,!ˆûž®›/7!so×.ÀÕ2òÁãs~øã÷ùàã'<»¸aŒVlémrv Ôßqs)(ÎŒ†„†Ž4¬I¡ÇRÊ« ʱ;L«T*•J¥R©T*•J¥R©T¾dªX_©ÜÉÎÓÜ4¢êQT#~X­/¸º~Âɽ79i&81œ›0M9;;ÂycµžóäãÇ̦ǜž>àääþÎBö‚/Ërg¹í§í„fr IIªÄ˜PÕ´æÍtÞ͈šh[·ó†ßóßtÄ[QâU•1Žè°bz”˜´3„˜VKÿº”@³WöYo‚ÅÌH¦ +b;N¸½€;&EÇHð=xÁy‡o<®iðm›Có| Qt`Þƒ÷9¹Ò5‹t!²æëžWK¿˜óôbΣ'Ϲ¼Y°ê1–4ÿQÝŠõû‡u³Or¿!¦8K8 «9ãjC¶ÄÑDŒ‰Â.8pr÷÷¸‹¸ÖþaÌaŸp åUžß•/ã «çXårFøÜ9p@ª&ߟ{nØw±±:wÔÏC•J¥R©T*wSÅúJåU·¨bÙÎ\ Õìï|ĹH×_1_±X½ 1;òLgS<8âølÆj½àêúïø§'÷øÚ›oÑN¦““ƒàý.;°" GÓ¶ˆ—$%b)à0&³Ò8Ô”¤‰VÚRØ-ÄÎÝå–Ã\7¡‘fĈc?irÐl²í Vb@sW¹ˆ+4y›ö·w_°'•dSp®XéÈ.˜Nù¿Rp« iZ¤ñ˜ó¨xÔ æÌçïõšX 7«5—7 .n–<>¿âéù ‹u`Ñ !¡ZVX¶¬Ñ”½öÍì0 mϽF̲PoBǰ¼bX^£¡ÏEšI1’b"T:ÜÊß[ËJ•(*u¿VêÀüô‘:Ê¿ÜC _üUêl]©T*•Jå—“*ÖW*w’CO‹ I=Oh1utà ×7O8>9ãôô”{÷f¼þæÔF..\^>ãúú]·Ä,ÑN&üÊ7~SA5‘9wWè[q>5É1Îy¦mK«‘1ôŒƒ¡¢ˆs9v³Ý˜l=³£f!ß4KõÎm^S@”ÙÌsrÜCO[üõMrgý®?~ÓA~+ØÌ¬ämÚÕËZe¢k/ïלëªX‚ä s-*ž(ŽÑÑ£BÀxtñœó. .®ç¬ûÀ¢X 19‚‹ ØWt¯«~_°ßwsÎR ô ºå5C·€ÐC ¤јvûv[°_Ä![©Ô1Y©TêÜQ©T*•J¥R©ü=¦Šõ•Ê+ïÈBm¶À” „¼Ð ®®Ÿòðµ¯ÑL~•{÷Ž8=9âÅå5çOy~þ˜®_0Œ} =Í¢ûññÚvŠOHÅŽE¾ÁÎåPÕM ê®d`àFâdLÙ3^•X¶·Xë19%%E-ººÃ»,þG Lg-''3fÓVhãò3äö{¶ª{‘µ÷÷Ûì÷Eðlóíþó»ö­åHU’ Q"*Ž$-ónäzÑq½\s=ô¼óì#.Ösºr®÷„h Áˆ–P#ûÔ#8‘ì-¯Ê&'Ù·åyY óëKÆn‰†RÀB$ƈªþÂÖÚV©ã²R©üòÍu©T*•J¥R©üãŠõ•Ê+Ùy>›AJFЉÞ%RX-/X­Î72;‘ùü’ϸš_ 1`¾¾fx5ñµ7…‡÷_çøø‡© (&>‹õ&ˆ8´t³›Þ¶zïq®!Y„´µÀ§´Å³íʇƒsŸmgD !ðàÞŒ£é_„x)Bû¦H`{v:;ÿúÝ¿e¯ïþà¶Z5[ál¼øïú-q(FR!$a4Ï:(7Ëæ]äzÙsÕuÜ WËÀMébÀD˜LI %Lvs€3ÁL·þüR¾·ó—×íqSDB¿d}s‰ökˆ#F4&4Y«—_hÝ Ê•:&+•Ê/ßÜQg’J¥R©T*•Ê?<ªX_©|Â-£HîrǤx½' ¾Ad$+V‹s†îЬÖÊ‹‹Ç\^=cÕ-Q§ Bˆ‘åj éã@?®xøàuNNΘ´G Q‡Ò¶eÉ÷ÿw'x¾4Ž "~^[­f%UØü‡A ‘~½dhÆ~BЦnŠœb’;ùEr¡@îêJ¿ãÚ6ÛLÂ÷äüìŸà5HdË››NY ‘›uäùåŠ>Â:%càªëY‰!˜Š½å1ê­£e¹VaVôø¼"@Š'm·[‹PqÝ’n~IXÏq¡‡8’B …„%8\UP©T*•J¥R©T*•J¥R©|5T±¾R¹“,ˆ ž,6»Ò]ICÊ–2âh'‰õüœëËÇ\^¼N3=áÙó¹™_Ò@rLÑ&G·Þ„kâóåê’×oð­oý#Þ|í-š¦¥ï𠥄©Ã‰/ÝðïÞ{,e=Z£€•ß¡%‹Ê¥¸€¡É¾tìcÆÈ8®XÜ\1\u<ôßàWïqÿäNGÐ_€C둽TÖÝ‚ƒ[ä¸R8ô¬ß‰ûjDˆ4ôÚòäúŠ×#7ËIJXÓ Oçàz\sµ\Ч-Oã°õ¢ßöM]Er6ðî'²3Ðߺî[Âŧ#ÃòŠÅÕsˆÎª9P6Œ)¯:È˨&º•J¥R©T*•J¥R©T*•¯’*ÖW*w²³”9ø®e<†@‡:Ïà<~ô.Ý0¤åé‹tÝ$¡ê@qh’{]Ã20Ž+úaÅÍ›W|íÍoòÚ÷À<¦ ) aL¤˜°¤˜9Ô"ÙSÞLKHm©‹g;€–€Õ#!„ƒpUUʼnãìô.yÎÏ—¼Ó>áþÿñ¿"1àÌå^t'˜&;eþÓ.FW³¢—@Ö—éHɸéž\^ñѳëÐ0¦†¨ )9BRÖ)Ò¥‘ħ•Éoòl|õ÷¿c8 ÊÄÃÕù3V7ZgXL9P6)>§°Ë/¨T*•J¥R©T*•J¥R©T¾:ªX_©Ü‰Üú?ì7Šk*bø8"®ãüÙ®çK’´ 1WltlÛÓmZŠ’q=AׯY,¬ûžÙô„ã£lÓÎ<Œš}Ó 48Á‰Ë–<š¶:r²§|¶yIšˆ)ä0\`ÒNˆ1“!Læ”›õ‚÷>¾äáýœL”Óã–Ó£ ÎCÒ€ð99öÖ¾±OÞoöRký)‹ùš§O/¸¼I¨?×`æQƒ¨‰1†Ðí{{µdoû/ ÅòÇm7)ûç+q$œ;Ö‹KúÕ Äž%¦,Ö›îÖ±«T*•J¥R©T*•J¥R©T¾JªX_©|L•”!œX.®Ñu‡º×NpíßLPÉB» Û0Tç ç \bk–ë%ËÕ’ÅjÉÙÙܳÓMOi²äu3—ƒ_0[ß5›Ócf%T6a–ˆ±ˆõ“,‹õCÈ>úkˆ½°Z.°ü”·Þ8æ›o½F{ô:ÓÆÇg 'î jxE›ý«|ì h0qŒ,×W Æ0‰áÊ2Íþݬ øt4¶5î)tÔ+B‰xÄžnyIì¤qÄòPŸ œ“m8o͸«T*•J¥R©T*•J¥R©|ÕT±¾Rù;Á~ #ÓvJãaŒâ…ÆOq­C#ÙÆ¥4‡ç&u%„@07aŒOŸ}ÈÅÅ3šfÂtzÌý{yã·8;¹Ïñì„ããSbL˜ (˜l¼å•ü*Šš‘4¢ñÞaämÜ¿&MĘç¹¹YaaÄÆG>à[oÝcH¿Æ½‡g¼yršíëÕh̶ᶻw/Ÿa_éÖ g“AÛ­V‹ž0ÍdFÄ“’àh^0`JJ±þS¾–nºëm»bŠ“„#e±>Œ+.Ÿ?BÒ@ƒb ™m»ê7üfš_¿Šõ•J¥R©T*•J¥R©T*•¯˜*ÖW*Ÿ…M“µŠS„ øa7Å9OІô‚3CÜÏ=ß›æpË]ò"¾øâ(Î9\#8Q”@–Äë‘e7çxzÂñÑ)÷ï?d6;a:9Bh†Àññ)³ã “I‹J"©b¢8ã0KˆË‚¹©â½Ð¶ Šãèè˜ÈºwtQX£•>$Æœs?—ؾ§ýN”ß|ßÝáY ˜"Lp´$sÄÑ.±\/Y¬çŒãHÎøý4jyîÚßdÏ:! õ–hʵŽ"«ÅóóÇôósZK4Á”~µ"…ìW/V:êËßÄí¾2[·R©T*•J¥R©T*•J¥Rù‚T±¾RùŒldc3#¥„1:ăH jhò¤iñ.?*š;˜,€‹€ˆ âŠ0ž…{Ã,1„ÀVôý‚uL7.89¾ÏlvJã§h¦GSœïA‰(Ù'ÅDˆc~ `;Æa`!*ŠËíI G7VÝH?ÌÀç¨Ù/fs— €y E¬k0ñ€Ç(V=ãÈÆWöðËâý¾ˆî¬„ÉŠáÌp–°×sºùýâ–¹k>*„ˆ†ˆÅ,Ç—#±[ ±wô¥vÙW*•J¥R©T*•J¥R©T¾ªX_©|^¬öDb4\£4ÞÈš{ƒ¦€HÄɤ(óždVº´s¿¹s®üÌí¤–PS1b h ÚÓ+–ë“ö¸ü9âÞ½3ÌNA Õ„j¶t†žÞ7¨&æ‹ëå’¾!’Ti|ƒj$ŒkbŠÌ—#×7 –Ë5èCd»•öw“ílp6~@æ¡õY¸÷E°‡#1Tµtö†ˆW£¬V²Ÿ-—b ëç,n^°^\û%.v¤Ð`¤`ˆÚÖç~óŠ"öÒŠ—²v+•J¥R©T*•J¥R©T*•/*ÖW*_5%Æ„FÓ6€Ç4baF`R:ì]±À1œHé¬÷[ß•,1o;÷1œˆ$SRL(Ðõ­[qÿÞ¨¦\4P+>a&˜„0ryuÎü憡ïúŽ~¹ m[pBJ±_ñàØsq:áòùé_c:-ÝþŸÍ¢þç ä•~+Òç¯óê¹ã_Uñ’}Öçßû—idì–Ì/ž³ZœcãI#b4¬‰£¢Éáh÷ln9àÕÏ^íp*•J¥R©T*•J¥R©T*_&U¬¯T>·íW¬(Ùš”"MŒ8<â"±0€yÄ ia ®i@\Q•mKwñ]1LY4¶,fãH„Öo¾ñàZSbŒ1F4EÆØÓu+®n^°\.ˆãˆŽ#1ô #ª–ívVK|˜pu¹àéÓk¿uÍó 'Ç G³ r+ä5w˜Û¡x}°oôVGº•¦wAAÅ¡øòU#šbBÕq4®ÅR@MaÏJç®êAŽÚ5\é¦÷Þ¡_°ž_°¸yNè®hh-¢)B †„iCã۽緃WãÖ×U¨¯T*•J¥R©T*•J¥R©|ÙT±¾Rùli3!%‡H«ßFÄFIJØî,àlŒú{˜ó¨4 †8‘] )®„Ð2Íå9ªÕå¿GÓxš¦Á»l¡£fŒc¤!’ºnÉj5§ç]cDÄÓI‹¨4!)ÛòÄç—+~ôÓGŒCä͇§¼õÆ=Þ|ý”ÙD˜LZÚ¶¡i<¾q4.wÂ{ïçP3ÔR¶Ÿ1ÝJêb’Ó^ £&F”èkš,ÞÉŒ>ŽôãHˆšß¯ó8"Rä~{åQÈûÎq$œE$FâÐÑ-®X/^ú+$­@) „!#¨æ¢ˆÞ±„ÀØä ¼üÊ/YâT*•J¥R©T*•J¥R©T*_€*ÖW*_ˆ\ï15‹{ m¥ÖgÎ …æ˜äæ<¹«^J”«©4×Ké¼o¶Æ8â²§ºÃÑxGÓ44MƒsUAé‡ÅúIi`±ºfµš£2âÚˆI»†Y3# ŠhÀpS3®ozVËG¼÷Á¾öÚ¿þ×ùõo¼Æ½“–³³NO9>ž1;ž2›4Ìff3Oã[¢EB xQ<–ûåÍ03œkñ$`°D§‘…Æç€[ŒdʺÐbDKÑÂÙN¿K߈æBBqŒFÒ°f½¸f}sÁ¸ºÆé g#) }ÇØ'L=âH.6<§”¿¬*ò•J¥R©T*•J¥R©T*•¯ž*ÖW*_&h‚00p)✄€!0éŽpxÅ9J«`æJyñvl¬pЇºsž¶r||Œ÷ž¤Ê0–«5«~M?vŒ¡cWŒ©G]À$•×|tç¾üQçÐI Ia#ËÕ9/ž]ð³Ÿ4œL¹³ÎNxãÍ7xøàŒûÎxøð>'÷& 3eÚÂQÛäŽ{”±qâ1i‰êéƒp³™¯G5’I~w¦ a êHÔHtoF6ày•i~þ¾Ãphé¨ý‚n~ÉúæŠq5‡±£‰4öÄ¡gFRG“õx6ÖüÅÚGöºøeÏ¥¨R©T*•J¥R©T*•J¥RùЍb}¥ò¥°“5)‘¸w’‚G#¤5h‹HBDòÏÄbÙ>Û¯8€"Ý[î°7h}Ëñì˜{§g4Þ“RdÖÝ’®[±ê–ô㊤A&ÙZÇû6ûÜÇR0CÌáÊUÁT³¿¾kƒ>(óÈ|•x~5Ò4s¦­çÁƒkî?8ãÁÃû¼ñúCÎîŸ2›yŽŽ„ûgžM™MÞ f`êI©aÑ)O/×<Þq}µE¼'ª2¦!uIÒ£’‹Ù ¿a¿¿^^ÚëàLqq$® ‹Kº›+Âj ã€Ä€†‘Ðõ¤0BÔR,)Bý¶=g©³}{U¡ *ø•J¥R©T*•J¥R©T*•/bý³gÏøÝßý]~øÃr}}÷žo|ã|ûÛßæŸþÓŠ÷þÿÞ{ïñÇüǼýöÛü»÷ïꨩü\R*]ð%tÕ \#¨$­!yˆÐ"Ò"®<ˆÇáÐM·Ù®­Û޵̦Gœžá½'„À0ö¬»‹Õ‚U¿`=ÞÑ& Nð¾ÁKîx·fV²m³ O#  )!ׂCL lP°„çsåø¢ãìtÅýûKŽO§Í÷N[Þxí˜7qzŸó§ú§üÉŸü =àÞ½{uÄT>5ª‰ò×f†âñÙË^šÎM3œ›a€Š Vœê%{°Hê‡÷-“É”Ùì1H)Ðk–ë9óõ5«a…Zbæ[T Ã9ïïÁ Ö*fRþš”fêQg„^1Kà²HPÄyrzÞ®U€~XôKÎçÍZ§Ïo<<áõ{ÇÜ;=âìø„×¾Áý׎P'\ÞŒ|øáœ>Mˆ2ƒÖÐV ãHÐ%`.b’ýüMrt¬™àlcŠ£Û [Ì 4t 7—¬¯/Vslp$bêCße¡^G2{Ulì+ÿY©T*•J¥R©T*•J¥R©|UüR‹õ]×ñþÃ`~û·›ßùßáèè€?ÿó?ç?þÇÿÈøCþàþ€öÏþÙöqø‡ÈúOÿiÛýÆop~~^GKå3a1&RR\ñMħ„œE|3"Ó„ 4Þ3™ÉÑ„¨`jLf-ªJŒ *4Í”Ùô˜Ùô3%ŒõzÉbuÅMwIŸz¬Q¼¢„,ô‹€Ë}è!¦\h…ÉtŠEÚè‹•±îŒ‹óÀq;0›ôœ¾þ '÷_#ˆ'Ú}º!0¼€E¥K«°¢kTbè=ä ‡CÌçÞzK 1ï3É>õC¿¢[Ý0Üœ£Ë¤Õ :®Ñˆ!ÃH #¦®¼‡rŒ„WëñÛ^ú*ØW*•J¥R©T*•J¥R©Tþø¥ëÿìÏþŒù|Î[o½Å¿úWÿê {þÿãÌ»ï¾ËïÿþïóWõWbýùù9÷ïßçŸü“·¿ýmº®«ö7•Ï™‘bBÍHI™8A$_½(‚àgà'8ß Mƒ”lY'‚¸†¦™0;:áhvŒ%è×k–‹V«9}\“$³l³îŠ{éN/¦1¹#ݵÙ#_& ¤˜pZ6Z%+žß*›Ð[›.{ÌaNР`¹Hàz#J'‰sÿ?{÷ó$Y–žuþû¾çÜë‘U•õ«[R·¤# Ò=6ƒ±ÀŒ™–˜±V°cÁ?‚a†±aÇBÆ– Œ;ÌX°˜1„Z2¦ÉZÝU•™á~ï9çÅ9×Ý#22»Z]UY•õ|º£"ÂÃÃýú ¯Šç¾÷9Ü\-T¿åÝåß]qX'–jTgôø7*•J¡Ri>ºãmÜ=cwƒì#¸¯•XÔõÈòâ3Ï?áðì§Ø¡/&ÛÖ#e]Y–#µ¢UF“Îè¨ïu7¶-ìûàgvYz£¬^DDDDDDDD¾ ouXÿÃþ€¿ô—þÒ£½ô¿ó;¿Ã¿ý·ÿ–çÏŸß»üw÷wù[ëoõ‰dàÿðõL‘_HDÐJ¥Y%½/Û¸÷—´µàóJÚ]ã¾Ç“Ö6uw²ÍÌÓŽ«ýv»kÊRyþì9Ïž}ÊíÝs*+á·»cÞ?ÙšØ{µN¿$0Aš¼ÏÔ»Jk¨ý B´Ñç>Âú­†sÌn·^¥Ó"'¹[k[H­2yP¹‚O_p[wä+XqÖf}áܨX…•B¯¾  ,ÚÀ­‘l§Rë‘õî3Êí Ï>åøâ3Êígøz å@Y,Kì£õ:³Çƒ÷ø\q¼"{ùr½ÕaýßøƒßýÝß}e×üÍÍ }ôѽ˟>}ªg†|¡NK˜=@r ÂÖƒq¯`äd·=Ù÷˜eÌ)gæÝžýþŠœ'înïxöüÏ_åøâåxK”Qï(åŽe=²¬ ”6z}ìâ'ñð£‹EeÃùé½jÑY‘/Î[Öøá‡|øá‡¯üú¿ÿ÷ÿ€¿òWþŠž ò•i¥ÂV)³®€õfg @De]ï ÍLï}اìÍÉ9˜fƒÔ8¶#Ï7<;Þpˆ…Èôitwáxûœ¶p*“WÇÇã².Pë¨ÓyÝOã2„7=9EDDDDDDDäÉßÖþþÃà?ý§ÿÄÇÌ_ûkMÏùJµZ!ú¢§uZɵ[Åòæ„9-eV <_‘§k|Î\]½yáÙñS~r÷/lá.µ>…îŽiz#aa½¾¦§õ½ž Ó÷P¼FÐ,ÀA¢V§¬F­· O£›?gÙµŽÞ sÃÌØÅn;¨…¼{‡ë>zšùøã÷IùŠÛÛÌO~üôù ûé)“OÔÖ(å@µ2‚úŠdœlNn¿ý„vø”õöëí ëñ–åî†rû‚¶ˆºR£ÒÚÊñîî\}³mlÐ^Ž7?]å¼ì¬&èEDDDDDDDäÍøV†õ?úÑøÿâ_`füý¿ÿ÷™¦IÏùjEÐj¡µŠÕZÁ[%匙ãfà‰5Àç=ìÔyžr\?å°Â§wÏ8ÄJI}AÖl>É­×ÕÐûäÏ)»ÖÀ3¨´ÞGôƒ$Zä^™ã}&áXÐûþÖ…hD´Þ»_  u]8XpÜñ^æÝ'Oùþ÷?b]öüñ?çù§ÂÎÞ!›sl•Ãz¤æóJNQÉ5È5ðåÀñÓÿÁzóg¬Çç,Ç#­¬”㺈Z¨¥Ðj¡–…õ¸BlAýùè‚Å«cx‡1./yðÃÒóUDDDDDDDD¾tߺ°þÓO?åŸþÓÊápàoÿí¿ÍoÿöoëY oNQ 5‚Ò6MäœpO˜'8¾ Z¡ÒXw7ÏfÇÕ8ÜY*Ø41Ï3´rêÆ9^«ÎŽ7·ó¢³ £Y¢‘ ÏäÝd&Rdc}ó- iš *Ð{Z«êºðÙZñXq_¸~§òë¿þ+¼÷áž›ç ÙîˆvG­3•BIªq+ìwN¹»¥Þ-¬7âæÏòßXŸõ@A|++u9PJa]Wj­}š>NËèžö‚ÅËm8÷ö]\ªÂ‘7ã[ÖßÜÜðOþÉ?á'?ù ý¯ÿu~ï÷~OÏùZh­±®+­5jM¤œIÓÄõœ¨VY/xñ“#ÇÛç0]AÞciÇõþšdôI} ð±(ì«î©WÚ4Óp‚ ’(æg¦4“b«c-õ·í­‘¨˜5°6Þ4ZYY—#‹XÛÊ'‡ÂúÉ ÊäìÞûcþâ_È|ôKïòñ¯ÌüÙgϸ}~¤í ò-ótÄÊ í“ç”›OY?{FyvC;8Þ}ÂZ´VNa]—~` Vb ê_î¹áu{ábÙÝ Tá ñEDDDDDDDäK÷­ ë×uåŸý³Æ~ô#þê_ý«üÝ¿ûwõÓ—¯ˆè=ð­Rk"ׯÁz¸%Üi£® ä–¯˜wW´zÄËŽ4íÈóUám á½×Üà´1I`aXŒ >A• K‰œŸ0ÛŽX Jë Ç,z@O²á>>·Ñ ß*m]XvŽåŽÚŽ<_ åÇÏHðÇLÓÌoÿæ_à7~óc–?ú”ÛOž êá”çÔöËÍi‡ç´›´Û;Ú²bÞ+ÔJ)ÔV)ëBY".ûéa$ñ?;\·Ï{¡ZpDDDDDDDDä+ð­ë[küóþÏù/ÿå¿ðƒü€ðþf𔕝ˆ8=W[k´hD-*ž{%Nó„røXJ¹£ohóŽiÞ3í¯±4ay"¥™æ™ä;šMT Êhg7œÆd3‰•JÔ·÷‰”÷$ß÷žœ±š±Sg}?¦„yù¡áÖðØUvõÈTn9®·,Ç[^îøoÿýO¹Þ'Þ}ÇùÎw~‰÷~ZùäÅ3îÖ#ëñ'¬ñëò‡›?Ãë_ް¬”Rðy¦gò•u]z`_V¢Ö{qÛÆ_ä¡ç¢ˆˆˆˆˆˆˆˆ¼ߊ°þ÷ÿ÷ùÿñ?ò[¿õ[üÃøI)é'/_+fFD`æ@£µÂZ­9žžišú¢®¶€e–c"çDä‰ê‰›²0í®Ù=yÝ;Oñù éʉif%á$Z3c®¦+¨Îía¡-öùú‚õö†Z+µ5Z­§øÃßãG*l€Çën^ñsàåáúÊðEDDDDDDDäË÷Ö‡õÿê_ý+þÝ¿ûwüê¯þ*ÿèý#v»~êò5×—ˆm­Ñz =Z+xêá½gÜÚ&(Gš­RêB[ï8Ü<#¦+l~ß½ƒïž÷ï°›¯zh¿Z+DsX S[(-0&&Oì2¸‰h=¬zíM¿~Z\¶áî½  ¹­8+)lo¬8¥>ãGÿã'Ôòcî wwŽËBmG‚BD¥ÖBY×1=_(µ­ôÑmõ§À^DDDDDDDDä-ñV‡õÿù?ÿgþõ¿þ×Gþñ?þǯ¼î~ðþæßü›zFȳU3çÈ´hX ÌVî•”Þ*ÍäFv‡Vh+£*çHî°ü>í‰ý51íñ4C$Ži&"Q–ÀJa²‰ä39Á” ' ÜO“õX#¢ˆ(ôZœFÔÚˆV€B«¢‰²BY˜ÓŸñßÿäÏ  ¶ ÕFóúµ5ÖµPJ=uÓ·V±hý@òyy‹½ÕaýóçÏOÿøÇ?~íué—~IÏùZ¶Å`Gxý ,°¸µV’;)%"glrRkAí cMÎêÏ{Òþ Á$Zs¢Óô„ÄowPw Ã!ì´eÄë—[¢lLÚ7 j[©e…(°°²@[±(ìv†§+7ÜÜÝa–§µ ÕÜ—¬këu7môÄxÏÅyûØÍÍæUå%ú§Êoýo?Ð/ÈXˆxk„ÇFƒúÔßÛ°±T¬žfF«•œ3Ó<1Ï™Ý4÷ú˜’ƒ`‰ð‰šfjK„%°„“i-‘0nf}¢þt×ÖÆv4ZT,zG=‘btÙ7¬5XP¬U¦x +%î8–#µAkôÉú%(¥õËÂûã¾W?:çã|Ñã58wÖíÑÿ±Ÿ­Å«:ëu˜@DDDDDDDäÛì¿þÁÿýs|ÿñü?|ï×~ãs_?k7‹¼Ú›êF·~焽âþcû:=8ÛZÚJ«•õèüÀn·cšRï£7ëµ¢à=7‡pŒ­îÆÇä»Ý‹¾ž£Eaý¸F´m£ñ³©^YJ¡. k]Xë‘ZËØü¾¨nTëgcÛ8?ÆWÿd^¾B¼jòÞ^ñ³}üVEDDDDDDDDÞ…õ"_3¥3Ø+ªÚOñó˜œÓ§}aZ3cZ Ö5õï1Ná¼çÜoå4]n¤”1l´Þø#wzwZ¿ïÓ¶Žq[Ý2{ŒÞµ¿®k_4¶®=¨Æýý¼ F})‡¿œj{Å+öŸ½jo‰ˆˆˆˆˆˆˆˆ|m)¬ùš²ïÛÇã‘ãqÜÎæÝišîÝxD0On—þƒí±Ë?^:렔º–‡[B©µwз-`·—®sÿýc{â‘ï±×ÆùFQX/òV:‡éÛâ´[Xߢ/àzïÚÑ8œ¾á±>÷‹Ë­Š‹ÿ‘ëš=ºÿl¶Mù›jjDDDDDDDDäí¥°^ä­ÔCñmP>Â^¶Çi!ÚñÅׄõ£'Ú£÷i¼.ä·_`ÁÞÑŽÿºoW’/""""""""ß` ëEÞR—ÁxííÞ”û9°·‹ëǽnz,1»}ßã¡û/Æ¿N<ò¡’yy»(¬ù–¸œ¦Xcs9ý~ßë'ì¿Â­çMÜ«ˆˆˆˆˆˆˆˆÈWŵ DDDDDDDDDDDÞ,…õ"""""""""""o˜Âz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä SX/""""""""""ò†)¬yÃÖ‹ˆˆˆˆˆˆˆˆˆˆ¼a ëEDDDDDDDDDDÞ0…õ"""""""""""o˜Âz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä SX/""""""""""ò†eí‘·A|·ÙôcÖ‹¼5¾I½‚z‘K ëEÞ&ß” <ô£¹¤Îz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä Sg½ÈÛ Úxo`†f½Ä¾¿ Ììâ2ÃÜOŸç”¶+ŽÛŒ~sa÷î(ât‡/mD‹ "h­шÔÚ^¾ªù#·aháYù¶RX/òÚbï䎻ãn˜¹á# wsÌÏá}Î÷_"¢ßJlŸŸ¾Âca}pêk­´Öh-X×òðŠ4ú€ˆ¸÷ûNö¹["""""""""ß, ëEÞnéå_ðœ™ç‰”ÎÁ¼»“R¿®Ùçœd»˜¨97·ÐZPÛÖ7rª—7DÔV)¡þéAˆˆˆˆˆˆˆˆˆ|K)¬y ¸9ûý<âîëú~¿gš&l|~ž>oôpü2xM ;|Ïø²'ö#¯P«Ñšã~y¡oiA*•R ¥”Q›Ããí:"""""""""ß ëE¾‘î'Ûž2××׸q ê¦)ãÞûákíîîÎ<Ï/MÕ§”0óQ[ÙuÿØç÷™¥Öu¥µvÞ)½üM¼’R"çL)…Z*¥4ýhEDDDDDDDä[Ia½È×Ä6• Ìçi÷»;É–ÀÍ0¬‡ÞÉñ4ºéÍpO$·‹ŠšLDåw»Ý¸ON |N©_o,N{ï~O—õËO¾gí˺²¬™õ7Ð"(k=õÙ÷7H@K‰©Vjk”’)¥Rk÷…ZÛÅ™ªÈ‘·›Âz‘¯3ÃÜ A´JDF:O³`|ʉÝ<‘§DN}r>"¨­€Ù˜7¦Éqs’9'¦iÓî>¦í·PßÝxõ¢­f6¦ðÏß»›&®ïuÙµ6^ÜÞRk½Xt–spŸµU²'bsg]W‡Çã‘Ú‚h êEDDDDDDDäí§°^äëbdÜæi,èÚ'ËÍŒ”Ó”™R"yŸ ÷Ó{gòÌ4erÎLÓDÊŽÓ~÷ÞßCöÇÃo•õ÷®F<ÖQºå‡·qî½ï œ§Oߥ5ÆÄ|%"F¿ô©ûðGlU=Á<Ï䜉ÖµPj¡ÕF­*µ‘·“Âz‘7&|ܧë{ľMÔžœœ3»yfÊiT߀¹‘S"%Ç“3í&rÎä”I9õEe#z…ý¨Ëéÿ?ßï–ÉŸÞsêÍzPÿH$?juNŸ¾â¡îÆ<ïˆàTqÓZcš»ýŽuYY–•Z*kY9,GÂsH8x2RqJ)xi´çiEDDDDDDDDÞ ëE¾b[µÌÆ3rï>ѾuÒ÷Iø>9o$OL9“ÇD}u79ç^‡3e¦ÝDòÔ«nˆF´xe•ÍØšñÞî]dFúyE Îåv?’ÖoÓøfFNNô«Ó š)Oä)S¦‰Ý®°¬+Ë’À{¨ßƒýJkAÎ}ÑÛäNÍA-…RÚ)üy(¬ùŠœCóŸÛÅd{ÿÀÍHÉûÄü˜¦77Œ>!Éaž&¦ibžg¦¹öžòXìu[ ÖˆÓ|\lFð[͹à&àa}k·1‰ÿòu.¿3"hˆJÛ")æ,p‡qß û„eÇqjJ¬¥PK¥F£µrzäãÞëÑùºRX/ò2³Spn6*mrfÊ™”3îNN½§W¿)÷Ï{í:œÜ¿?ùi:¿wÍØ˜®ß«æÞ6ää§Ï‹ÉޝŸ¯ù3*txtªÀ-Naý©öçôµ¾Q glo¯û‰è æ¦SN”Ò˜òIJÖµöо»cfTOÔZXÖ E»ëgUùZSX/ò9Mx[ƒÑKŸsbšzÝͼÛõënœê_æ)“sï§O~®„é·ù ‰iÑÚG¶ƒû ËÞkˆ‰s×|Ïþ_ØoûVÌØeoçûS4?¶o»Î)S^cýŒOAòLÎu)¬¹²®…Õ fÐZÃÝûD~MÔ¾’-­o·V¡‘o…õ"_1KiLÌ'æ93Ͻ{~·›û×ÙÂz¸ºÚ1M™”œ)% õEh· >zXþr»|poÄž-¤ïÖZûef˜)û8Çþñs„Ü?«Þ.êyîp¯¶§wÏG;/¾kn$À-‘’1å™ZƒeY9ŽÇ#µVj­´Ö03Ê4anýòÒÆ}lMü¯éàyÃÖ‹|ezXÜ'ê39g¦i"ç^iSkU7[_½3ÏcÂüô—l»‹ññeÞncUÙvZ|¶/úú°!¦/k÷ëq¶¯™anøè¸ß.ûó²{ëÂÆ½·mÔ¾`p,õ^þ”èûÃÁSPJa]¡Và ”šN»º=èêù:SX/ò…º_ü~¹«¹ã9%ò”™òÄ4õÐ>¥DN½»~ž·Ë÷u2cAVz‹Îåä{D¿‰¾ÛÍä<~zïSöé\'“Üú4= 7ˆ8O›Dmc‚~¼/•(…VJÿZm§©ûmªÞFe;äœÙï÷”R©œ~ßkYÀ=‘’“R_ØÖÝ©µÑZ!¢Qk£”€e9Wâ䜙ç;®®®i­±ÛíÈÓDJù¥î3ë“÷æ´Öú#3ý×Ç+÷ìVµ“³÷€ž„ÅJòîÐZÆ“Ñb"Fß)ÆD¿YÒ“TDDDDDDDD¾6Ö‹|YNA}AýyQÙiêaý4õiûäiLàÛ©£ÞFÀlòëh=gLîç”F«;4¯T¯xµÞaL)3‰÷iÞ±¿ºæx<²®‰ˆ åÄa9Ñî×àŒ œu-cª¾6¦^i­ƺ®,ËJ)ý²««+v»=»ýyšîUÏlÍõn½7ßskÏÃYüx0 j¼‡œmÜ‚+î•ê½ÈÓ©ïkÔÒ.±=oˆˆˆˆˆˆˆˆÈ›¤°^ä‹p™-[““;Óè¥Ïé~Wý”§¾ÈìÔ+pÜlÔæôåT·²Qïbf}áØÖhµ’“݈ä”ä´Z{ˆÞúj¯­VÌŒ]žzX?OLÓLžv˜9÷j˜”28´Vû±)áÉqs¶ø|) µ6úéÛèï!~«PJ?PÊÊñxäêêš'W0zí/{ÑúB³½âg;«`{X\,ÔÛ+yzÓPŸ®·ä`£èÇ ëg ´J«[UζOKô }¥^çå ~…÷""""""""òÕSX/òÚªo¶ úÝn"Z»Æ~ž˜§Ì4%òÔC|·EÛ½‰òí²Ë϶Ee ­–Ó×{8ßhëÒ'ù§©$H™uYˆÚz'þ4‘r†”€Ænš˜§‰ˆ Ôœ3¥BDÅÂú›5Œ^7c6‘¬/[Ö#µ”1¡¾Uõô·Zue]ŽÇ…v~ÏóLJéÔ{o£Ï?¢wñ½_ ¶[@ïŸý¼ƒí–“eÇ,³ /ã  DËPÇS¾=ø Šˆˆˆˆˆˆˆˆ|õÖ‹|AŒmaÓÞßžó¹bf7Ï\]_ñäÉ5fvª™9Ošoõ7ÐGéÛ)·7£w®·F­ ÞµQëÚCóÖ° wÒ›1çÔú±ÐmJ}[KN˜Q[£€¼á÷µ–þfO>ÀMç…rÓÖ}ß·½WáômîÍ2qꧯ¥pŒŸ}ò)­ŽJžQ­Ó—ËŒ?­ýÚô^ù8’8UçÀ¹Ú¾ÅyBßÝ{ Ÿ/_ÖêxŒFÊÎ<÷é~KÎqY©õÁT}èy,""""""""o†Âz‘?·s²knNÎi,´šI)Án·ãúzÏõõ5ûýžˆóDù9¬—+Ô lØ#L¯Dë½ñF©…RV¢Væ”IÀdÎ.eæ)cÓ„Ù¨×é+ÍRÀÖñk¿oÅø1jnjTRKDëSûžÒ¨™éršz/üè~°S˜~¯§­½ï~܇[åsΘ۽Z7 ìbZŸÓÇçÒ?oX?8Ñú‡íf<9ÙHãº1ÂúÖãþ)ýпº.•ZÛÅýˆˆˆˆˆˆˆˆˆ¼ ëE~c¾/ôj§…d§)Ÿ&Ò¯¯¯¸¾¾âêꊔS_uL”w£—ÞÆÇcRütôີ¤—Ú'àK-”ÖhÑ Ffwv)±Ûªo’÷h? - 6ÃRO”Jñ¥–Ã2¦Áƒd©×Ü´FŽÆDc—Œ«ììv9ûäAřèÍû}틱ÞÄÊDfu(}ýZÊÚXÖ•R+¤Œ§ É{­N©‰VË+ÛcÌ`š'Z«ÜÜÜp<¹yñ‚÷?ü§ï¿ÏõõÕ謿 ævîªí¬ƒ g%§…t·ú›Ö¶}g£ŽhTíŒïìÓþ~ú¬aH€³®K_tVDDDDDDDDä QX/òs î…ëq®sîýîîFÎÆÕÕ̇ïHž2Éýro½6÷j»¬Ô1œÀ1œ´—J[+˲p<®—•¨ ÞQŸ¦l<}²ç£Þãý§ï³»šO½ø½ê¥gÞa”¬¥²Ö•µ,¼“ö,kbYW(¥rl•\ F#Áè½Ïdëõ1Çue­­‡ææ${P‡A£Œjœóâ¸>%¦9³ßÏì÷;`HhÖâ´ŸûMŒ}—Ëí>öU#ðè—7Ú©û¿i¤Ô—÷%bLü÷ýŸÌ±h´Ú(ʼnXûm›™‘¯žÂz‘?‡Sll6Âz'%'e'O‰y7suµçÉ“k`«…é]êÛ¢¬s(}yËNôÅ\Ô­4b­”ca]VÊZ¨¥Rׂ·>E>í'>|÷šï~ð”ï~üOŸ¾Ï4%N…÷—X ÊZXÖ•ãj,–l×Äquî–µp48¥¤„çŒå™”K)ø’úcSþnçîý$ZÝjnúAƒ5··7Ì»Ôïv3ó¼ëAÿ˜ôÖúZµÛ‹Ñ2¢ ë…8íÔ•vïqž÷­Xò>EoY¯ *a$‹ý&tÂ_DDDDDDDDä«¢°^äÏ¥—ª»õ~twÇÜNÕ7WW{vû=¼ Ÿ*ë,žjôÚ Z©Ôee]ʲPké½ò´Zñædw®ç‰ï}ç;|÷ç|øÁ{¼óäIß>w°ûý÷ÔF]Vª‹ÁìÁšàèÆìŒ7gYW–”8¤ÌÒDKNK†§Ì"X–…/^0M™¬ÿýßÿ}þå¿ü—_Êmÿ¿ówø{ïïéYô­ÔÃgO§„§>¥=Ϲ/&{}Å~·£áíþ·Z_ õ±Lج‹Áðe]9.¦gbj IDATG–e¡ÔµØ­µ`µ²Ÿ¼{ů|üßûøc>zúï]_1Me-$s<¥{÷ѨÔ¬Ñ+nˆ†Ù„Û¨õñD¶DòL^ k£Zv;ÖV¹;¹ËÚ©ªæ5{ì2°oãáÀ§Ÿ~JòÄ”'Rʤi&s죵‹}Ób´¾ûÇ€^[c#¨Ýý›)÷ŽúVËX ¹3ψÑᯰ^DDDDDDDD¾zþ¶?À/+¨ÿ²o[¾ŽÎÕ*†án¤äLSî ËΙý~Ïn·cžfRJ§¡öËôs…Π·°y»nëXוu-ÔZÆ}7ˆµà<ÙÏ|üÁS¾÷øà'¼»Û±K‰Ô«0…Ý{›-±Ë™}žØMýmž2SJLž˜sb7e®æ‰ý<±›2»)1%'$ öÓÄÕ<³›úd½{1y¹í};O`ìÁØzí åî¼xñ‚77Gj­½Û?õþûf~±¯ÆþòûŸ¿ò§¶1pµ79Άðd¤ÜÏÈ9©³^DDDDDDDDÞÕàˆ|.#¨7H¶õ‰iʤ”˜§ÌÕ~ÏÕþŠýnfÎ7§ûÝVç‚mà}2|ûšo‡Î"ˆ”RY–•RJ¿k3,´J"˜w™ï~ðßÿîÇüòw>佫=ûœÉ£ &}Ž|«×éÿ £o›aF3§™3%VÁ,ð0hA«½6¦´Úï?À-˜²³›2sN,«]tð_ÞÛËÃî}?ˆÖ(¥p{{ËógÏÈy"O3ó<- Å©GÞb[h¶õðßofcS,¶nü1uß›íÙŠî·­JîLÓDmˆ^i4ϕւu]‰è9§mù}«ÂúóoþÍr;¿÷{¿§gηNêÍ`žç{SõfÆnžyrý„ë«ÖçÜ«g¢ÖËrz¶ 9¶ ý±ðjJ}aÚhÚK=r89–Z'g²LYX«\M‰Þ»æ/üÚ/óßû%¾óÞ{¦ÔKÃr#"Adj-,k@«=¸?pŒýœy²Ÿ9ïXì|ða{¬}Ͻ\³}—#Ÿ~ö))%Þ}ç]È™õاìw»]ï©©¿E:…öÍ s°flÿsœ[•PÃñsoþv¿8ÆÕÕŽ­ ¥pçêjOD£”•ˆ ¡RŠ~DDDDDDDDäK¥Éz‘ŸËyª>¥tZœtš¦SŠ»_^ýá°ùè^?OÔC¯tÙ´ZYוe]h­ž&㉆E#;¼s5óë¿ò]~å»ñôkvÙ¸ÞíH1Šg^Z¼vÔì˜&ÚËZÈžHžð”XÊðÇ«‚•ÒGó§`_gjƒÒQè×Ãð’Av£Ô¸Ÿ¯²Mª7€R¹»»ã“O>Á}â»ßý»Ý·ßÎû³ÙiqY½õnF%>ïw'çLmýìÞkŸÉÓD-•­²GDDDDDDDDä˦°^äçdÖ'áû[b·›™w;¦i ëíTy³-¨Êx×?=WÄŒÄ/&àkk”ueYŽ£âå|]wãêÉßýð}~íû¿Âw?ú€÷ö{¦€išH<˜¨?`@k­/<‹í Âú´Ô1ž‹-,æ)³ÖƾVÚXˆµOºW’ÁäN1aùðþ´,ìé ÅvfADÿJ)•Û»;ì§?e¿ßñÁô©ú”?쑇ýõf|žƒç-2l„õ¥VJ3ˆÀƘyšXÂh­ÑšÂzùò)¬ù¼FÝü6MŸs"çÌÕÕžý~7úëÇB¨Àéç¬þ"t¶‹Åg·ÕeA-¥OÖ/ Nàf˜Ö‚ëÝÌÇï¿Ëo|ÿ—ùÕ_þeÞï {3R^ÉsZžv›Ü?mÈé¾½5>&þÛø_ô“ØÚk‚`j]ËÔhT‚»¥x420¥Äâ «õ^C>÷–—=³Ôo§Dk¬ËÂóúŒO>é‹ôNÓt®îyÚÖ—ùÝöÁç_6N·‘r"UǫӚá9gb"Œãñ¨ÉzùJ(¬ù9FJùTƒ3M‰'WWìæéÔ{ŸX·Öî%È÷ƒz;>‚æÖ Ôʲ®,ËJ-‹ 5¾óáS~ó׿Ïÿúkßãƒw®I­anÌÓDšÒ˜–·—&Ñ/·?jÈF#‘# ~ß×çÞ3ý:©1MÁ®A­p8Þ@mX RÀdF6Ã1êçÙq±k¢ß_ ¨uåÓO?c¿¿bžg®¯¯‰Ãú[Îiš~$õfŸëÞAŦ䴔h­RZÅÝû"·a¬ëJ­UO|ùÒ)¬y•Õ)9»yfÊ’×û=××W\í÷ä± ë)[6'¢jZÜ K~±Òé0†ïÝHN«+Çà Çå<‘1ò”y÷wøõï|—_ýð#>¾~‡wv;&‡9'æ<‘|Ælë ÷1}Þ;×£5Z«DkDƒJfxÊýEÀÞ*)M¤4±”•µVXŽÔXÈLуúi ö󎶬”²âÛÀ=Q[ƒ‹ùz¸XXw|åbØÅ”}-¥÷ó~šÂçb±Øñ>.&ßÝû‚²ÖFµ­%"Ú¸FëûÛ°à8)yJL-A j ÂúÙ»iîÿ ìEDDDDDDDäK¦°^ä5ÎuïNN©Wݸ1åÞUuµ Ëf’ûýðØ Ç­wÍ»;æ6®Ã½zó.G¤ñ>z` ¸“'ÞÝO|ðä O÷×<™fö–Èɘr•1÷Lò>õo½†}ô®7¨F£‚·qtÀ0Éz|T;]?E£FœÑ5ï·ëANœ'R Ü*‰>QŸÌÉ)¨açÇvšžçþb»÷¾8.ŽQºÓµÖ¾)õ?‚v/ìçÁ÷^ìÇp° ]tÚGœï|›èè Èöžz#g§U'Z¥E?ðs&—¬°^DDDDDDDD¾t ëE>‹‘ö°ÞÙígž<¹âúúŠ¥Droݘ³³Ÿ×óŽ«ifö²'OøxK)“<û”kí´=1Œm­98¸õÖ¿pê¨?ëF¹nŽà>ßÍF™ z¯ó¹¼ãõfÐÆÁŠËä~+ßiã Æº®¬ëz/¬·1±¿ìØÖ¸¬Åqú4}ŒÀ¾m¼‡'Kôð߯Ï(¥„§Öï§;äœH9“jQŽˆˆˆˆˆˆˆˆ|©Ö‹¼Â©Â…^3M™yžH9±ßï¹¾~Âõõ5ó<õ™vêjé߿ոŒ)÷GïàÔ 3Bñ—Þ &v»=û«ó®oÃ9$ïaý4eÜ2)ÀÞ¥Tˆ ζà¥w¼GÃXæ£Æzhnf$Ï@íF7ü6½ß'ï{pŸ=(ɃVƒx)öïœs/þf›¬o-hµ²Öu=íÃ>ˆ ¢6B{kЬqhuTØ{¯ÂaÔ5{p&ƒÙÅ¢µàÉÈ‘(¥Qk£Y¯/J)3M•µ$…õ""""""""ò¥RX/ò*Ödu7rNLóÌn¿#™°þšÝ~ONc‚Ýb ÓŸ§ì“nð0­¿ ‹Ç]ú-Oî˜EÇÓÄ4MìçSÎ}º=y?àn½²f›|wO˜÷h‡p¶Irïýõ8xàV¶)u£ÑõÞÆóàŒzž,‘,‘=ûm¸Éð¾bn‹‹Žúñým»­ˆ‡»Û&ëËJaýÆ·ÅoGÍN´Ñe¿­Î½‡¿WÕ÷mhÍNÓõœÖóµÓˆ8Õõíëû¾ÑjЧ‰ûœ3¥Zk§ƒ¼f!_‘o:ý7ˆˆˆÈWOa½Èk˜ó43ÏóiÙ«ë+®¯¯Ù¾úQ@Oedò#ä·S Ë2ÿìûÛ‚á<õéy‹:ºÓ'öû+æyGÎs¯¼I~ñ¾Ÿ{Âløv~ =¼vì´pk_ˆµoëù €™…iíÔTsÚl»x?n#§ÌzžÞ3þJYWÖe¥ÕJÊùÞÁ0#ZЬánD³Ó¾]¹xúzØé>·°~ü5:Ìô}Y=ÆâÀ6~ô·¸ ë_>Þpº]‘oÂkãw4j»ø]¹øÝxì5ë |zß|Üoë B³iŒÓ‹ê·[üb?‡‡`Dðò©O ãD¾u/-c­%s¿7Ä’Ÿj_õ¢c¯xyúÿöyé»¶ wïg}ŽÊÃû÷ÿòml炆~Œ"""ò–QX/òº?)̘çÖ{J´Öxò¤×ßìv»Ñ©^ Û&¿/¿×/3}ùωŠß¿¬wã÷)zO jô˦Ì~×ûñ{@ŸÉ¹÷è§ì£®eäØ#Tm—ùxëü)mßÛß ¿êÇuÜZ?ã ³‹àªU ÁÚ*¥UÂû|Öú>œ¦Þ©ßÖµ²Fé=ââ¶£/vÛ*­TJ)ÔµrŸÜoÑψˆ^{óøì¥-5â4ißûpÎ? Ûªˆ‚Ób¾ÉýâTgHô°¾ž˜çozôP‘¯çëÙ½Çó¿E»¸l¬\œ)ôç d^ÿ[P¿…4ãçx= Aó±=ñÿnùÅÞ}U(5ÎÖúƒ©€‹úµ¾ˆùéuÒ\¿ ßJçµt~ŽßäG~öóW‘ê×âßü<ÆpÂøoÃþzÜz…àé:~Zgé4÷Û?ÿKô˯yýßÛ¦}­¢­¿F5ö>Ö!Šû·ôÿ¡ç¶ˆˆˆ|±Ö‹¼îÏ‹Ã&?Õáìv3Ó”pgLÆçüÔ^út ¯l,>ëÖïÇÌ1w¢ø¨»Éç.ûä>joÒ8(.þzì‰všžz݈ÿi²ÉÜ 3ÚÐZ/Ë9m»''ÌT'ö­Ñ܃у÷èÛ>åŒy¢´ ÕF¹7¦ÿþûY½èô§¥õ?#ë#=^÷ÇRŸÛ‚.üOå?~qî¯ÏNkíT£cãÀD«­OõGÓ/‡|ã\þŽÜ«áòt NbÔWÙ)œùbóm"²Ÿ½rªµÚk³Œ±ÆDYÖ"hâû ã©ÿû£,Çx¥~öV)Z—Cä[ø_º½þ°UÌ÷>ü±.7}#˘õ °ôÅ¿»÷ÿæªõØç Ì1?Ÿéãã¿[S(."""ß ëE^óÌÒ&wæiâújÏÕÕžižÇmLÿÜŸë_[€n—ßäNÉûD·'ë'Óaqî¦O)á9÷Åes>_6ÞN7þê?ÇÎoqžœe|¾UÀxrR(н4D×Ãs'yŒ~{˜Zfï%#'''gYWjk}QÞÔ_jÖRhVg”×_œm=RÏÓÄ4O¤)Ñhc²ÖØfkã矊‹É-ß‚{3Úƒ5.nî=°O©ÿñè£f(ZPRÁ«Óê› ë/Ÿg¯ RïÎÁƒ'åŤÜëïÈÛ(.^§âò9uªDyx¶ˆ}aÏÕ­ZáþI1vÆDg«e,Øíçßãh|ójZ.÷÷ù ¥Ÿ5küðëçßô—/ùÙÚK·ÜZ´ÓG jÕÈoìï5?{fýþsÊ^ûo×ßÊëî÷|ë_Æ>ùrž3îFö‰­T&ÖuÅÓ„yŒ%Z?ûÆúCXOÔ®ÿ{ì¿`¸8êoK󱣞ÇlT*ö3/_ϯqz¾‰ˆˆÈÛEa½ÈöGÄå¤éèyïžý´Ü!ëA_|·eðþGßÊ'¹Q[ãj¿Ç¶à› äÄq­=8°§Q)'òÔ»øïa8¯ÚÉ”ÈG\ìç‹á¥ëÞ?Ðâ>~&ÍñÚî-þ[SÅš½‘úïn÷ˉ.?;Ÿ·p–žOaÕ|‹Œƒ]ï½ÿ”÷ÞïâX4Üàxwàæö†ÛÛ[j­lµ4¿PdqÿEÀÓ4³¿ÚsuuÅn·;}Ï4M´õÈñpËáî–››k©ãu6¾™}êöàw7ο™çÝ2B©Ë*.^^q›ŸïÕ"ü»Áúþßï˜R_¯¤µ ¬•eY¨µžÒVý7ä v:мª".^þ÷e¼tà,~ÆÙ^óGîÐÆSûâ?>к._»§9xæúɦ<e9’“±ÜÝÞQZëC!fÔ¨>W>÷¿/.æ ¶g¥Ì<︺ºfš'j)¬Ë‘².´Z¨µ×-zì™øVW¥‰ˆˆÈ·‘Âz‘`žN»MÞk3Ü)O\]íÉÓyÁÓxEà{91jÓ Û"¨Ûé½Ûb¯)9yÔÜä©wÖO9÷ZOà Ëéà÷d ¼Oÿ›÷໲穹ËÅU/ ì"¬î/ÐÌ>ÞðÒ¿o|˜cÒ}›u3²f=`ß‚ú<Âúëë+0£ÔŠëZI¾öƒ§Vüó>ôœ˜æùtöB؃=k÷¿ãœçß{€çÇ¿Ýò¶€ý1ÄÀb[`‘~À¡Wá8ÕÇbÁn§…|kmãÖ¯ò™9Þß F¶†o??ÛNÒý@’ô¾Ù8Í<†©Cø[òj8AÂsâ7þâïðüåÿ“œ 'ð¨d*³ÃŸüÏÿÉÿð‡üðÈóÛ;Z}d ÿÁïÞëî9ìÁ ¥FÂÓÌ»ïÄ÷~õûüÆoþ/|øá‡ää¸Á»ûëís~ü'Âþ¿ÿÆÿûÿ•ç7·×2^¯ü4aùÍ Çœð„yêgQÐp*Öµ–^Á/­òóß×9$S@ê¼óîû|ï{ßãéûï’=XŽw<ÿì3þôOÿŒ››[þöÞìI’ãºÓý|‰ˆÜ3+kï}@‚à"pƒ(q3q4²™¾ŒÝk4ÚÕ›h¦7Qfú#d|ù*õ(¾Í\d²««¹„$JŠ$ béÐ{uW×–k,î~Ü#2³º ‚ ™ÇØ(vuUfd„‡{øïœóýÒ4õ B-o¢Ü==ÿ”üg\0i–þYÅ›²['ç …«5õX²Ü±ˆˆ›%¹ßûäQiëqVÆVE ¸ùµÆÍï£ï³Œ_È„„CbdÌêÖú½.I¤H§C„ÉØÝÙa'›PƒR 1ssâûÉ(Â7{B¡kMzkëœ>}šV=¡HÇŒŽ8Üßãð`ŸÉ4%/¬O,,cËXÆ2–±ŒeüÄR¬_Æ2NؼDQDE§<¯¾2›•ž±,JÃÒy¦Ì±zg‡[ð$ÕZ{Ñ7ò¯§”¯b—ÒobÛÆ`òSä ö÷)ŠcŒ¯è×1B(œc Ú)l¨\s|—²¨xÓ±Ò8k)²œÜN1Ï…‚Üú²¦8©Ñl4˜¤)L¦d…Á)…³ ¡BiÆ' ”D:E¬´ÇÜd¹)0Öxè$qD¤I¬=G'X‘uHƒá¸"àÏ›‚ !J‚„V§Åêú­NSUyúS­µö‰„ã"Æ‚æ>ë­µ©ásnÀ ‡Åa¥CZJ³Y…Å9‰1YzÈ¿ýó?q°{Ÿ S˜¹¤ß±K*ÞÍxèÖ ÛWžæsŸûMº‰BÛ)÷oóúË/òüóÿÈ8OB¿eÿÇ2–±Œe,cËXƯJ,Åú¹¸ví—/_^žŒ_÷íK0ZUZ!¤ Òš$©QKêa\V‰IÊjÏã$p_uþè¶BJ¿ÁU«i] øÞ`ËP«×H☱RXç(Š‚"à ¬§ £Êjwð›v¥}ÅxÐ`]ø=[\ÞÊ=•”žwo‚-”BE*/JU5pÆ:ò¢ 7™)È‹‚¢(ÀA¾_ƒ³vV­-<_D:ˆ}2¼±¥Ùky~üûX_ŒÒŠf³N³Õ¤VKáóe—€”­Bâå¤M£Å‚•Õ6¯4¯-E|‡Ÿ`ÁI8.`óÝBWïç¶ÑÍõ„1¥"Ÿð) K”´h¶º4[-–H L6foï“Ñg,3ê¿ô¹¥Ò`¹õýÕb„ô:!nviõ×è®whJI”§¨lD ;½ízL$E˜Õà]§ræKr]97j5¢z—Îê&ݵ.u%‰ C”(Wìvt‘²éÂ|[Vç‹_¢ÊzWuñTÈ!‘qµ­S\¹t ÛkÄ.Ge#ŽvïóÒO_$Í ¦Yuåﺹ*ùw;"$RFDQF³M« ÓØ2øóC­VCëR¬Ï±ÖT8ß%çÿXVÀ¹z¥2 ¥Hæ<-Ü|'› â¾gȳ ÷îÝá‡ÿþC†£ó¥ünÎc9¤~ѳÒü|äçe!t½CÒìÒhÅDF¡Š‰–(, @Ĺg2(}HÞÍ…X#“Ik…z±Ñ:õ$B•È6AõÎù9Ñb—éže,cËXÆ2–ñ+K±‡|÷»ßå{ßû_ýêWùÚ×¾F«ÕZžœ_·MÌúÕ Â)%QS¯×i4h­qÎ /g©°ñ ;éRŒ>.°¨À§÷õ²J DZcŒ!Ib:µzi\–‘9Ó,%/ü¦á·/yQ€5` á…|cq…ë0YÖ¢¥B)1CÞàsmžQ…íñÆ«ÆYrS9“tÊh2f’¥¤YN–å乯øÌ C1Ç“öHxÿ2óëô…ÊÜV†¢-OôÝ íN›V«I”Ä ®xU[¨šWŸºðêo²Y´XOv?¢¤Äc3éü¹ój!ì Y$¶%¿¦QŠõˆãˆz£F£Q÷Õà.Åâ«»˜±^ÅóUÔÈ,”VsƵ3Ñ^H/Ž%µçšLG-â˜,ËÈŠœ4’Æof EšSXƒA`¥¤°Ö‹ï™Á•¢•¢YoÐnÔ‰µçÊ;:Ò¤A¬·ÆRãEú<ó"ýtÊÑhÈÞÑ!Ó,%KƒX_8çôÆšYµ»R(­‘R e„ Â÷Bò"œ1g[K )Б¢ÓiÓl6‰"]U¼—%øò˜(¯TÉT6³/å·NØÁYg«„Œ‡E:³ÎWÐK/*–H"’BÈ ƒ#ç„{g~Þb})ÔÛ2¤1`¬@D5Î\¼Êg¿ðE>ùì'XmÕÅ”×_yl¼ÏáÃ]²©Gx¡_;î3™€Éî2M(ò¬:¶ G¼·çàÝŒý·ðQ}7W÷ƒ-#ŸÔ6fƒ¿¬?zã [)²8 BzƸ”bÁÖâ‡VéIão¾“P`qÖú„H ™¢ (Ì£ÆôH¬@NQX‹pn)Í@Öˆwœló|)˜‹÷ý>wouŒnÎ{áÝöËçŽe,cËXÆ2–ñŒ_[±~8ò­o}‹çŸþÄßÙÙáOþäOxî¹çøæ7¿¹¬²ÿ5 )%Q¤t¤ÐÚ‹Ñ8ã÷ÈA\Çx±;¾¥š¡‚G­T"}ø`ŒA Ÿ 5hwÚD‘&užšçž]`#›NF¤yFî,Ó¢ + ò<'O Lž£œ žÔè÷z×£Õhë!%R© ú,Y‘3MS&S_M?9qptÈ4ËÈBe}Vä8+¼ äœ7áUþ¸u¤QJƒöf¬¾âïÑiFï˜^£ˆf³Ak8Öšÿ8ùBJf² Ahâ±À3ìý¿xÃY¼±Ö"fÃWÊ ÎË SÉ:A IDATÞf}ìßß°,BIÿº³ke± $„ ótùL')3~íðfìÖX¤’Ì[o'ªã ãÌZ®‹xË{g6¿Ë7›æÿ­\“ª)Nƒò™„—ãX¨V­\‹EyùuT åŸ+… ×ÿÑñï`v/Î÷àóV7a5ýª\й¹CVŒpÕI§†nwÕU‡5dA:°÷à.¯¾ôãIJQ8° áT¸¿ç>ÃÜ-rÀ2û ±07Š79‡‹"u0Jxûç`~~o²æTËÂ\wŠP³DÒÂÚ"ïÇS&ƒœ{›‚®›KXÍæBYÍQ‹Bòñ„ÅBR‘E7ó_ý=üޱÙBÌÌÍäø\jÃ:zBbáØíJH–øçDžæDôp¯–¯P‰o2žÊN­rÌw>*ÖÏØû‹ÉÛ¥H¿Œe,cËXÆ2–bý/$þðÿpáï|ó›ß|„Kßjµøã?þc¾ò•¯ð­o}‹û÷ïð£ýè‘×XƯvá+í#­}U²˜¯õóÂAÅõuuL («³¤òÚJk¢8ªªÞd…kñ?kC•¨Ä>/êXáÖF£ÙxÄxp䋤BEº´†(©!¤öÊÖs‡-ŽÂZ†ãQHH:6*‰‘¶ °–ãÁ`4âàhÀ8K‰â˜Z£I{¥ç<Î óy^`sKžç¤YJ–eDqìYËåç­„71«~ âËlSéÿ㫚µz^¯çÛ÷£È£ œÀZ†Jk‰µ6ðæ©6deÂCJ…SeFX+Ã5ðçS ›«ª* °ÖÁìÌW±ª¤V¡â^Ä5a'^á•ø½ÈïÖ bj­/]åÌ™3t;-pŽÂåhgpÎgSdPøŒ³X“¢¬®’K^‘[Üô«PAhŒõUæåØ46`ªÚœK¥ý5°n±j¶ªÎv ¢ýqÁ{7xqÁ&Tð‚)+¼­7U:ñ•á…|ubOŒA}L,.ý$|‚¡(r_ͬô1!1_ÕîQNQà†/´Åbòb6–ƒ0'¥:A¬ô?£µÆ/rJ…êùGÏ…+u¨*·d&%KÓ9AIR"t6¸*2«Ôï”@HW&sü]&)]!Âç.%¶ Ï TTd¥êK­fÆÓA|—J â˜<kþ” Ê¤IHNøŠû¹÷1I²yä•8öýEÁ¬ì†Ò'Š8Ñô9ÆéùÙnýGx 󆻿]ŸãZô›¿ï¼K·õÖ®*ÇZÖ‹¥ã*áêÊ.–ð~Vhœ…¢°&ØOÏ’²KÀw|Ø*©Z‰ò!Ó#‚ 9ÕœqRµ8'Ÿëp[k±EƬÄIY™ÛG_M ¤ÔU~™ü-Rà''ªŠþ·ºÌÞ_ÀÍy¶H–±¾r»<¶ª«ÀºEAú] ¦Jž¬DÍòµ‹"e?ëHq PQ½œÃ8M”d WǤY³¾ë@8‹-¦dÓƒÃ]ŽSŠp*lT˜{ʵÝwÑQ&ô7„„¾5³k"dX‹g>bî{¾;Á†Ÿ“9Cb!aY&ççáùûÚÍ%A…+×SNâðºRi¬‘8[àœA(@tί5å<î;ˆÊ¤ñÉ“E•Œ²&t´Í:¢„ <+ÙGDúùD¡ÿ*qfÜ#âóãÖV¿î¹“ü¬s—˜Í%b1¥åÅ|凜ñÕí³ç²ÅŸ·ÎâL®£¿„yÁw˜†ä™”URÓÛ• _q'=«K„:©S°Ä–:s]l ÓYÆ2–±Œe,cK±þƒ_ûÚ×øú׿þ¦?ó±}Œ?ÿó?ç/þâ/øîw¿»-¿f"}ù5Žcâ$üײ5:l’˪.¶n¾ÊÞReµ‘¨*ö£8ž«¨A|4Æ, ¥˜©dÐ: “ q¬)j1qapèuŠn»I¢!V›ydEEtÛ-âH¢”=mUy.ç°!'‡í5ÎͪmeUqcg&R(PªjI_DÄ<ž¯î¬#/… ¢š<óšó%´G7„ÊYklð^Ð~Î BÇ1B$„˜Ý«AºxÁÒú”ÖúÄ“"¡TPJ^4·ØÊCºÒV‚¨œgi¶E%ÔöM‘1IydL©¯I‡¤Äu€19‚0ÌaoÞ«ñw<ý$„@̹zšOèœ/w—R‡DНÚAX±„ûÍZÊw´àÙÙNFH©ü}ªRT>‘&ñ],2Ì{ÞÓC"•@ZéÑ8%BÎ𔞅¹\¡Òñíá%ª1R!÷¦÷ÌcÅrñVgûç:yœ ¼Yÿ¥(À¤(W2·Ç^ø{B¸RöפLdÆI,›†uÀEªZJ±±LªV¦ÁÁX·¼EÇÏïãC†1äœCE‘C­Çhy“Á 'vJzSõÂ_…/RHœ.ÅuSUîVXH[£gÝ^‹F5A̵¥GHøZ ‘ÌhfïMœ`B,7ŸÉ1E5þ3K!ˆ”"Ò­æ:‚ʤÀ1“hyµ«ªÀ…DªÈcܬÅy5O”É8k²p?–8:MÏwäpþ«Ì`xN0!)P=»•IM¿^—É-0HNˆê¹À¦Qq  0†u-‰¥ é½•>ýÙç:âÁ`L&"P1nÞáú«×¸yë6Scƒ”T #‚¢°•1°Šb””´Û-Ö××éö:´;]ÍQ¤6ÆcfYNQ°³³ÃÑÁ!ÃÁ!Y–⼕avdu"ýýQV jt\£·ÒçÉ'ždccF-%$‡‡Ü¼u“×߸ÅÑ`€Ò++}¶··YßX¥Ýn •"^}åŽFœ½ôÝ^8ŠX„³á~µŒGC~ò“sûÎm†Ã1Æ:ŠÂ!œÿøOÿÈÁá€4Íg×ÒÀLP+[.½•««}úý>v›F-!Ž|×Ba,Ó,c2ž°¿Èþþ‡{ìïÞ'Ëó9´Žxç"°;–d¨LŒ¢¬‚-‘VÒ ]6OA(¢z^·Ë©í-úý:Ý6õF' Ï3¦Ó ƒÁ€<ØÙcì1J®Wà¬ï`°ªôuUE¾ÇmÙÙß+¿9³IöŒ /À"év;¬®®°ÒïÑnµè÷û$QTfhBr¤`:M9:°»ûÃÃCG‡ ‡G¾Ë¦JÈùžqLø™U´»·¹’ð˜ªú÷s5›;v—þêÝf›F¤QÎ0ŽÂ}0"Í‹* êDqÂÊÊ*+ý>ÍFÃw›sïÞ]ì>`8Q‰Žk$IL«Ù¤Û^¡Ñl cò"£È2Š<#Ï2öövÇe¶ÔœØBÅ ››¬¬¬P«%HÓñ½Ýܽs7ÌÙTÉãQuy8ARoÑíõèv;tÚm–éxÈÑÑ!GGG 'ÆÂ#«q9.üߢX³Ö_%I’Zn *Š|¢./Ȳ SäL'cÈÓ”,bŠ|–쟓óßyg±jz¶LŠã™·JVŸO8cBÆ(y¬™ó¾Æf˜"ÃþÅ9$%®LÌŽ×ͣnj¿·E‰M‘HÇ5bSKÚ­Få ÇIHäŒ)Èóœ,Ë(Œáh0ààð€,K«q!Ê÷-¯q5¬C÷BÓëuY]]¥Ûñ×u2st4ààðˆÁhHÅ4[-:Ý.n›$ŽÁZÒ‘G6ÚmZÝZiÀ#䇇¼öê5Œ5X‚À¹Ÿ¿¯„››?g•ò‰Ô1+Ýýþ ÝN­%ÎF£!‡‡·óëý.±tgn¼ñ:ÏÿÓØL(dL§ÛãCzŠ>ó W®\`m¥C,-uiùÿýÿæå×ïðñßú"WŸ¼J¯Ý"²å²‚½Ý{$2e:Üc2`Xãf^ XÜ‚æ+ê[Ý5.}èãü§ÿú_9wjv-F9‹°é “ñ€—_ù~úâ¤ød„’Ú 8Rךôú}Ξ?ǹ g8sj“³§O±±ºB§Õ¤žx$IVŒ'ŽŽ†Ü½»Ã­[·¸}ë ®¿ü÷ïßc0QëÔŽS“$[1§å•ô’?Ÿf¬mË gàÇ–Bè˜f§ÇÖ©3\<Ž~äCœ=³ÍÚºO6  Ës†ã÷wvxõ•Wxù¥k\¿v“½Ý JZœ)ÀZ¬ñ6 ¶ä¢[SUM[kg®¬€ö"˜„BG5õ&«+«œ?w–sÏrúÌ6«k«œÙÞ¦Y¯yy2 ´Š:bï!ƒ£C&“±OX–‰„P‰î‡—})Å‘(8 ½-f]1eÒéEL#U4‡‘qÞ¼·08c+-z¶ ëí\tY­´~ ©c¢F“~¯O§Õf¥Ûcs}8Ž©ÕjÔj qc âé„ñxLš¦ìîíqoç‡û{ŒGiŒ•§ÇB_‚È(fem“«O>Á¹Ó§ÐÂòp÷oܸA^¤EF¯·ÊæÖ6Û§¶YßèÓnÔÁ vwyù•k4ûëlœ=G§»B¤ÀæSvnßbÿÁ‡GG¤™7 w!麘]±åƒDH(z»Òuú[g¸|égOo‘D›§Ü¾}‹kׯ³··ç\ܬr](I¤5õ¤F}µµ5ºÝ.­v›þJŸ(Š2ƯP¦°¤iÎ`0bÿ!{î?äáËt2¢( ß%(ÕìãÊ,í›rW?ëæ’¸3µÞ¡ª®?¥fƒ~¿ÏöÖ6««+t{êõBŒ+°8ò"gpxÀáþ>»î³û`—‡‡cï§#r/õÕü_f‰×«Z $BúäO³Q§ÛiÑíuY[[§ÛíÑjµiÔ ôB’u:31±··Çþþ‡úÕ\'„[VÛ/cËXÆ2–±Œ¥Xÿó‰‹/rùòåÙw_ùÊW*Úk×®-GÐ/yT-ËáÿI!Hb_MiM³Ñ Õl¢ë=Ö1`æLSÃÆTØ9RªüI-!Ž“À`Ÿ™ã=ÖRHÏô mºÍzƒN«Îsbõ8¢Õ¬S«Eh- Ž0Æ „$ª7‘¯’¡·J-ЉuŒŠXÇÔㄚ҈Ì`Ó3b²Ìo„mÀšcUáZiµ®pH5°ÒîBÛ·s§iJ:M+#H߆®¼¾,C‹ñÜžPq¤±…ÆXG¤"ºFšå0šb†‰ŽÈ8SP¹çι¡Õ=ŽèwÚ9OAà¤@FŠ¢p¦âè‚-¯‘ó'Êaœ?÷"OšPåKÉ’­¸ø’(Š“ŒùJäŸkPDt;«|êSÏñäÕ‹t:Í™¹®uÈ «ÞlWµ{´VÏ\@&5¤Öé˜xzÀÿþÇ&¶˜ Tì½°3`ÜCÕ{ô7¶ù—¿È§Ÿ}–+—/°ÖïÒjÕi·›Ôk5t$‹q9¹ÉȲ”<͘ F d“!ÿûÿÀÿ÷÷Ç¿üàŸ9N¥+QQ \lc-¸ˆ(nÑên±~î >öÜg8»µFl Êf`&t» 7îÜÂEó4ùè'ø½ÿò{<óô‡9½Ý§ƒÊ´Å”WônÜÙÁ$M.=ó4—NŸ¢a vàDŽûnrt÷§\{ñ'Ü»³C†UÆ©3õÄ ÆX5z›ç¸òÌgyösÿ™KÛ ú M„…¬@šœ[7^áÎë/=Àdã ^ijQc%Q£Ãæ¹+|éw—gŸý8/œ¦ÓŠè·›´k1µH)Ÿ$³Î’fÃá˜4Ë9Øßçþ›¼øïÏó÷ÿÏß𣟼ÀƒƒÖ)ò!À€¨-È}e²ÊКY7JÙó0oè'½ébf3jª† k¦°Pïrå™Oñ¥/}‰Ï|úY.žÛbµÛ¤Qˆcí±$Î 3ûGûì?|Èk¯½Î¿þàGüÝßþ/òB"LŠtÖûõÚ0y:ƒpvfä{Œâʪ|áEF”¦³ºÎ‡žzš¯|éË|äCO±¶½N«×¢Ù¬ÓmÖI”B I-IHÓ”<÷ yžsppÀþÞ.wn¾ÆÿåñÏ?ø'^xéUîí AÄCäJr»¬˜!PÞŽšZ šÌXI3¼CÙ‘õóKü  o‹@G-Zíu¶6ÎqùÒtk39"‘p³Ûãhï€ñpìqBøûAÖ!n±uæçϬӊ¡f&ܹñ µDÓìvYÝ:Ëå'>Ì©Í3¬vWhÇ ­V+Œ°¨HùÄÞdÂppÄÙ³g¸ï7o¼Á+¯¼Äp8ô÷×1'F5höO±yö2›+M1ñl IDAT™3=l“öø7 ¨#¤·‡-;0ÜÜ:8èNFd"¡µzŠSç¯rõâ)b™ñ`G1?àõ9¢ºNsnJVˆ®õÓ§¸té2W/]¢ßjS‹’$AÇ1H…Ž#ßYR˜àûàŠœt0b2òÆë×¹~íe^zé?ÐBîÙ ž3oÌ~ò3Ëqª{d¼ô»röU>DV|xƦ-$Z(”Ôh¡Tµ"àjl¨®/‡´ŸÇ¥P 9àt‚ª·h­®sõêÎoo³Ñ_£Óé!•DkEy‘5/2_UŸ¦äEŠ) ÓtÊÑ`ÀÍ7^ç¥ý;;·ïú÷ÇûŠ<$yNHŒPÔš6¶Îpéê´"عw›ñxÄÍ;wXY]çÊOqõɧ8sf›zMÑЦê’{·o “˜fo•­ i(&¥U¸û5^~ùUòlÀÌâ;$?„¥ô˜án$B%8ÕÝ »~†í‹OrîÜ6ÚŒP LJ¶À[c’•IRcmcó.påÊVWר5j¡3Óϯ*Šü:Z¬ñ3Ef°ÿp‡×¯7xíõW98ØÇŽHûuwÆÞwoúüâfrýl¾*WvhhdT£ÕïsîÌ)®\¼È¥‹¨×õ˜¸¦Q‘b2S¸c òtJ:q°·Ç7nðü¿þ™D½ggÞ#³*Ï’Å#ÃÀ ]±n±±¾Å™³Ûœ?¿ÍJ¿ÃÊÊ*Íf‹(J|‚|Á_Á‘¦¦Ó1i–Rä)»pëæM^üÉ bŠ¢Ê”IÄe,cËXÆ2–±Œ¥XÿÇŸýÙŸ½ç¯YÐ.ãWS¼¯,Ce^E•‚ÊÈNø-V¨²÷hœr,‚Á¥V­Z«`¤*ÿÞóüó°ÒJÒ¬Õˆ[-XêQLÅÔk5”()Hâ™±¨z Å4“²°LFc„uDZÓ¨Õé´[´ujqD$ ›L™ Fd“-½ ¥„ôöpÖa¬ÅƒË Óá)Â8z­6Y–“!Á¯0Ïó óSah„7 ÃRU¨ á‘<2ñœX¥u­ÑT£­EÙ€™;/U5».ÿö±fr ÆfïàÊKæÍg=¦§ªêZøÉ÷¹I:˜A–FÅ!ŸR¡™Mƒ!Q! ÆÁVŒ>AQ˜€eÈÎ q˜,ɨª°Dר8}‰§>ü Ï=÷[<÷©OröÔý^“F]!ð qyŽx–¥©'q½Æd4¦Ñhrjk‹l<¤×޹xá4yæ)þúüw^½¾ÃáØ`òŒÂ¨9Y.p‡Q¡È„¦‚áÚ!¥£–hºë›\¸ü4Ÿyî7ùô§>Åj¿I½!mNJ†3û{ûüë_à³_úMÎÏÉVøÚÇ8Ö\8šÍõLÇ®ȹÚzWšá ºÆêæiÎ\ºDo½NÆY”µÄÊ'éööwyõå—ÉÓܳۥ‘ZÅÆöY>üÌ'øòïþýÄ3ln¯Òn&4bAM "‹DPB%Ô[  Ûn³µÞãìV‹íÍÛÛ›üÝߟ»;‡d•sžú™æ¾y?C°’ˆÜ‚3¹ezë<÷ù/ó¹Ï‘g?ù .œÛ¦‘ê‘$‰KÄ•gÜëHÓ_Y¥Û]aeuƒ~“^«Ï+¯¾N¯Ûö]L‡¯¤@ Ï«/1Vžkïÿ]"@E8å+[u\ãÜ•ó¹Ï}‘Ï<û)~ãé§Yí÷¨·b¢º&ŽÒZ”óIPc-…µˆHS¯'¸iN7Jhõzln­³½ÝgûÌ6ÿüÏüã¿ü{÷öÈ'á´7AÄ3||/Vñœbß‹bgøãŽéJsa+ð¾Q”7:/«yCIE³Ñ¤¶²Æ³Ÿ}ŽõÍ3´Z]êQBL`ÅsH HÓhj’$¡ÙhÐëØhtÈ7n1OOH5H C„!Â4‘—n ‹ *àDóÉyL”FDX”O`ˆ`À* 2‹|Å{½ÓáÜ¥Ë`:xÖ~Àò ¥‰¢„‹W.óä“W¹páíV›8ŽÑ‘& ÝV¦0Þ3Æ%3>R¯7©Õë´;mÚí:µšC(Ëí[7xø`¿œÙߛĠTŒª·h÷Vxò‰'¸táüéßä _ø<Ÿÿüslmö©% %-ZX´3Hg‚^'±R`…ÂH ­q,¨Çˆ"oÔ˜NS¾ÿOÿƦ¹ðmÿïhXŠªyA”ãf¬u8©é¬¬såéßà·¿ø%>ý©Oráüi:­AŽp9…)<â«ìÐQ ©b"©QQ(ªSWuÖ76(¤ò•¤î1BóFÀeÞJâD‚®7YÝ:ÅoÿÎæK¿ýyž¾z•íÞ µXÅ µrß)ÓÆJ7ÛB(Œ’È(AÑ iµh´4ÛmêÍ&¦(ø·û ÷ï H'UÙ„º÷îvwï—Ѭ{ä=ݱIòøwf ž bøP Q­ÍÖæi:ëkœ?µ…ÔŠñ`»‡L‡ßXá¨7›¬¯­Òïu©%1I½N¯ßǘœñèˆñp̳Çdš[½ïMTß™«x¬²X~®ÙëÍÎMÀª{LŒõŸ;©7Yß:ÅSO„sg¶Xi·It„Ë-ûìïs4’å¹µ 2Žˆ“„(Ši5;lô7ˆ£˜ÞªOÕjš"O1&'?Ø÷ÒB=z½ÞsÁ~î#ºGÇ ˜{{Á<þfþ¨Â9“¡lÁ8ÅÔÛ]Ξ»Ì…+W¹x齚 +0£á„ƒýCGÆãIÕI¡•¦Vk°²²B¯ß§ÙnÒn4Iâ˜f¤Ð@šæ¼vk‡Q ¹[ìذYyQ „¤Õl±µ¹A§Ûcs­G=L†L³1‡KÇ §9{“ÑáqfiÖ"œôÌøÓ§OÓj¾€R‚¹j”- bÊ©|^ ¶Î†±Nb‘4›DqL ¨×jDJ¢•D©ˆDEÔk‚Â:&Æ"¤"VŠXÆq‚Ér„u()iÖjQ„’`ò‚< †nYŽÉsoüª¦ðÜU[l^`ò«r/Â9‡´-B{ñ4Ž"2­ƒñXc‚ж„¢¬„ôÕ±ZkÁL,÷x)5RÉu…ò:”x”ÂÉY‚˜3t3ÖÜe4™;°B"lÁ›wØ 1NǦP]§Ùßæ©š/ýÎWøô'>ƹí Z1Ä”+pY X¦YÊÑhÌÁ`ÈÔ:"ªÕHZ-Z&*RÖáD„jÖèÔ›\m6Ù\iAa˜LsŽ~ò&›U¤.&]f]-‡Ù•~ŠN«ÃÇžy†'Ÿz‚³ÛkԥǦ8ø¹QL‘*rãIÊÎÁ®ýô6O_¾ÌúÅUŠ*QãÍÿzý5Ξ?ÏÆúkܹ?ò"ïõ ÄødDŒŒÚô7ϲ}ú4ëë+(‰ï¾À!DLÙ{x›×^»Æµ×o“–'êȸÃé'>³_ø"ŸþíÏrîüu /ôÛ"c48äðð€£Áij±*F×›Ô;=ºÝíZL"@¡qƒ­ÓxV€Í'ìíÞg2ÉØ=È|%réš,Ž à‹·X…m˜3ô)ÒŸá+U½Íæ¹Ëüæç¿Èo<û\ºpšn3ñv¯"`LV08<`82Í ŒÓèZ‹F«C»ÕâÒ•«4š-ÓÔ›þ ñ6ùÀewCB³»Í¥§?ɾüŸøÄ3O²ÑiŽˆiRòé£ÁC²Ì3îs+p2B%uâz‹¨Ñ¢Ùiø–Ð4ºëu”„éà€ñÞ!ÙðuL§øŒŸI[¿`±Ç͉p‹ò4ó÷—{;8¯ÒäSctW7½YíÚ ¢Hy°s—Û÷îñúÍÛŽ(Šàÿ!Ý~ŸK/rñÂ67Ö‰#IR¯³ººJ~ö,»;;LÆSÒôû6fÅ /4kws©ñˆèýÖç¿jœ(…àPÛêt9uæçÏ_¤×NH”$›LÙ»ó€Û7orëö-îï>`š¦äÆxŸ‡HQo6i4Ûlnžá‰Ë‚ÕÞ +í„No­û002Ž‘QŒïdpoû˜ß[!_¼í1Uö 黢¤Š©·VØGáOט‚ÉÑGÓŒähÄÁ`D§®)´Oèö×Öèõ:Ô“˜ád†¾b&&Wå}"Q³²Ú§ßïÒ¨Å(r9ƒýíï’NF¾“ÂJ„RÔêmNŸ»ÄésY[ß Š|Âp0àÁƒ\»~{wïrttDšeXç³õI½C¯¿É™s—¸páëk«Ô’q¼Š”6OÙÛÙa:šbŽßãÕOx³nÆ…ÌÍÜSHœÀO÷ûœ?ŽÓ§6i7ë[N¦ ¦c^»~×Þ¸Îûwe ë‘Í$asc‹Sgϳuî<ýÍ-ÎY@Jê1hía]µÎ,˜Ž[@ŠˆZ­ÅêÚ—.]dk{ƒV+ÁÙ ÿ?{oÞ$×užyþÎ9wɵ²²ö*ì ÁU %K–-­¶»mGÌô´#fæÓÌGšˆ‰ðLD‡—vÛÝmÉ¢Dk!’ (Ô¾feåzï=ËüqN.U(p‘DI‘/#¨"2óÞsÏú¼Ïû<í³Û϶ØÞÙã`ÿˆöYÇïGÆæö‚ú\ƒÕµUnܸÎí[×YZhPJË$K’—ï½ÄÉÉ>ÇÇ»…7@ÇÍÀúYÌb³˜Å,f1ëg1‹ß«ÒšQØÉSà‡7L ÛÿÑá&`«.üNFž1.ƒ<ÌÏ–%í´gƒ:ç X•¢T*SNSÖÇ a,BŠP¾<ظ A-©—Jôã˜|˜a´ëH“ˆ$ŽÎ2Èž-뼤LžåHŠBر~ª-4&+0B!ãØKÛ8šZOéöŒö8¡:Ðá¥t‚滼4÷ ñ¼(ˆóœ(ÈR7eÞ žÁ>RÒ³v=Kjòy0’Æ‘ÏIUŒžp/fÄ:¦üâ„øt|Gü¶m”¢Ý>ãƒ_¾K§uDZªrëî=¾õïòÝ?ú·ÖD YŽRg4{;ÛüÓ?üïÝ¿Ïa«Í°0H {zÀîÖŽoSÎâÚ+/¿Ê_ü/Í·¿óMn­/Q¡p$±Àƒ~›,òôÙï}ð€_¼ÿ!'í2©°rí:¯}õ-¾öÕ¯rc}‘r-A›ˆ"à]iežë·^æÏÿÃ_rÞ-x¼}ÌÉiŸÂ,\ÅsmíÆÀ½gÃZëH¢”Õ¥eV*l\ß`¡QB1D‰í$ÚZ´6$BR‰ÆaŠœ?ü€Ýo¼Ä«/-z¨ÁIŸ8aqe—^~…Õ•qï>"š’‘±BLò#„*±²q“åÕUõ åèÅŽä¦Í€½Ý'ln?á¤}Ž±×º%J•ßù“ïóÖ·ÞâúÍ5b刜!) ºÈøøÉC~ðƒòãw~Æ“íC´LX¹~‡¯þÁwøþ÷¿Ï+·6Xž««­ ’´Â7ˆÝ·xÿ½wÙÝkqÖ>d˜åHåxØÁbœtºX!â5ëý ÄÈP2ò’µù%^zõMþüßÿwïlШ—H¥C‹µšH‚AÒtùùÏ~Æ~ô6}ô•ÔXÝx‰7¿öM¾ý‡ßacewîØØ?ôX‚¥d¨`ò/!¥W¾ªÀ‰UY¾ößþã?ãåW^£¹P'!Ö Èú]öžðÑGðOÿým¶¶é 5¹¢„åõÜ{ãk¼ñõoðꛯÐ\h+!¦œÖ¸uãâ»ÌÖ'›ìížqvv„ѿΘ ¿!ù‰/{®ù€½m·îÜEXMQôyôè¿|ÿ>Û»{´zL”`‡N;ˆ"ŽŽŽ9ow8ïôxýW¹~mƒZ)!-¥,.Ì3?W§Z.ÓŽäZsÁ3âÊK ëWX³ÂM™Oc¸î û™pµ3~ü»¶§˜›_`ýÚ æˆÈXÙ€{çmv·whµZô‡¢$!ׇŠcÚçgX§ØÙ>dïŒo¼õuâÛ×X¨§¤i™ÕÕ5NO9==æ¼7@sý[Mîˆ_¬÷aÇë“$.—i4—¹uûe®o\g±Ù¤’Æ»û»|ðþ|ôácÚí.ÃAV”*äyá+¥àää„í]Þ<ÿo¥ß¤Q¯‘ª„…¥¢(âþ÷évZô9FÈ@‘˜ò~&ØÞœÞ3°+• iS©¤ìòÉ'øèáÇ·ÎÆ•}‘Tô5dªNÜ:cggf%¦¬J”œ NR—iÌÒœV¤q¶ÈŽüœòþBŽÙßõF¹F•rI!Ì€bاwÞfÐëbŠg8…Šbjs nÝ}™FsÅHéÀj>zð>÷ïßgssÓ›dkÖzbÊ•Ù?8æøøŒÎù€×_[·×A*——)]ö·ŸÑ9;çì<÷„Œ_£Š“8fqa›·nP©¤(i±EF¯ÓæƒûïñðáÇìîírÞk—Ë $Î9ú(NŽÛ<Ù>d}ï˜ïþÉÿÄÊò2¥RB‡}¶‹ñ¤‚y0^–ÄÔjó¬¬mpýæuJåAž<}ò˜÷yŸÝÝ}zÝY¦ƒ'ÈHLp´»Ïγ-žmïÐôxõå;¬./&‚åå%®ßØ`oo“½½00êg1‹YÌb³˜Å ¬ŸÅ,~§À|`ÁÇÑ”Nº"Š"â("VB8ŒÉÒª©$I!¦$nä„¡-ëÝO­‚ËÔA«-yž¶š³´„4J¨Åó±"UŒÅC,#¢ ¥é,$Rú\ólõ4ŽÆà¤ c’H¡„ÀH’­½îûˆëœC*I¢R¬ð¥5SŒ2DR!”@ áÙtb(¥<e N)œõü-¯=ïh2è 鯱КápˆÎ ¥JíVEt;]æÊedšxCÙ©¢s°Á#`ZKÞQÒÁ9œrãû²Îz¯ VØ1Ë^ˆÉs6T<8dfF™oÐ(D ªFrHélœ¿Ì°Ãí#CÞ=G©„¼€õÛ¯ÐÍ4…qãPð ¥Èìn?ãÃûï²wÜb¨}ï²ù¬?D#ÑZbUÊÂÊ_ùê×ùÖ·Þdq±NyF}d4CÞ?çôh·ß~›þøîø£VÛ˼D)iuŽüð§|û;Ä÷¾÷]¾ó?`nN¡T” ãʬÝz™¯¾õ ¾þ‹ùñNWhçYìÓ0¡³S@½ ìu'©Õêܸ¶‹Rªõ›óxkŸû<àéÎ!gÃb~üãŸqvÖÁè:O?d{gAþ5j%ÿ™Æ Bª”•ÕuÖ×VhÔÊ´»C¯÷AC‚ˆQÊêÆ5®][cq±ÆQNÊjL1 9O?dóÉcý>ÚV±"F¦Uj K¼õµ7Y_nRРܢ {=ž<ú˜þÿÁ~ðCÞÿè§ CÂÞq‡ãnAR©‘HGrë µ *.#eŽŠ"æU^}å.?ï!Ÿì¾¿H)°ÂÅ“q2D`]pàpÂ3h£Ñ2…¤ÂõÛ^zèúõ5*åÄóÅ­C9C"-ÖæìîòÿÍÿÃþõÇáÃ?áÃGùãÃïóõ¯…W_º IA%c^ýu>z¸Ïö~—¼3À¸ “"üñk£Nü%p¾(4„˯ÎT2]¢‘–zg]¶6Ÿòþ»ï²»·G§×C[ƒ³ÚƒçÊ—DY£9kŸ±»@siÉËu$1*Š©–K4æêT+eo2YL9’’­B„•ÕÏ»ÏéÊOk°OVÚ°6xF®(V“Ï™¿‡ '´¯Ö)WëÔóäZSJ#̰ËñÑ>»[›œžœ0ÈhcÑ& ‰_¶¢8§h88Øc{{‘¹rDäæ©¦2x2x}m_9¬žGU1_rŸ,‡âÊgýet7<9â´Bcq…ë·îÐl6I”@g=ZÇûìíl³¿»Ïéi]8¬çz릭s môqÆ'Ë$µ*o¼ö:óµ!$*VÜ»w›~·Å³í¬±H• ×â¦Êíz'Q’KÐÙ€ýÝ>þèCž>{B»Õ"j¬ƒ,ô#cl”3ìvØßÙáεeì\…()SV°¼²B£±Íþa ç,Öi¤”$J‘Y;©çp^‹.N½Æ|s$Qà ƒ.ýÃNNŽévúä¹ÃZ?CWÊ––—Xh.& Æù€ãƒvvv8<Y”Š‘iBsa‘åå%s$ š~ïŒí͇<{ò §G‡è,#N[¬ ×AžåèósØÛãý>àͯ¾ÉJºˆsа½›¢O1>«TL’T¨–kTª%âÈ¡‹g'Gîms|¸O¯}†1aÊÄçðUr@‘ùjƒ‡ÅÌUËÌÕÊD*%Ïs„ð^P¶ŠnW$û„˜ø³˜Å,f1‹YÌbÖÏb¿•™˜ !Ç•Á^úfò¬Á"åM^¥Ä2bsÕˆ„îyAõÑÁË:çµÆÜö²4i’RIª‰"B 9èÅ#½7™sDÒ3Ú±ç ‘ò)¤¤”&DR‚5‘ŠpΆ”»ÐJ0Ä ¬±Xm0…Á*/o#¥ ŠÞŒ{!fĈ …r¤/JY/çÄXúÂXCži´s^ž$M(Š댗u ‡C7-¢û)ÇK¥ädZAˆÇ†öðƒäƒÿÓWLøk3Ör"ùÇåî#íý©:Á´Þú—ÖI«sr]z@LcµÍy?#3í|É o+„ÀiM¿sFëø“£¤pjãDŒu1Iyž·ïño}ƒ{·–©§IH@99Ã~‡gOxïg?åþþøé/ÞckïˆÂ´L°2ÁÉÇ#Z§ç sG¹(í IDAT±Ä›_¹M½¬H•ë3bÊe^¾÷ßûÃoòèþ}òáã$bÊîa,ošß9Æ¥´ÂRS„ƒÃm>|Ä;?ý)ïÞÀæö^†Œ$óeÁñÑ1^«;[Oyöl‡ãVÒz•H‚3k©J˜›_`eu…Õ¥y†ýCÆRêNLU “„ÊÂ"«×¯±°4O9F##Â`MF§ÛⓇ³·»ƒsc5N ÊÕ*ëk¼rç:kóU*‘©m¯ƒ^g››¼÷Þ/yðà#v÷¯ÏN_3Ô‚Ÿ,-qçÚëK TK)åXÍï’$æö›¬,/FŠŒÝ”6u°.øx ÂZ‡q`¬ެõ†‹"ITm°qû%î¾|f³J¬'Å$–Øåîðî;oó·ÿù?óÁƒG´;C„ˆÉJ²·wÌÞÁ):š#©ÍQ®5¨Å Œ `ÌU £»4Î%qZgn~ååkTÒ)lðg8gÙÙÛâ?ÿï¼ó dF¢ôž“pÒâðè„ã³sœˆÎR$©-°ýyçˆóãmŽOÎ(´FJÏŠ—ÂâÄe™­ÏØL3»Å¯ýF§1ùs|'#gщÀÌ |oÅ8yèDÚSž>ù„g϶èôzäÖWšŒž—Ô¬aØpÖnsrÖf‘TÄqD¹”’&1RLi» Ø>ÎÈŽu¤Åør§çŽI哸”^˜ñÅ4˜Q©ß{•رY<Âk'¥rûÁè‚a·Cç¼E1ìƒõ†Ý…±ãê6*— m%³[›OqY‡ý¹iä8o±¿¿C0ðŸë®HŠ| þS~ã.¤gÜ Ò6_pIýG1i¥Æüâ2Í¥ªÕ ‘ÈôÚìî°³µÍñá Ù°×LkGmí³rZk´)ØÝÛE–ê¬oÜ \ŠQ1ÈXqûÖ{[ÙßÛ!Ó~໊kh¹`=,TDœ–@8†Ý6»Û[lm=ãðàLk ¼Vðû%"¯«Ÿ÷»œîÓëvæsT£©b—i6›ÄÑÖ¿gƒÄŸ›°·e""­Í1¿´Äòò"q$€] 9>9¡}Þa˜åëÆÉë,Ã~ŸÝ-ºç-ÒØ¡L—Ãý-vvö8ïtÑÆ]ì¡ä‡ý>­V‹ãÓSλ}æ›M¯…ÇÔªU’$ ¾Böb_yAW»`8<½ó’$)QŸ›cnnŽR)A© —ôÎ8:ÜáähŸa¯ÚKßø½•GáµÖ^š&sØÖ =dãú5æ›óDQª,'Õ`+X%ÖJ¤ˆ‰“qƒ »tÚ§ô;g䃦ÈDHwÑý×ä’¬f8è±·¿Ë‡Æ´ÏŽ)•$½n›“ã=ƒ¡7ïu|ùžD³˜Å,f1‹YÌb3°~³øü§Ð‘ÌÍѬCJAÀÁ=P/%J Z*¬ú³Éô)¶ð4+Æ@s¨ ‚’JHã„$Šƒ1—õ€¬›‹èŒ Ú zk‰”ôR …O¤i>`FkŒÔ%Q2$"F’2ÓgGw’>Ö–3Øqyy!%)†9Ãá"EU8œpLF8_à„PÇŸ%ž3vœGJD”Ö1År.Èæxf¥”`¥EØ)°êyeçñÏâJ ã7ÂLí…$á„À…‘7ÖÃ0mo'œC†¤‰ïwAkÖáH€ µæw_~•¯å æËjœ rÂbMN»ũßç¿üãå퟼Ãþá ÃÂbe„uœã0ùO|H\i0·vƒ¥ Äb Q‚XH´‹()X[ßà;ßüÿøÿ68ïôÝX–å¹Vuö7DD‘×x/†m>z÷'üÃ?ý7þþŸÀñY^Ï DÅ1Òf¡Ê$3 }rÀ³Í-6·YZ¹C% ß`!b*µ:«++ܸ¶ÎÁÞ)¹vØ©öv@Z)±psƒÕ›TkU„s(ipÖ!„¥È‡ìn>cóÉ&­Ó3ëÈIcG­¬èí²¯úœEáÐÃå4'G{Üÿ>ùä ǧ§äE±G(LÁ°}ÆÇÄÁÑÑfhc!TÈ+++,.,PIÓÐAÁÛÄÅzi+g-΀ zûÖzígÔ› l‚n¿OÜUç—X½v›Õõ ’¤îö—÷ØzøÿòÇ÷ïsv>À#” – 9ý^—ýýC~ôöÏX¿ñ*ëk·xõf5˜E‹ç íi jz4¤¥*µJƒrZ!‰J„¹Oyy­ÁpÀy§Ç0ƒ"˜Ké>9¡Ñ½ûOs¿ZF™!ùÙ 2ëÓkÑiÒnís¸ÀæÖyðjÒzh7ºÞ/b<è>(å·Š9qÕTõyQ©B;$φíy¶r·‡±6|öt&ÀŽ4ÌÀŠ,§Óï3, ÚB"AŠàÃ"ÅØèÖ]–°+“meý”î~í©W0ò‹à_Œ*TREX—ƒ³¡ªÎK¿Æjg1n¤n}²lìa£±Ù€ÃÝmÚ[—¡ó.¦ú1'ÀJ1¡zŒ©*~“,Þ«ú¡ûÁúIÕ‘ŠRÊÕ:s MÒr‰H+2†Ý6»{íÒ=ï"]`bñ)ß+èvúììpÖîÒlÔü8W°´Ôd¡Y£\ŠèešQÖÑWEL¯q!#™’e=ÎÎZìíîp6NI !#~^ôNá“õéžÒnµè.ÎS«”cK£Ñdqa‘j¥Ì ?D9éöF‡DáÈ'6B¤j&KËË,./¢dN“뜓ÖÝaFa½”áHl0è±³µI§Û%M’"‘Ó=?ãô´EV8œˆ®x¢n<cfCºƒ½Á$y¤TD±"Iâ|üìªùƒ½¦EнGzÐ?Â3‰6XýùKì­sc1ZcµÄE ©¢pz™0².Ë;1b¤Àu¬+!Aˆ<8ISòÌkü^4L~¥¸ ¥ÿ™H¤Rã÷Àz´l…1|é¼KÚøŠ-<ŸÞ Ø~.< éJîÅ“Å!ž“ìË—s¤“AïÚ1ÒP÷ì0#¢š¹Ô¨WÎzößÈïÈÈ +7¸{ç.wo¬ƒŒPáõa.8::âÑãÇ|ðð{­sú…—·pÖbí¥@Ɉ“ål~ò˜¼ýßû³?gn.¡œJ”Tˆ(%V)¥¹9n¬®ðÚË·9<ëÑÚo{‰$ìDäª'”ÅtÎÁæÇ¼÷οpÿ?áððB¤X©pt¦=@úªŠÀè>[›ÏxÿƒG¼ùµ;$$qD$„3Ô ®_¿Î+/ÝáÃûÑæç0T§ÔÊ\¿³ÁÍ—nÐ\˜#M$•8F˜a4çí3Þ{÷=ŽöOr2mQk»tO7ùåO:üŸ¿|‡$HF9«1:CI‹£ ?èrvÚb˜e>Q&¥°J0ìõ蜟“šR©äe‚·„Šê|ƒZ½F9MˆekݨûÓÁ[^Óð©q™…•uÖnÜbqiy Spq`çì|ò÷ÿíG˜<óƒÃ©‰°§ ²N½C|øˆ7_¹Ãë7_'мœ˜oDÉŸ¸`0ñ? zú>%JDÂ{4t¡š(ÖnÜàöË·Iÿå˜LbŒ `‹EEÂé¯A‹'÷ÊÁãù׿ýŠ^§µO°*Á`y¦œgÖ[§qÖ€Œ™öÕøâ`éà÷ï2ÜôþY ­¡‘n@§ÄÁÑ»û»dU>NdŒdiFs뽦ÐtûC²B£Ã…ç;ZK?OÛ¹ßü²î%ÛÆ9Ý‘ ¿—\†YîË{ÉT*%êÕ .+fC°ÚÙ Ú°.ºLRBcó.C«±6ÃèÁTJصQû9g/®$¿°þlúËÕ_¤/ …HÊDIRuŽj£ŽP£3ì°CÖïpÞj1è°ÆðœÛõ¤õ§.+a œ¶ÎYZjPNSÊRPNc–š çç8mÉõ'¼”ÙhÏ0^C¤O² NNŽ88: — °R"ˆ²ä1NExX;ìúìïl³²¼ÄJsA£9ÏÚÚKKKl>ÙÄÙ"6B œq'QDZ®Ñ\\fiy•Ú\òœ¼7¤}Þf÷ð˜³nFnÀI…±¯2Ô½ö1ýn't‹v²‡ñ ä·\¨ú«ÉŠ‚Á0cå¾RCH¤ŠHâ„r)ñþKBO™ô|±}Ëh«“Ä õ¹:ÕZ¥ Š``rƒ.½^›\ç8_ã0U-eC…ã¨Å òžáèè„•ö€ÅÅ2¸!ÂåcÅçûŠÂhÈÂØS–æçëTJ)‘à¼Þ½$·“Váƒ3œÆˆöËQ£ ë%Ïœ¯¼¥)„d³˜Å,f1‹YÌbÖÏb¿á½n¢S,¬¤BJçñ[y `Ÿî @ rÌà ?;PÎKThcȱ =IŠ"J£ñ©é“š±ç™ÇñR9‰q&×ÁˆõjÈâ9Ê…$ÖŠH{ýú‘ÿHJÁ9;Ýbâ¥+¦´-F÷š(E5MuÏb–iéJfDNWLéÍ_Þ‹ðÅRJP ¥”/Á&èòKor¦”Â8ƒù„jˆç¾œI¸Ãëß;g'À_² Îó`‹…)g$Óò|»9”sÞRÍúŽáF÷ã8WX^¿ÆÊê2•’ 8¿?+4˜œvû”½ý]vöö)F@ý˜óïËï¥+ˆeŒµŽ¬ßçxï€Í­m®¯¦ˆz-`¯ œF)E£9ÇÝ»7¹ÿh ¹ßžR¡p/LÈHéûr?Ëxðà}<øˆ†™ÅDk‚„uÈHátqÈç ;[Oyÿƒè þ‚J4’Ò–Ä2!­Ì±´¼ÂõuÊq„Ã10âmv½QáÍÛ7XZœ§RNˆ„S m†Ézœòî/?`ïð”AîMí„l-zôϽ““ RJ‹\µ…¿Ï8ñcGJOÂ"\N$ ÖhŒ5^ÂÆ8‚3NEäÚëì á<31˜éMÓ"§õºåXQD ì´ñl] ÉUJ©6”*v_Àw`8Øßaw‹³Ö)ýÆØxœð %È+$ÃnýgÛìlí2È_'ªúgk­—âÁzýê‘\µ^ĆŠa¯G·}ưףÈ9’ ‹±8nݹÇüëÿƒµkwøÑÛïññ'Ï888¦}v†Rclа°ˆ¢OÞÉèôÚ€À(DÖ"Œµ$#¯ŒßèÿÝK×Á õ=80èžÓïvÐÚxÀ’ ¹>º¡é 5Æë0…Ak‹¶ƺÚíbêM6¼éWe~ö|ꦌ1Ü…j±p¯Öƒz˜“õzcPR§%VW×ùÞŸü)>dkë'§'˜<3#À{4P¬ÁšÂû¥¸öUcN†u_†ì¯¸¸î|ét °W÷ŸÑœÀ)åJ•ùù&J9¤08W ³>ýN|˜ûê°QBîh9Ñí=F[N[mŒ»Nœ¦“ƒ…JµLc®Nµ(߇\ØC]ø$Gžet»çœŸ·}‚Nܨ½­¿7JÊŒ“JŒæxÿöYcÖÑÖËÔ”ëeÖÖ—xöô±—S1qœ`LÚQádB”–©ÖªT+ BgDhÃ>íÖ§­súƒ‚†d¨žt!}Þ‹£yù>´ %œ*­¸Pp±¡JaÃ^kM–dvü5Š$q!Å¥äþ¨Ó;75&‚4Ðs&Ï£„¿BE år…r¹Œ ‡t»:ÝsÃ!#ëø Ÿ  œ5©øjFk§§-ŽNZ¬¯e¨Ø¡¬ÃX‡qíÆù¿; ‘tèbH·Û¦Ûí2W‹‰ãõ¹^yí „JÙz¶ÃÑÑ ½î ìÿB_E!£—Ðyî++B3DBa¬ß׌’Í3yúYÌb³˜Å,f1ëg1‹ß˜þ¡9Šq¤ˆ#_2-%Ha'`×€ß]ÔWwS6wŽ+Hâ¢*(Êóž®ú#{~òo%ÂKปOzVpü6Zc­g99!1Ö£®ˆ(òì}ërÏ¢wn@=U‡ r,&”Œqß1pìÆæ¯ þùSŽ eÉÊ Ò("ªÕÈ­ƒ8&)%ÈHµ¼§%u¤ò%æcc5ðšún¤³=j߉€1­µ¿çAÀQ ´t#ìXnÅš`ï+¦ÌŸc›º`.g¾ðèÓzdc¹$[ñ¢„ÐV 28ã[ÒA"Hy¤)‹++,.ΓD¬ ÏϳΊ¼ÏyûˆÓÓcλ=Œc¤Œ?%Ãä°60’…ÄåÃÖÇÇÃëHWCŸi,ÂY’T±¾±B}®Øën<>F¯‰ ªµ½åÂó^›‡7y¶{B«=Ę,{ ï—`]09öÉpœñôÉ'lm2ÿò<•J„tŠÜZDTa¾¹Èk¬,58î è ¬/³— •T¨Ï/r}m•f•jI!¥¹‚N§ÍÞÎ6ïüˆƒ³CÚÂè ¹d(ò«%”×T.•IÓˆR¢ˆcAµR&I#”’ÞôÕúïJejÍ%–—(—K8ÚŽ€÷¡J‡¬™ &ÉjÄ 'W.`bL’<.L&.PØÅ¸wyÆa£Ñ V¯'¡¢g ¶ËñÉ1ǧ-†Ã|bþéF†ÐÒKM`}RbÐåü䈓“#zEABä+‹Â†$`ò9£HÅ Ïùɇ{» ^®{Ýz5vê%^ûê·YZ»Í»ß`{gŸÃÃCöw÷8?oÑ:>áôø˜vû”^çœ"Ëp¶a0Nø©©†*¥ s1Bê§eµ>’íÿï1êM $y?'d>‘2NôÊQöÖÏ%!›ëF”gAQ8´ñãDE¾Ï+áPXÆ'{Æ3 “Dâb Fk¸bœtu72~Ÿú?Ó\}/«¼ œ ¡áü䘃ÍMn­.QoTQBµ:Ï˯¾Fm®ÎÒú*‡‡‡œµÛtz]zƒ>ƒá¬ÈqV„!i¼O ‰Ï—8u¨gҷįԅį¸çùUÖ³°–G1åR™zµL,!Âb´Opä}o"ïõQg ˜¿$g72v·ENû¼Í0bÅB)„STj5ªõZXëå$qŽÀZã`gNcÌ€aÖ£?è’™OÔ1Ë#c’ ¥n˜ºI·Ý¡Óê0èåäi‚”‚j£ÂêZ“´,è÷ÅÈÄ…5Zø ²¤R£9ß Y/“¡LFvÞâôà€ÎY—<·Xö|#QøÑ˜±DìûD“TJTêUÊiJ*%qùä–~/Šÿ;BRX é «4›óSäùI•‹›6y¸Œû;.Œ‰`2ö„O É'”*ÒR)Ý ò<§ÓïÑÐÎùbšÀ °#ŸáeŠÆWaÚéôètú¾ÚFá× %°Ò¿ÜTrØé>Ãa›³³cö÷ö(ß¾FRNH«s¬ß¼CR™cyý:‡‡ŸÒjµév{ ¹.&Û;kqÆx¢‹TH¼Ùú˜2&%ˆKÚ•³˜Å,f1‹YÌb3°~³øõá°"Q‘$ Q¬ÛÈÌz1«S…³µ=¥µŽð@ô%ÀL\h+áen„Š@yA„“b¬eËP¡œð‡ÆðK)±ÆP¸‚¢(<È&%RF:'Šý}¥iJ'8çHÆ9¬cÉ—HÊñu:á4y 0¶á->Y'Öª’´”⊒„j½Fœ$8@[3ÖëöB¨ñýJ!ÑFS…7‘%€ñAÞhfZë‹æƒBx&½`<˜¢µáB­ÂÔaÍŸE/3<'‰ ¤œ°³¾,°~Ú8ñò9¬cú˜9}¹D0ôs€Lbæuêµ2J:œ-BòÇ!œFç=zç-zÝs mÐNöÞôóôæ½Æå8"Ю?`pÞÅdi‘ð‹ ¬E¥>ß ­¤“òò)£åqåÀ8d@h Ýåìü”­Ã'œ~ÞkÜð„)X¬¬ViÉNöwøøÁ#î]{“ŹB°oHdBµ6ÇúÚ*7®­òô Åñ`ˆEàdLZ›§¹¸ÆÚâ2Ks%*©@‡¤ ²šÁY‹Ý­-6wöh †äœ˜B{ÐE(ŸLˆ”gc–*Tç,,.°´´@³Q£RNhÎÕ¨UJ$±Â9q”DÆ1"J¹÷Òmsu@ ‘ˆ*%ŠË±6À v¢ÿý"(o¤9¼"žëwÖâtN­V¡^/“&Qèra¼[†ó~Nˆ6‚8V¹'¯þ6 }òA›^ÿœ^‘S¶ÊkOéƒå@¦EXãŠí“}ž|òßøÚušs D$)Š!!ŠJ”k%V“×n¾”Š,r°·ËÓ'yúÉ#¶ž¡TL$- Âxi´1(?2š  #œ\c@~”ÈV\êG2)büç¥; ­¯EÉ8 0†³ƒ¶“”»ëÔÄ5¢Z™H&Tççyy~ŽëwîpÖn³µµÅññ§­­³3ÎÛmò\Sä–|h|åˆSt€ §æÆÂRW“Í/¤~ÓÏÛýzýBH¢(&MbJ±"ŽÈY2­Éz}t^xFø´£±pïWŒ**&€¬5½A—Þ°OQhJ‰DÆ‘ˆË k0N{ɰ Ug´7Ç„ÓX›£MFV Éò!ÆXœ%F¦åë“m™ÀɈbÑ=ëÒi÷h6bÒ(¢R/Ó\ªQ™KègY¡É‹‘ð¡ vJ¹^g¾9G³V"&ïÓopvpH¿Û÷Ä€°Wôþүƀ“È($rçª4çY^^ba~ŽFµJ¹”ÄŠH %‰¥77r§0Q™RmŽZ£†žï ^_ß¹é6Ÿt)7=Üd_;¦‘ˆ0ë *‚8&NK$I §b,0ÌrzYæbJšhº«ÄïG{&¡È²‚Ì°Ú ¬×V(çÂ!#Iœ(T$ƒTÌÔSÇú€ÇIFgdYŸÞ Kw8¤—[ Ü ”£¥óàœ³—éžðî»ÿÆw¾y“…fƒD ’JB”ÒR™Æ|ƒ›·nR{¸ 'ލTaae›·îpûÆM*IB$±”D‚ì÷8=ÚçÙæ&Þ¡ÜàEEc°¥Pi™¹…E^zéò§ÿŽo}û¸yc¹Z ”b‰ Œ?cͤŠ%Š|Ò ­Äɸ‹Ú±t^ê…sd¢Ë-™:Ç-/.ö%!¤g7Ê‘aö´nïHàÀ?ïÂrm<+ÒÚðS•6!idC²ÓXM¡ 2£É#Þ^¢kÎ 1õ€…Ýå`ëc~øßÿ o¼ºN­ü&«+ó”’RøTªu "å¥Ûn3è0^¬>Tú ù©2*­S›_äú­[¼úú«ll¬R­–H£ˆXÕ>­„CO")¼à¡1+±Q‚Œ$&?ŸôñËÃX\áeÇ£àÅÏÜW{ÓÁÓ I`ìûµ$x]œ &Ô1U7*Y¦¤Çÿ,üZÈ9ÂÉÉ3Kë4âéÓ”R)åÖ­›¬­-ÅÊkÖKE¹VãæÜëׯ¡ .4GÇ,j IDATÇsppÈÑÁ!íÓ#Š~ð1íî€Âz6>B%%L¡RQn4¸ûÊüñ÷þ„·¾ñ¯Þ{™µæj ‰b̰Á«b4F„TˆÈQk—é‹ñ¸¡.ñëõF7®&‘Hé“…J)T$PrRM!¦z\‘ä¹A뀓]ê¡búi ÐF“e9EVŒëž|-Æ0Ó‰ƒ‘<¡r²Á!?ü)ó¥ä½ÿ™o~ó-ÖÖ–(W¼D„gìzàÐob(„ \®P-—½S$©Öj¬¬opïõ7øãÝ>zð€wß}—wþ.‡ tV`°¡zdzÿ…øÜÖ½ç@1íÈ}Õúò{°ê¦Á±T†›Èg]˜>Ä%–©ä9Q²,T™]å™Z?¦ŒA/c·ŸÒFc‚°ûµ'Ô S;âùï‡ì<{Ê¿â¸qó·nß`}}‰´”§ JÅD©$.ùv1ÆVçXX¾Æõ}ÎîsÚ:âà`“ããŽ)†£í¸=S8¹øB[Œ/ÐÝ¥>xùßüjŸ<ºãŽw¤Ë¬ä‘/öØž{—pS3¢›Â}{Ñ“WÜ‹3Z'‡ìííòêWîRV1‰ªP¯7¹qã‡}úýZçãþÅ1õzÕ•%õ*qv:oŸsrrÊÙÙ…Ñ âñT0b²‹(¦<×`ýÚm^zå5®ß¼N³Ù Z+SNp†a¯KQdˆ õC0"VH„ˆ)P2F•*”Ê¥ þ9:ÑÄûèùÇsQ‚jZ‡êò³»ªúãâJp¡S;ù©=jœd¸ôvyÿ“,r°¿O‘çpãÆ×®o°ØlDZç²Eš*J%?o§å KËëܼ›1èt8;Þãü䘓ãC67Ÿ0È4¹ñ2sîBµÇLg³˜Å,f1‹YüvcÖÏb_à0:9½|ñû°—Sµù#°þ"˜?ë%#@=@V!œ›|:1GLÐn7Z“ç9ƒáÐKÄ3U!¼³t©"¬•hkÑ΢­™ØúM5ÚZr]›˜ÂyKÊ‘}y³ã²øÍäŠÜó'¾P _ƒ6Ú§T”kuêóMÊÕº?ˆI5Ö5uŽ+é†ÎM]^>Åb´½Ô[g_¬ë>냎b,Y;~=gôwÉÔ÷·í<6B³¤xñ‰ÛñâÃù`ËßŨÈë†ÇJá,c¤±#Íãä)DkÚ¤xÔn Äôèbä BÇ`½"Š¢ Ûâ¦Á‹ Ó`½ãA£ ïá.7ŒÇ…D ]àèZMÞï°»ù„gÏv¸qû•zJÀâ$I¨6\¿}‹ÕÕeªÕgt:†8YXZbccf£L¤ÀMa4ZNyüø1OŸ>c<›^ 2B(A©Zçæ—ø‹¿ü+þÝŸÿ÷^ºK­T¢ ”,Àdè<'3Ž<·hm¼Yeø ©bd$)UÊDQt ™ÈÆŒ“HâÅ’SŠ “gçâ‚ãBzf½T ¥¦˜õ—>Zë‚"€õ>96ú$÷|·^â*+rt^x]øç#.ÞÓ¨w ‹žÙ:ìðö¿ä(àôð„7¾ò&·î¬QoTIR…†T%Á`;HgI9®ŒÒ8âJ¥JÅÕ î¼ò*w_ºÇk7hVëüÛ;?áÉöín3öÉ\–Gøð`.˜zþ>€@SyÊ ¬:Í’wŸr§—Êz®¼ù+’‹—Þæ^ÔžîêUXˆÉZ9Yø"¹Ê ‰¾ ¦ÉbÄÈž„u–ÁÐòøÉ#ZíSNÎŽ¸v´Áüü<õÆÕZH)ÒRÉÏmHÒrj½Éâ’dm=§Ûmst¼ÂþÞ*›O?áhïÎy—,+<ÛúíÄ—·‹yñï~…ÏI¤„º¬‰™§˜B€/Ð÷ùìËv/ºâ‹©Ãq m:¹4ZÓݤR|ž/u†îy‹£ƒ}:Ýår$M)Ul\¿IóñívÁ GŠ„$ŽbêÕ +K Ô«e$]´Zgœ´Ztz}ï¡"Ñ`ÄDwP*WYY»Æ½W^áÕWﱸ´àel„cØëÐíœstx@ûì4˜¢zÃqg¬ß' Ea²2ÇüÊ*këk4_ØÅÕ üs q9!ç.ú&ˆ+È„›qÅïG,ýñÀœÞ‰OmÿO—ó ¿- úÅ9Y¿Oûì”Ó“CŽX]Y¡9?OµZ%IÊår¨&U$i‰´Ò`^DkÈ6Vé¶Ž89Øg®Zfkg£Ö9~váæg¢7³˜Å,f1‹YÌâ·3°~³˜s\Í7sËÔ§€¨ÑOŸ L•õ D‡'@ý˜á=‚¹Æg\Ip´õÿGyƒGd0~ž o­ÅπγŒÁ`@¿ßÇ:‡’’˜!ºðRÚ9dÓÏs²"'Ës†yNf F€‘8Èu¶†ÂY #À o&¦@´ Àù‹ €1Z'ɵ&×ÅDqBe®AmnÅ8<Ð)…7Ùð—ƒîBû9çÁec ÖNôë¯Æ©'åÖR ”Ti‚ɹÊS€šs—Тß6¢ö«èÚ äÈ(VŠK<Ö`Òkë=LxG‰¦çL“…ï›:<‡ñA}ä³ „—vù /7%/±u/Þ·R1J©1Ê)ÏôÖöêfrŒ@h¯Dmm†´é¶ª<}ú”;¯Þeec°TqÄR¢Je–WXZY¢1WãtØ£R¯³¸¼Äâb“44“kŒÎѲàéæ&Ÿ<~ÂáÉ Ú:PÊXƒ¶—i®Ýà­oýÿé¯ÿWîÜÚ #Lfˆ„"ÂPè½v‹ã£sZ­.^Ÿ\¡@¤HY&NK¼tï&Ë+MJIr6>aǾ ¡ÝËùrD\Öò¾H–dTI2ÒIà ^Øå­ua¼M*^„Ï%^2ZVøä¢3v"Ëîg4že`÷“Ò÷>«8cpVr²oùçø;~ô€oþÁ·ùÖ~“›w®Ñ\š£TŠiÔêTJeÒ8!Š"¬ñÕ ‘”%1N„땤µ·î&4ª5ÖæçI¤cX é zXíP2h‹;ñ%²L—ò|þ·}˜+®ÀàÄ”9ùåïrâsÌ3î3¦•KÉÍÏ‚¹œ¸œý"óáÔÚ=ö¹˜’PyÆL†îEõ¸œm$Åb¦Ð÷•”0EÆÑÑ>§í?yÂÒÒ"K+Ë4¨Vª4šÔj5â8¦\©P–q‘T"Vçj,.7ÙX_e¡9σä}¶67i¶°Ú„™êRšàKÏå¸_Yƒà# ^zpüÂܤû„|^Bî¹ò(ƉÝé+ù™LŽ2ø ø=ÐX]ÜYß'Æó’KÎ|î6’b8¤}zÊþÁ¥rD¼A—×X\lrtxBpŽ¡q’P«–iÎÍQJ"´î3èu9>=áì¼C– Õx^ö3w„’z£É­»/qûÎ-õ*‰´H,ìÏγ-¶··ÙÝÙakëÃ~£5Ú83ñG2ÚRZ\åæË¯ð•¯}•FýÞT"öùÇæ^P´r¹™.ƒö/Ú;_ú¾T<7ϰýR2ÌM]ϹÁ+ºª5fl0 ^F¨“gt:glíl1?7ÇúÚ:”Ëe©×ëÄIB’T‰#ŠË”â˜zcž¹j‰åÅÖW–ùù»ïa~Â`xä=5f@ý,f1‹YÌb³øÅ ¬ŸÅ,Æ€“¥Ð^K9ŽÕ8WR!ƒ™”TAkÖMË^ Ïrâ¬kç˜2€ÑR*¤ ú¥BŒ%[¦ß©#7–H9R¨ÄR ”ôÂ!ÖaƒüKžeäÙ\ %Z(ކœŸwètºƦ%â4¡7Ìȵ%wŽó^—^–@^xé ¥J™8‰AÜí™¶áÌ=6u… ó)çÿ¾«8!’ %Ì5©7š”+5d”â”ÂÉÀ¨n£Š|k¾x¨‹£xb ¨5ÖŠ >wI"D ÿ|­%=N xý]7–ÂqcÀÁ]bt^)|û{ÎXòþ€Îù9ý~£-™3(”ïÓREŠ8ŽI’˜R¡I)´Å9‹Rr,×r!¤B•JÌ5ã~㚢È=€b-ý~¼È±8/32ŠeàÄOد2¿ÖZ¬±Xã¼,cÌ9‘f Ú^ÓX…Qê°6'tùøáC^zó5^{óUCÒÈ₦|­¹ÀÒê*ó‹óDgÍyW–i,Ì#%äÃa ”-ÐEÆöÎ{G§ôrˆâ‰Ê„TÄq‚ŽçØxéM¾ÿWÿ‘ëk+T#å“I„pš"ërz°Íý÷îóOÿõ_yïþGìÓÏ3´SX—Åu Küoÿûâ?üåŸòú/£>é÷)ƆWãlòÓp¸ k4ÒÏ‘‡r½^ó´)˜®›¨Œ%&8(IR)S­×(—J$BâŸPÐrüç$‘é«=|bÒû/,Î èžïóèA‹í§øçþ[nܾÉË÷îrçÎmÖÿ?öެDz$-×|ÌlM{ž|öð˜2*22+k¢Šâ:áÀi!5jµZÝÿþ¿ƒ;ÄBüîŽÔRßœÓ( Æ¬"¡*³rŠ9ÂÃçaÏ{ fÖf{p€ª´?)‘îÛ÷^ˆeï÷}Ï»±ÉêJ‡v«E³Ù Pår‰JµJÅå¼8´.(+…”õzÛ7¯óßú&'œôÎyöâ韖̿x²ÛÙú"^*÷I{Uµº¸$v}¶Ôº@'ó÷ÀÌ•¹†FëD;;_‘Å]góß|¡›ê_O.¾:™0ì‹«ºE›cB3“M»øp!iéÞûBçP¨BQ¤#÷ï7ƒÞ9£aÝçO]÷š¬¬mÐYY¥ÑrÆ õF‹f­E½ÚÀ£TH­ÞâÖ­;Ù˜<’äB“çm¥ÿÝ¿Ê eaM]ðoyé®I Œðžö¨ š¡W¬<÷tV{¤ˆð“÷UšéØFòÏG~ü£ý½ZèHœŽocŠ,Fk´öû…1Îÿ‰D]0Iù“û½]¹½$MÇ<}úœÍ £ÈÒDTÊeJI„µ)A’Pk4Y]íP.Ç(:Íè÷ºœžÓÉ,®øÂ#ᦶº"©ÒXÙbëÚu*• a ÐéˆOÞû)?ù‡Ÿðìù®7+NÝøb†‘‘¡ʌ \›qÏ(R,~ü3‹ >o‰€õÉ÷<+¿ðÌžYLŸÅ úҳł—„TÓMdÈ|eÖYÆéÉ)½ó.îßGHI£Ñ ³²ÂÊÊ õF›zkVgv³‰¶±’D¥ í Å7¤`4p|ræLê‘KÉ~ËXÆ2–±Œe,Åúe,ãW*`΄__£e¡( w “®ª7˜"i|%²°Ì Î ó £¬K±”N¬WÓƒxY9^ŒÖÆ’SÙ) RXŒ Õ²Ú˜ ÆL…s1S4=åÄc)ŒÂ¡<¦UÓÐÖPWA¯­%ðx˜Âh²"GdîÐ"¤$ô•¼fÁœ™PúiÂŒ€ NJTëMÚ+kÔ›-¢RÉc7üÁHX¯ïÙÏ}ì>ɰ(Â\ÎLEL3E²Lå…iE¯>‘⫊]éž÷_³³$ÁLà®ÅÞéÿÚÝÕÚ§÷,Ëк@)7ªµub•Â0¢R©$‰G:÷ÓùlÆýl³Ñ Ib'°jMAi0[äôû}Ò,»PQ·(˜\tŽ—ZííâM粟ÁâÁÞ,{1–"q°ÀþÁýÁ˜RÍ™ÜZ!1RU«tVWh·›”^œ±±µÉæö6ÍVk@áÌe…ÑL=öö9:í3J-Új¬šÏ”Ú 6oÞâÎwHJ1JÌ…IÁ°wÊÃÞã¯þûÿË;?ú9OwOèSÆE ª„1 Råä:d<Ñ3f=òÓ¥ÎÙ¬\¨n^ñź`<3ç¹…è埬T«$I‰Bƒ¶Nl¹@°aƒc$ŠcÊI åM"§k¯kÆð±fšŒ›&ÇŠ@J BSúý”´È¾ØåƒŸ½O­V£Z-ÓhÔÙØÜdee•µõuV×7h¯¬Ò^éP*•ƒíQaœÐZis÷õ;Üüàï}ð{{§þ}?þ¿˜Áì…*VqI!®øÓwRYPg—…Mñ©z'ÖÉWÒo&—Eu!qnŸgÅp>³¾ñªþôeÅ«®È¥±ú™âââbw׫8Ö)PA@(¥Ü=½|IgeÄfAöÿo ¯,,~ÏÕP,|$eôNI*Uvë J• ö;;·ØØØ¤Q+‡1ÍV›kÛÛôOœžr|x†K]Zob ¿zÁžWŒ½…«k/NžçäY†U±ßQE!JI(¾€Y§ˆ`Š ]R·ÿfYF–e ‚ý‚½‚”ó1±è}b/Í¿Ï^ý0¦ÀbH'cž=ßçÞ›cVZ5”Œ˜f«I«Yãðè£B¢8¦V¯³Òé tÎdØçäøˆn¯Ï$ÍgèÂmɵ¤T£ÚhS­7)•âHb‹ ÝÓCž<ø˜ãýŒúçX+Lç‰ c ¶+”ˇ*éqiŸÇÐA|ί-L(ã:î´Ö¾ÊÝ' ¤@Ê{àL|o8>3ŒW¾|’ÄÄqì Q¤ð)3ûЇß±7§àû)ƒ!+4Yš§Ã~Ÿ£ƒâ¸L¹Ö¦½ºÉÎÎë+Í•$$cÚ­6Û›¼xÖ¦wvJn|ÂS,Åúe,cËXÆ2–±ë—±Œ¢=3±>Ͳ9÷]Ê™X/g¤Tæ¸_YÏEúì¥s¨«›þ75+´Ø âþ¼uß8¶¦Î‘Ò ¤ ðÜg¼i¬¶ŽámÄœ9o\N¨7Ú Q€-„G@8Ñ^ãZ¸U t€ÖÆx¬ÿAVˆ\b„ô¥¯êWJÎxãvRºx®—NÔJ‘T«tÖ×iuV “¡_Å$.ˆ³âjÝýê㥸hÚ+¦ñ— 錵¥qé…Åô¾Xƒ”%§â¡öçCq‰ZÏç<ÿkÐÏ[ÅçÏ F£¡ØÁ)a@T«°½³ÍµÍM:õq á°âóHZ/}½Ô‹ó9­Éç“yƉ±Ÿo~æ/Xèvø×\¿®\°íˋӂxj/¯[‹¯!®žûbÆCç%^öUâ/(¤ ˆ¢ˆ8IÃè¥uÆýÕW€³P<ÅçÈiÂg¥ðvÓ_?ö˜ {pr†¨ ¤ÖèpzÚ#Ë ®_ۢݬRŽVV:¬¯­rЬÓ;é’J5bAý7‹¦:C9iš2Ž©Å1X‡-«TªT*e‚0€4çs;æJ…ˆbªÕ*Q!…œž†#†Ã¡V2>±ÏB¢}ÑëB̪Êg¾*–—xè⥬".1#$y6áx“.›ë+4“2‚ÂáVÚ<{þ‚‘VÄ¥’«àn· ¤Àä£á€£ƒÎÏ»dYæ=x¦*;œË•µF‹rÅ}Þ 0¤£§‡/xñôãAeµ3OŸÁ~ì»q‰U%Q* Žc’8öUõöÕÏÛ—Ÿ½Þã…l‡K¢yA–åÚõ¯`…c‡aúkj/yN¼!V­V©T«©Ê)ä¯$í_n¡ƒç*/)ÿž³4%›Lèž îQmìqr|Ìk·oaoß@®t¨„q"X[é°³±ÂóGä†|–<[Æ2–±Œe,cËXŠõËXÆ/÷Ü)äË8/M&Œ5 £¸ ÖËgÄi¥—ôìíW3R ¬¦-Þ¾:ý¢QžõUÜ®ºUCn $2(Rj¬(V`\s&ú_1˜R;„…PŠ ŠJc­ 7šÂ8#K*’rɱê‹ ‡ v 4°ºÀæÖ#PéÊ3ã§̬É^V¦ˆ *%ÔZMʵ*Ú:íÃN…öi%0ˆÎŸó^ŠÙu^ËÙoª­ƒÖ/WúI!J"­G)ï58eÞ"—×. :æ— Ö >Õ¬ñªƒ¸Ÿ-ÔYËáá!‡‡ÇŒÇ9a9ð…sîÆ'IB§Ófmm•v»Å(=ÁÚ‰îEŽEa¤ô8w}‚R™Úú;×w¨”K®C7F…袠wÞåÑ£ÇtÏ»— o=þäÒ'½hîyIX¹`·PµèÿYû!寲«Ž=98àñƒG<~ø˜¯ÝÙ)1ÆýþR¹Bgu•­ 6öºlmoÑ^©—¡²’¥3²þ Ÿ|øßÀÁY—|ú޵V²4êušÍ:Aè«ÃDY‹²EÎdpÎéá'ûèL‚ |ŒÆújÔ$.±µ¹Ãjgr©ìæ†S‡Œø¼Ã花zùß-&/螟Óëv™L&X —ÞF“ÕÕ­V™ÞuúÞ›”ˆJ™Öæë[ëÄq@ ½j¦k—é­Ñ weõÖXPóî0zû J ¤)ðžŒX+0…E KžNôº¿Šá8éÁ•Ìú«„ú ð÷YX¤0 ‡|;k®2@û…‡\»æÕuÓª˜š»ÏjÄUEøSeTƒÍ8ÚÁîó=κcJ¥†cV"Qa™J¥ÁJg…í5ÎόƇfÒÚ–…Ä å7E£Ùàæ­6·êÄIàñ*pˆc›“æ9§§ç<|ô”óóžsžZîXCsts£Û)ÒÅX;áØW‚3æ-÷Ók¤ñmòAù„£çOùùOÆoûË$AŵÞ[‰RÐhu¸qó6'cÁöö:F™8„ e@SºGÇ|òÞ{1)r#÷{­ç ˆ“Q’¸Êr_9œ œ9ž.´7÷]³$¶(@Ä¥ˆ×îÜdeµI(¿ykWŽÎK„ka<Ïø¢Á²ôW:ðŠ ‚ýƒ€³÷;ëΕzƒJ¥JGÔK%JI@9rB  IDATŽ)G1ÏŸ>cÿ€þ`„ ´P΃᯶麇Î÷øðýÙØØæÞë¯ó¥ j±ËêX«AQ PÞh×믄÷ÿKöšÙ V"íƒs…öþ…$Ö‹B½¿´/×L«{Ebì_ ñZб³ö °éF†Ÿóv —[˜¿î+ÊÏøw{’ñûÛb×|¦_9rÖ=†Ê%‰éÍ…çIi¥7I½ÈkJ„!q¤´ÎÈ3CQØYÝ4©¨Ä¼£KÓn,Wý|t|ÄÑñ*Vµva ŽB*åq’çi|Õþ/S†fÁ\÷å-|ÑØ%ãxÿZ£uNš¥Œ&c2c‰‰"’r•RR&PŸ»EX‡B CÊ•2I —àÔÆŽ'¤ã±Óàµ} k#ü\•ÂuBŠO}{õ5 •B#È¥‚¸ÄÞá!Gìl´ˆ¤"c’R™jµÂù(§Õl±ÖiS+„ÒÐíèu»ŒFcrí Ô¥òÉÜÅ+!dD "·ë‚ÜdL&cFãRùëÐUn<ÙY'œ{ å ž$Ú ¢‚À*”•(ëÄ# +RÒ<'+rŒÑŽ[*ÊW*ÛÐÎH7/ƒ€z¥J©\¥?1L' &cF“‰3†Ó®½ÚhÇoB •À ÖÐ*!=²Âa9˜ÉíââAáz‡* #­ç”Š…ò^)=^ÈW±»®lyA,Þ Öª)ïú"~È^ª~¡‹è ÄXC!ôL­1¹AZ—”°ÖUÙ‹âR‹øìµç<í_«~QÕô•†ÖãEÀ±Ì‘^˜ )U*¬®­S®$ÕÃhÇó1bõ†çt÷xúô9žÒZ­ ‰VŒˆi¯nrïõ{|ûù!ÝÓ3ží0˜äóî#@…Å”kn¿ñßüÖשÕc¢H(oÀ'd–ãÓÞÿùG<ß=g0ÔX DˆEú1¤‚ÀZ¬ñxëÅ ûröA\ñUÏ‹€âé$š*üŠ ƒÓö?àøà”v­DRŠÒ"¥¡Þ^åÖ»è¤ÉÆíšÕ À@$%ÙhBwÿˆ'? {֣ȋ‹cDI„°B’iË$7dÚÉó~åÀ…µ*¬% ¢¤ ƒ …Õh@ˆ€ I¨·W¹{ï_ýÆ\ßY¡Q …AŠ ‰! I¢ˆ8ÊN#cPée`Ch5Áuç\ê§B¥œ‰/V(¬ 9?:âlÿÁyŸIÖ& }E³±(U›\{íu¾þ­oñÉ“vºd™F¹!£ •Îwî¼Î[÷îrsgƒØÅ.W©­qU±ÞcSyá^ /Û‹­k¯ñú_æÆÎ« õrH£S/ÇüÃßáoþæ;üüÃ06G éÇu?/ƒÙJ¤a2ÉŽÆ ‡c´÷î°¶ /R´É(lAa ´6X#½Ò-Áì§ à"¨â³7!Ñ‚¢äÅ\¤’Ò |L+dV˜Y¥¨Y|;OlÍǾuÚS€ýÂVóªnŠ âÌ7ÂÏ›Wù#ˆK9  {±E`šž³ ¬EZãÓ±~ý² k•Ÿ)´& )F#tžaL† )—+T«ŠAꌫý5™rþg¼z TD'ln®ÓjÖHâ¬FJ”H¤U®[M†—(—+Ô5šÍ*j‰btÆÙñ‡‡ Æ*/,ú=hæÕ ç´ªÛ²4%/r´ÑdyFP.!î»:r]PèË¢æå¤Žý”'™W÷¡ÍÖkñYOCWÔžÏè(—cBBbŠ‚Q¿Çñé1×w¶‰”$PA¥J»Ó¡^-qr&H­ò‰]±P m.VDKIR*ÑYY¡ÕjQŽb@†qoH÷ôœ^¯ïÐ|L)îîÄÙ^`Œ»}Äù_\ýá/'Ýõéc! €Â期p|tHwxZIBP©µX]Ýâ|Ø¥Ýè°R¯Q ,:1êžrr|ÄÙÙ9E½ÄãcŽê1…¡È -B¹Pk‹ñ8·©é¶µÚuIå¾î8o¨0¦Ro°¾¹ÉJ§C*¬ÎA¹ñÈ(ˆ dˆÚõ#MݺåBõùBº!Yèž+°¤äù˜Ó³ÎÎÎiÕÊDT’ íf›Õ•5ŽŽ)²Âÿœ™=³8l‘œq(jÍ6ëír‰DX¤q¼ @àÆ‹~Ï!aÓ¨×i7jÔ’k5½^—ã#†ƒ÷˜ëb¾ðYÏÏ—Êw\@žeäy꼩ü½—´¶diáMo—¼úe,cËXÆ2–±ë—±Œ_^ˆ—ϪK^hbÏMβŒÁ`@‘빤5m½vn'¦¬zf‡WÐtQ ˜ §D+æ!.žY…¥嫤ݡ3—‚L($‘žƒ-(¬%Óš¬(ÐEN(é*饔(ohk%y”c%ŽJQLÔí ‡„R IV¸Ê©ÂhÒÔRs±F”„3ê+ŠÂ™Y'Ì."pÜ¥] J*pæ£X‡Ò__í+¦¢•«V6ÌEñéáÚâOÕþ‚i}ý`­¼²^XƒÀux溵†BKŒœŠõr–0˜v5,¼²C ÙWþB³K;d|rd¦COo))×ÜþÒ—ØÚ¹Æn?gÜË\µ£ˆÈ³Œñ$'O»ŒÎyòð1?}ÿ7ïÜ S‰Aœ É­¡Ú\ãKwï‘RÎŽQR±{tÎ$ÓdZ‚Š J5âæ*7îÜå×ÿÓoð¯¿I%QDHiÐ(-£Éˆ'Ïžñλ?ãètÂ$«Ì-m4NÖ¶ ´/ ù®‡)üBˆ¹aß/±€À˜I§~  :%œsòb—'_°µ±J­TrÕõ¢ Rksí†%n®QÛØ¢Z.!µ!0–ÃÙY—ƒg/Ø}úœñpŒ1ÚgMäÿyF‘gXkR¢‚ Ž “*Œ@¦þyR¸œ™ºx+TQ­×ÙÚÞfg{›V³á:.­A(÷ £dH "¤&´‹ù…98}örS1&îzj„(°6£ÈFœžszzέMPŠ8*ÓjtØZßfowíM^µ3,‘ÒÙ×[ •j·^c£³B#މŒõOŒî™Uøvç?ã’—I¥ÎÖÎM^»q•jOØ?ØG»YF–¦¾S eðŠ.H·G‡qHED¡ÇúNÏÑ8eœ³µxËXÆ2–±Œe,c)Ö/cÿbаÖ2Ž( íKEA É®8ÜN͵Äü€xåáðª#¸@ U€cœm-@ áªýû* Šbò<'Xò<‡¼©Ñ* T2pUV¡BÇe”À­$±PdB’!ÉX¡&IÅ`<;ŠT •rÕç3gÛËÊÔ"Ùzúu'hkЦ ”®ÙˆiÙIà?·p/ÈýÖ¼Œ0õf’óËêÂ…ž‰ÚÔú«äé™·R`ŒôÈÁ:™ì¯ÎxÌûè‚YÕ¬aZElIªu¾ôÆ[¼ñ•8šHôîY®Y­ÅŒú=ŽŽÎéfé°ËÓGx÷Ý÷øÆ·~“ÒräøÎº°¨¨ÆÚÆuâoÆLÆåZ‡Ÿ~ð {G§ S‹ŒÊÔ:ëlÞ¸Ãþ­ßâ«_ÿ·¯¯SK$aàÆ±1–¢È8=;á“y÷ýè§…UXÌ\ÆÏXÕB.“Ê%ä ÉôRNhžÈ¸à(,çêåô^ê‚|<âüä„?~Èë÷î°Önc… 3†¨T£³RªçDõ…2Ò8äÃÑáOž<ãèð”,Ï/ÌYë¹õVç% #FÃJ.`Šq"ˆ!ÕÖ*¯½þ~ó·(ýô=žï’æ–¸Rãæí×yó«_ç×~ýÛܼ±†Ñ)ƒAN­E¡«ô•ŠI©ÆÚÆ5Ö66á½H¤$Õ™:g¦Â–O8D‚ã㫱ޛÁ (W›lrôdÌþ³§<{ò˜IþuçWa%Fd6 ¾²Á×¾ùmŽŽ £÷?yÄyoLZ(êk7غ}׿òk¼ýÛos÷æåè iÐÎý-E¢ù$”« Ö7v¸uûuÚUE5‚XH=âË_ù*Ï÷^иÿè O_r>“Æ D*"ŠËTë V7¶ùÊ×Þâ­/ßckkÝ_ÏÌyŽŠ~Èáñ 'ç] ³°œ™é˜ú,6‚ðÉóÊõf’0JHʤ (ç—΢(S„sóÑ @÷éÅ’¯–Y/%eXíí¬Ý‹žØ¹`!`<²F¼üZŸjðz¹·j.¨Ê—7^®Âoè,ÃjM`r„TT«5vnÜäè¬Ko’’kM¨"·6 áð5*@!Ív›[·n²µ±N)}Ç–õ^®êYX—ÐvÛ·@K§³Ê­Ûw¹}k›v5"ë6Vs|tJ¯¿ïöe³èiâÅo!J8¡’µFZ­BœD³dôd’1èɲ kìUŸµ˜ öÆ/ž>={Ï_x3›#ÕÒtÄÉÉ!Ï_<§Z-Q)× ”¥¹²ÎÎõ[ôF)½G»äÅÄ'ΔG ˜¢ Ès¤ (U꬯opûú5å›çä㔽½Cº½! ˆƒá;Êeu­C B¢¤J»³N­:¦Z©PŠB¤)È&Ýsú½¹¯ªŸc].¯–ñh€ÎS’(D)PÒÇ%­åZ•óáˆ<ËÞ|Øå²<:Q…$å«ë¼qï.këkT’c4QàŸá„Â…±.™?M< ¡ó–¼¸"OÞ‹_A›O z ‡C´vI*%CJ¥««\Û¾N:)8ÉN06G¡P*ÄÊãØd„aD{u…7îÝ£ÓjJ‡³F£|gÚúeǺv )•ÙØ¾Æ—î½Éj5! ˆ“„ÑxB¿ßãô$#Ës¤T>¡³˜—˜vj„ЍÔj45jå ƒ–qQ0L3Š +Õ2–±Œe,cËXÆR¬_Æ2~õb½q‡µ¢('ŒÇcÒ4…H:ƒIõjê´ªnjtvñë|*ç\¼¬ ;~«H”¯Ž4³‚ØéÙS "lA%ù8#ÍSr)È=Ç)œ‚4/Èò‚¼ÐÆ0èõ ‡ Ç#£!™.ÈlAn &iJ¡sÀFµr…( ‰Â!EQ\2ú^HõºÂÎì&…uÉ„ó³s2kh¯­Q®× âÄQ*^ˆ4 âµi嫵ƒÅ¿Z‹‘†Ë^R¼\a'„ÃÄk1ÆáP¬³êP;~ÿ¿ oÙWõéxDïäÞÉ1ùZ ¥Ø™âlXbõú]þëÿþ³zçëì#­!Êzüã¾ÏwOL‹2)ÃÓ}>yïøî_ÿwJ¿óŸ‰nnbË e¥ DX hÊ„oü'Esó6_þµçì1É QR¥ÙYcuk›×î¼ÆÚÚ õZàŒ?D[C‘å˜qþðüÏïü==:`XŒ˜Y#/¥#œê¼PÞ J •õ/Ï?{Åx)£ãs‡¤8=íòøÉ>Ƕ7!( ¤ ˆ¤¢ZŽ)Wã>/ l‘"II'Cžï>áþ£' F­Ö†NÜöH;Åö`éŸòâÑ>Oty}» ¡rÃ@–kl¿ö¿ܸw£“3´±4[mÖÖ6ØÞÞamcƒQÚçáã§H°½µÉÚê qPBJçU¡ܾ÷þ·ÿcÌæö6Y¯Ë{?ÿ˜p^8}'G’ E&替ô"°A£)0¡±2Ÿ3–ŠœÝgøéOß寽Á½7îvj¡@›d‚DRmmò{¿ÿ±½s—žp|Ô£°õ•-6vn°sã&›ë+˜tÈÑ~J­F«‘ …Äêùúg;!.Åýûù§Ÿ¾Ç×^£uw9ÁIS¡Tøöoþ.•M>øè#ŽNû F)in0V Ã8I¨7›llmqçKwÙ¾¶I½ ”Æèœ4“žŸóɇŸpÿþcöOÏÈ#¤¿iæÕ®§Ÿr†òºjä ¥(U+´Úmo®È ½ B:î»6–…®-1[˦]£ÁÀí]ÓWðà„taæF’3ÜÉbÂë*ûÛ/ø¹/¥¤]RÀ}kçì#ë¦ÂÊ…Ÿ3œžp|tÈÖö:qàüÊõ·îÜåø|á.½óÜ8†w—Jt66ؾ~ƒí–áyE$µ²{u!ÑR ¥Eë”iŸœwÙ{þ˜õõU6×;ŒBIVX»v›¯æ‚¤òˆÓ“.½þ€Ñhä*¸½ŠR®ëÌÝÓ+Ûܺy“­õ5Zµ*¡ÐôNœrÒíºî \×ý÷ñ”ä“ÎŒ>õ8Ûßåy­ÎZ»I½DÕö:7SÆV £{ûûôú²¼@zS¥"J¥íÎ ë[ܸu‹õvJh‰¤fÒ°ûô=á¸; µ -C‡—™ Uó)OU Hœ–eq ]±ÖEû„¼‡£á€³“S”PDaU²4š–»wCVVÛHi:a0rvÞå¼Û#Ë Œ•+•ˆ1 i70†Ã>ݳúç]ÊQ•K”ÄllopëÎM ÇǧLÒb–” „8.Ñét¸¶½Éõm6VŒÇ}^ôÎQ*àúõkDå«dÒ ¨µñ2˜Žq…%ÀÊ%J ”’H%Q(ïÓ!\%ÿô3 |CF¿{ÎáÑ!‡''¨V…’ ˆÊ5V6¯±3J12¢´¿ÏÉé E¡Ý dL½Zcm½Ã­[;ܺ¾E–iÎê²NZÂæH›£¬E×mc)†œuéöF´ëM²de}“×´»»Ï*)ËO&3<ã4Ÿ#ƒ˜R¥Ngu•ë7nòÚÎ&­rDh &Ã{û‡<Û?&µ®šßÚ¥X¿Œe,cËXÆ2–bý/4úý>ÿ÷ÏÏ~ö3^¼xÁp8äÏþìÏPJ½òg´Öüà?à'?ù OŸ>¥ßïóGôG¼ùæ›ËÑó,.‹ÆhòB aœN˜¤)QXÆXãŒèŒðeâ¥öê©0/äE㳫„úû|Ax± •ŠÓ¯Ë@9aE/J'Ö×ï B¥œñV¬I¤"Rб“S¬6ØBShÇ_.´Æȵ!Í Ò<#OÐi†N3LšSèœÜd6§ÐÅ̰5‰cÂ0$CgX»ðùfŸ{ö'Xã+æ¨ Y–Ñ88;e\¬#¨·±=q)é1+âå–fû*±ÞΪÅ™± ØÏ쥫¬Ôdä”{±ho†±ÿ,Åî‹Í©È æ)ɰÏéÞ.çGû¤7;ÐHÜx””BFeÊ­×ÞˆilÜd8žKËàÅ't÷Ÿðï*ª…%39éà”ý§Ÿð½ïüZÕa¾Æí[×hTr#DD•€ëåæ*Û7ïÐíÑÂ(¡T©R*—©V«$I@ \·¾ Ë2N¸ÿÁOù›¿ý.?ýùGô3*ÂÚÀ'R¦¨À. g¨7õv˜#û§Ì[ñÙ®Klû©æOìFkFƒ=åùî1·®_£%D( ]HAºäM€«&TbÂéÙ>Ož>æÑÓ]ú£‚¢3Þû´2Õ¤*Œ1Ý3>äýwßg§öUªÍ2òfÀdSk¯p£”ÐÞØ MS„€RœPJJIL–xøÉ|ïÇ?#.7ÈŒ¢\oƒr©5°¶}ƒßHîÞ¹íŸðßþÛÿÃÑI³ãœÂh´gÿÚK6 V¬+-VZ„0£±³ àîÙîÌ;ïü˜j­F)‰ê J D‚‘(ÒY¯òVXåÚÍ7R,’¸\¥\«S*' zg<}ö”q¡¹þÚ]¢$¤JOv°ó®&¸PÕ9‡/vyïŸþ‰›×¯Ñ¨~ ¹µB­£”3\Ù¼F\­±~í“T3É Yî€d2a@GÔšuÍ&¥RL ,´˜\Ó;?çɇóý¼Ãý‡ '»8~Ì++Ø?kZrI(IR)³¹½ŠB&“©”Ç,Ïqi`gLöWä)ç¿M>úà²<à ³€í™pzŸ黉¦þB:v»±Ží,¦Ý,Bºî¯á¹×pßÿiœu;3²\dß/và ïÓâÓµ€åôôˆƒƒ=ƒ[„*V¨¨Dse×ßü öêL¤R*’r™J­JgcF«MFœˆ ZÕê¬zØLQshg0ìßWïô˜ÃýœlmP«–"¤ZïpývH©Üæèð˜ÓÓSƒ€÷¯°A@F¨0¤Ro°¶yµ5ÚÍ:JZŠlÂáñ ‡'gôG©3ÏÄÌÆý¿½Þ™þ"$6OIû]^Ò^Yáî›o%eéõ†mAFDI…J¥ÆúJ‡Õ6ÍztÊñÁg½!I¹Êêê*å$!’z›[Œµ ~|L:ÉÆ Ç9-|úÀøki’¦‚EbšêݵM'cNŽyüø1µø6ªR" cªÍ€íë7 Keš«k‘g™O2ÄD¥*µJ…Õ•k-Bexqr‚P QG!ÖX“#„v&ÓÂ:«™ ìïíñ¸Õ¦ÓlS)‡”jM¶w$qÑYYáìì”Á`HšNæÞBþ3…q…r­I«ÕâÚæ:«í:IÒhºÝ.Ï_ìñlÿÌJÿd²ë—±Œe,cËXÆR¬ÿ…Åûï¿ÏŸÿùŸÓï÷½(¤¨ÕjWŠxÓ8>>æOÿôOyþüùLì©V«DQ´9ÿAÃ.ˆçÆÎi¾£ñ„ñ$¥Q«NÝ<^ãEzq¥ø/f¦]‹ÂüK¢½ÿãÿmZ%éÚ°ÅŒ>õ“Ò•4Öu[;ãv‡J!ã¢$‰DHª&è,'KSŠ,ÇS8†«ÕŽójŒ³óRR ¤$PÒØ"PVJ Q’$ A:‘Æ¿÷©ð}q>yF‰˜²ƒçÌä,ËèözôÓ A©DµÙ¢RŸÏG±Pº:GÍ•3éTˆF ´ À\`2ZÃô†Û ¾ â¾ïŒ>q3­Ê3Æ:д:õ—€¬þ˜igU¹†É°ÏñÞ3ž?¾ÏéÍ56š%¢jìÞ– ¡BPm…TZ«H!H¤á¸lXé´‰EIrSPäC§¼ÿîhVKÙ£ ^»µA%N “¨Ð KT›®yÖ¿R )Õ Ÿâ„^7sƽûû¼ÿÞ{üÕÿ÷?øÁ~ÌóýcPå˜NvŽP %°Èiu½õ•߯y"̧Wk/Wˆ™ÓŸ]è‰ÏÒŒÝç»awÿˆaZ EB!­¯R÷ dàDã>GO>æ'ßÿ÷¶ª”¾t‹ Y%P¾ƒC)dœ’R­F(£É&cúë ¬œ IDAT½sž~@ {“•Vƒ8®ÐYݦR©Óé¬2 H' È ˆã˜jµF£Ñ \*H»¼xÎýûóñýûœ÷dÚwÛPaàA:_Xõ}"ÔZŒ•g{Å+ö†Ë{ÈUæöLH&ãgÇGìÐL¶)UËTkabˆ…0&£1§'gô{#ŠÜ8ÌÌBfTxøÓL–¢sv²ÏÓ'h·ªt:5*値ÔàÆ»T«m¶ÏÎ †…AJE'Îü¸R&Q‚|2âÅ‹=ž=~Êù0¥ÙY£?P«×˜¤Ú`çækT›Múçgô{}=xÌîþ “Q޵Ó$Õô}9Óú‘ÒÜÆú%P;så<¥{rÌã‡XkV`µC³^#IJtVW)U«¬®o°u­‹. „PDaL\®‚R$DÎáá ž>?¤Tn²¾¾êË&ýs˜n°Xt–r|¸Ïý8¡Óì°±±B³V¢Z¯S*Å´W:ôû}FÑvc6Ž Š .%e¢(¤YŽ©D&3öÙÝ}ÎÓç/8<é’9ó™YÆ2–±Œe,cËXŠõ¿€øä“Oø“?ù´Ö¼ýöÛüîïþ.·nÝúÔŸé÷ûüñÿ1'''ܽ{—ßÿýßç­·ÞúÔ*üeü{w€ÓF“çš0ŠØ¢0 #Æ£ R(_8­’š£°ç‡AÏâ]0™\ _2;õ/`¬!Ê ÛÆ }óµ±m ¹ÎAk/æI kÉ­!Bb€4Ï]Ss8s1Ÿ” £iA … 4y£Âˆápˆ´)ETJr€•í‘EH,g…T‹'Ù3}*´J!±Â,\1C˜XßîŽ_Æ 4SÎïT(ꥳsžçŽ[(ךí s¥• \÷‹1#] cjv[hÑzžL¸|ͯ/|FD;a!ݽ(Ò i¡Ð†"Ï'€u–{¯òÒÅù ö Q¤CNöŸñî;ßåÆzƒ•f…$Ùr¦Â‰ƒ9!¬Ñhaô„8)&% `˜f"DÉô'|ÿï¿Ãþþû»/ø¯¿û[¼q÷ñZ …!×nüGb’NÀ‚Ð5TàÓ&Çä)Ÿ¼ÿO|ï{ßão¾ów|÷‡?¡?º^ëêõ„•n”{4“ô¢¬Õ¡´D“6tê»?òbv=f"@_ðzÏP8Sä z]ž?}ÂÉñëðú&2ED(iF#ŒÅêŒt8àñÃû<{¶ËYo@†rf±Â­SÜj0V»%'œ=䛳V”ƒÿ“úWîG01Ú%þü ¦Ý ¡œŸŸòà“ùÑÈ_ÿÏ¿áçOioŽh¯ïðÆ—¿L£^!ŽŒòõÇr:s´±hcms¬Î RI"l€P!B…Ž+ì=%,…Í tÆÙáï|ÿûAֿɵ­Mª%‡â²(o¦É¬ “!‹ ƒ³C>~ÿþú¯þŽ}“·¾•ùä—¿K•“Q×#a¤r~BH¿æå3áx—|÷ïÈÆczg=¾ýíoðÖ[wˆC(t¢0¦ðh pI £-ÖjBßµ¡µ&8ØßçŸþñ]Þyçüäòèá#z§}òL£P—:[¾Ð¼]°î°Â%ÿ¬u© 5C†9ñ±½Ò¡ÍÊ…5jºþÊOqǶ%I‚6Ú£"N‰’Øxû·Ê'Eæ,}cœ±º5k„KTO÷)]`òŒB;!OøuÏM%q ï6eYY®Ódš8uN‰%%R¸dÖ:Ë–C)÷ýkYc1¦pã9ƒÃý=~ö³¢G„Û›ÔªBÕzÛwÃeÄQD .2†£sŽö÷yðñ>~xÊö5K­±Jjän§UR"=–é…ja@çîí’¦)Ùx̯¿ÎÆÆq­B%l”K¬ol8Ô†â}æw_z¼±‚,Óëp|´Ë£‡÷yþü9Ç'gŒÓ“iŸÿ•¯•j½5Æíg¸dV‘XEñž6/a@.X#ÏäçMž¹ÿñ‡sz~Ê[o¼Éæú:ÕrfT¦ÙXñÞî:Iå?¾ËCIÉs½OÜçþƒOxôø1'ggÚ‰­nÏè4CH·O#|gˆrÂ|žjtQ€€ PJ¸j|sWúWd0„Å¥ æÉ*ŒÆäFÃÇG‡ì¬µiTJDQˆ À&éˆÁ`Èáá ½Þ¼°³ßeg¯5eÖ ¬÷Béžîóàã ¼õÖ—‰ãut ˆKe6¶¬­ç“åcB%ƒ©:ËuÏ9<ÞãýŸ¾Ëîá9£(¬äää„F«C%*¢½²ÊÊJ k &ã1“ñ˜ÓnŸî8¡1¶@JK)”0B ¾(djk1ß§ÈRÆýsö÷?_2¹}yó&åR‰0 iF­V‹íííÙó•õæÏE‘2³¿¿Ë~̳½ë›71V“eJ¡uþP2ô? œ™V)Ò,coï?úÉO¸÷ú®_[c}¥A¤ Ùj±º¶æ ;˜?w»)*ɵ¤0t,& Sz½3>úð>üèv÷gÆ5‡qüÌ™d—’þ2–±Œe,cËXŠõ_(Š¢à/þâ/ÐZó‡ø‡¼ýöÛŸëçþò/ÿ’““Þ~ûmþàþàS+ð—ñ(¬ãÕk­É³œTIìÿÏÞ»ýX’Üõ¾Ÿ_Df®K­ªê®¾Îôxì{¶Æ6$Œð´-#xE²Ä£%@2B‚'žùü€d¿€Ä«å$ÎÆûÇûl¶±=c3žé{W×½Ö=3ãr"2×ZUÕ·™éžñ8¾RM÷T¯•+32"rÅ÷÷ï×9Æã)óÙg]0»àæOª,e5̲](,ülO*"PQýI“ê}«6u„Ì-ãµ…š°ÀÕQ¡¬¼ º-hEÞée¶2Ôeq¬…LÅW‡5½ðQ‚äZy2ÿ„ÅOPû»VéÚ0Âå0È6ÏÐ-®ßZÿ íÐétèõzQ©¿ºø þ®J©°sàd{i /Õª1•Ž6AKçuYÿ@b-*FµVX+Xc¨ mÏÛXƒ=¡ò~úpK´H(zP™íÞâ'ÿéù¹bt°Çg?û‹¼øÑØÜXg­ß¥È4¦žSÎgÌ'#&G{\ÿñøÁOÞäpZQ‰ŠþסÆãý]Þ®-“á˜[oÿ”_ü?^á•O|Œž»Äù­óœ;wŽõZ›¼£,KÆã1“é”ãîܹÍ[?}ƒÿúñ«üäõóÓ·o0Ï¢R–¸±Þ/vA =µ))ç3ÊrÆtî¨ t# ]ds¥¨kü218¸¹‘$|loÙÆ[ÞPÍGܺñwï|вü4½N°*h2“·+SFGCn߼ͽû»g¤UH.8ÜÆò ÷O]Ù¿{ÿù?þOÆÇC>ûKŸå~ñ®\½Ä¹óÁRF« S—Ìç3†‡ûÜxë§¼ùúyýÇ?â‡?ø!o\¿Íh.Ìëüë¿þ Ý"c÷×~•O¾òq._Ø¢[äˆ÷LÊ åñ.·^ãúÝ»LæsÀ‘ièB·Ðh½4BEaj¡ª…yå™—•(kq–¼ËD8‹¯J~ô¿þ?ÜlÊέ›|æ3¿È'^~‰‹·X Xëu°Àt6áx´Ïèx;oþ„7^{•þèÇ|ÿµ·™»œÎà<ãÑ-–\‡³é­3ò¢‹ÊŠ`ÙÓìrifoðõ„éžåûÿï¿3òãŸü€W^ù/¾p•ž»ÂåKÙ*ËE‹oÉ%9±]K=ªÈH´ðʲ Œò,ì‚Â7Êé&‹›H8‡@Ä…VÖY¬s8Î ,’uÐE°> ó·m ȺªC^‰6ãÎÈølEÅ!ÌÔZÃd:¦,gX[#Ò%Ë *c©jìšœ ÏY¯bP¯RL¦Þ~û&Î /¾ø®^¹Ì ßçÜú€n§@k…ÖuU3ž™Œ‡LFÇܹû6·îÜæÎö!ÃcÏ…‹3j[aœ¡“+È ¼Ê1^cE°âWB5½­™yóõ×™Ç\¹t‰K·¸°uŽ¢“S9¢ Èòöû1¶-$O§3ööö ÙÛ»ÃÞÞ]vwî3ž–Lg%µuÑúíavBO¡¬4Y^çy|V;”Î Ö9jk0Ö†Xüé vTëî$²¹Îbç3Ƈûܸž1ŸÍ¸|éW/]âùKèdNFQääy†(G]WL§SÆ“ÕlÆñÁ;»Ü¿·Í½û÷Ø?<`^UøvÉâÚïWÍÄLh%غ¦.+Ö² UtðÎ3ŸÏãNÀdО Ýî€i’½£žÏ¹sû&ŸüøGpœÃøðÈ;šùÔ²w°ÏÎîãÉ gA‡>ªb‹ÿ‰¡lª’ým^}Õ1—¼ô±yþÊEzÝ"´W®È²0TuÅx|Ìd:àðùk 6Ö7èõz+S_U×ìrt|ÀÎý[ܾý6wîÜÃú/]F‰ ß¿¼Á¡èô×È:YPò[‡­K¼À0/kîÌJ\=ãpÿW/g0èrþÜy66Öé÷z(­ã¼¨¬¡®=³iÉx4d´¿Íäø€áá>wïÞæÞö£iBÅEÅoµ)b6!!!!!!!‘õï9¾ûÝï²»»Ëç>÷¹Ç&ê÷÷÷ù÷ÿw.^¼ÈýÑ%¢þç¯÷¬·Ö`Œç™N§L¦Sjk(Š|áwÞòr~…Ì–¦Ë>ë‹ÿ®úi+QhÝøÿ‚s ¤z+‹»°•×¥³s#a[µ´–A•Ÿe!, §ñ¢‚*ÒY”sH–ᬠ¾ôuÁax­< v$Þaq+A¹ÍI8ˆ›&Œ—hÕCk€¶ô·†Š¥èõ:ô×ÖÈ‹âY¿hœJ…À>iÔŠM‘Cm¹`í-œwg/²„%ÕÜâžµ¾õ™F¹ Ð¯MI1&(÷›BÀÊ2tùϧSIŠn·4‰¹Î”înóêþ“ÙdÄíÛ7yñÅçÙ:Žõ>\S—3ÊÙ”ÙtÌèè[o¿ÉOÞ¾ÃÔéàÍÉ!ñ!ÀÍ–sFG‡”µa¼¿ÃýoñÆ«W¹öüe._½Ì… [lllÐëv‘¸€.Ë’ÑhÄd6eÿ`Ÿ;·oòö[?e÷þ6ûŒF#¼剪ú°½a7‰¥®JŽŽxýõŸðýß^¿¸AOj WÑÁ0:8à×ß`wgé¬ ¤ÞŠõqYª†l0ørÌÝ›oð¿¾÷ÿ°ÑWœÛÌÁÄ;² ¼µˆÃlÈt÷?øß¯²»{€uÑš Z_è&iƒ1ƒ YùQM7ßz[×ܻ뷮óüóWØ:¿N¿×!ÓPW%³É˜Ã½]n¾ý·n¼Í­›7¸}û6ÇÓK‡Ús÷ú[|çßr&ÇÜøé\¹´E¿Óg)§cÆÛìß}ƒý×› ç(E]M¹þæOø×ÿùOœ?·Fá  ñx[òƯóÓŸÞb2«±N-Õ M®ï,Ô%Ç;Û¼nkæ£cîß¾ÁÛÿ8—.^dcs^¯‹³†ÙlÈp¼Ïðh›oý×úSnÞ¼Ãöκ·É;7øÞ÷¾Ã|¼Çf¯Kn-â¦h]qãÆ›üø'ÿÅÑш²2!P8‡òqg€õïÝã× û÷øé››¼xí /<…ç._äÜÖyŠÎJ(Ñh‚ÅYCUΘŒ"Y¿»Ãö½mnߺÃáÁA°çšN‚Ê}ÆÎ™åɘw@Ü{|U1<:äöíÛdvޏ ÝØ>AÖ/ÏS,2Çñ¤u†÷SWÌËãñxQ$Æa­a<qoûY.ô³ 3=â`w›Ý½]f³'g6c-ãáׯ30è@Oæ\¿q㣰Kê,R4%ˆÒx'[1sïÔܺu{q,ïƒÝŽÒA‰ÛˆüëŠÑÑ7,ŒGîßßescÍÁZPÛgŠL ÎTÌgS&£!£Ñ;;wØ?8àx\bLÎx´Ï½»×ɵ¡“ õtŸ»÷÷Í,µWAñìÕJ¸®©JŽöw1óÇ{»ì_ØâÂ…óEF^¾È2Š¢ÊîÚ`L1–étÎÁÁ“ñ1ãûŒ†Œ&#j¯hòƒE$§ŸôX?Ù ÞÓ/;¡?ŒÆÜ¹s¡fÐWdõˆáþ÷¶·aïÎòîsh°KjB8còº³Ô³ G;Û̧Žö÷8ÜÝáèÊE:™¢“çKd=S1NG”Ó)ÃÃ#÷‡Œ&cfU2 ¼Z|jÞÑ_Ê9ÇðxÈ­[·p¦¢'±s¶ïÜex<Œ…õxÏiß,‚ Ž´é×SÏÙÛÝæÍ7^g2: “…]*™†éð˜[×ßæàè˜ye¢…׺n¥¦»R4 Ï¿j>åpwæÓ)G‡éu3:EFž ™öغĚŠj> dóÑ!û{ )gã§<ÓÉ”[·nâ½çø`—­Íu2åñTTåŒñpÄýû÷¨Êà±Õœ»wo£¨8Üé’S1ísx4¤v9β X¼×¾ÆxÇè°„º¤šŽì³¹±¿'¬’õe]sp|ÌÑñ»{÷ØÝ¹ÇèhHÞÙà`o›7_ÿë¼+™Ž8ØÙff\Pø»°ë_žg˜Usîß6ÌÆì X[ërns“õõuz½^ØiÚÄe4…ã)g%ãááþ}FLJLFC†Ã!“éŒÚ‚—¬ÍPE•'­žd2™|¨÷î}ík_ã{ßûñÁþþ>ÿñÿÁññ1çÎã—ù—ùßøS$á·¿ýmþîïþŽßÿýßç•W^áßþíߨÞÞ¦ßïó‰O|‚ßþíߦßï¨;Æýû÷ùÄ+ŸþùJèu;ôzA™xqë<ŸüoŸàW~ù3\<ž\‡=‰Š+¥|+¤W*‹^à {Ij|Ô&¡‘`Y£T«ì7ÎBÞY¬7xˆøèôDèeŠn¦Ð>’ƒ Yï ÐY°Öq‚5–j^QÎKª²b83™M™ÌfLfS,‚qŽÊÔTÖâÄc¬¡¶õ)Á²s޼ÈɳçU]£ðÁ^è½KØ¥PÖÑ–Æ„`ÛÚXŽÆcjïœßäåO~’KW®Ð È‹ÎbUçâ?xÔŠVqáµh;·¤žwÖ1/çTUE]×TU…µ¶µÍY†µŽª v6Æõ qwÞc£šÏ9<qp0äèpLU{æóY°C0æ÷H·´È—°E_kDiœT^ÐíõÙØ°±±ÆÆz?(ëµ`ª[WÔuÅ|>g<™°xÌÑp‚k<ð½Eœ‰6]T†öe­Wpîü:çÖY èôzäyAUU˜¸c¢ªjªºf2s<<äèðïlë9Ù.õå”Ç{…Êr¬©!ïÒY?Ç…k/rþâyz9t¨ä U—ÌÇ#ŽŽÙÙ?âàhHi ¢‚­G±p?MàŸ¹M]4dºSpéÊe^xáyúýÆÌñ®FkÖ"¶$«ædó)·¯ßàpT2³`D¨}‰ÇÁµÆ&žÆk½) „¢ˆ±Ž¬Ó§¿±ÉÖÅKQýWÐÉ™ò˜º¦œÏ˜ŽÇŒŽÇL'Sæó9ViÐá¾ 4Y·ÃåK—Ø:·A¿[Ð+ Ä;ªù”Éð€Éhã£cFÓš¹ï‘uú\¾z™«Ï]¤×ë ¬¥E‘å(<‡GGloo³½½ƒµk’T-Ó ´÷J„¢Ûasó.\á½.:˱¦¤®gÔfÊ|:æèø€ápÄl:ÃÖÝé3¸p‘ËϽÀ…sçée¹w(;Ç1g8<`owŸ{ww)ËàÝ®³ S;„,X;‰¦²Ut,C)ÅÆF—ÍA‡A—Á` /yTh‡B(>¨¤MUáMÍl2f23ŽÆÓø—k´Î‚²t…ä‹…¾0ëyðfŽÆ.¦ÝE"ÑLr §wn‹õs›lö4¾»š 9«§¬–òäDy¹¸ÙØ›8oÙݽÏx®-ßtçÙ8‘Áú™ãªåtÄÎöµOUÌ$Ge^—ÍÍ5ú]E¡ ¹2 9Ž9šÖˆÊñ¢ÛB˜,kR%X9Ñy¯ÇÆÆ&½nAžC‘Ãèè€ÙxÊlR1Ÿ×dYÑ9‡±UkHÔ) :ý.ƒµ>…VäZ‘kAkA‰ÃÖå|Æl6a>ŸDÕ¾à$£?Ø ×_ ýUq³éˆÃ£C*SG޾)¼ÅÐ]TÌy±E‡þÚ€µµ~ø¼h㢲,Êz‹þSæåœºžc«1ÖÌü©²`ƒGÅËC8ùåUþ vy™ Væ › bQà3  ï­187`°Þ¡“9¤afSfÓûGŒv.**ðq µ9ËiÕ±ß6?"dyN¯ßecÐC‰Ù8:k,œêŠª¬0UE9›1ŸOÃN|(Ø£Z;–åbA:¬(:ƒ 6ϱÖï"õ„®†j6æèh?­\ì× ˆŽíçiÂî-‚ ÞåZCÑAç7¬õ r-8[‡ò¬©™'ލ*p.ØxyMðƒ÷3XB˜·‹ß páY9亃>››}²Ì£Uðlo±u ¾):ΙNÆÌçÎ ….ðY+çC˜ø`0`Ðï²ÖÉp¶Â‹ ßf3ªùãµË±.góÊeÖú… ©P¶bwû>;;ûKÞûqgŸÒa,zcM@mQy—µµuÎmž£Ó˱¾*ÿÙŒétJYÖ8cCÎhжm.R¦Éºy‘Ñív(Š‚<ÏZG£¬o¬¹lm©ç%óÙ˜r>£®«/â36[™sÏÊáspBBBBBB‡o¾ñ#®\¹òDï¹þÆyþ#Kd}ƒ¯~õ«òÊ+¯ðÆoœú÷OúÓüÉŸüIüBð·û·|ç;ßyà{.\¸À_þå_²µµ•Èú1úk}ƒ>ÎZ6Ö¼ôÑðÙOŠ}ä#t;Yô§Ž¡yKöô'Éú†¨÷.mV›¬*뵎61´ÕÔ5¥©["¹!ëÅ{šŽ:Zè*EG YÜŽuí¡›ZGû‡) UYSVãÑ”ÑxÌñhÄñð8|ü<‡WBåjªº ¼ÅÒ¢¤®kò,ö:ÎbŒE d:MFBÖ9˜•Á>ÈXOeµ©9ðJsñêU>ñ ŸäÜÖ^åˬBð8U‚ˆFiÃLU«¬olš‚Èl6‹d}P5Öµ‰÷æ1Èz²àá<›Í8Ø?bÿ˜ãá”YYSÎçTu…µî}%ë=±!klK>&x}+¢'¼G°h%14R¨\tŽöͶ·DÖ{¼ïD²^Sˆ'ÃïgL¡CPYFÑéPÎgXÈ8ïCènÃŒ„)Ù¥ñô™¾ ¯ ;ÂñÚë %²ÖE$åZTLðú®_ØF¨¬%è}kî"K$ÒÃÈzPY B”C{8B‡V` ˜šÌzÞƒõ8•S£™Ù­-¢¢ÿ²[&ëY!±%ëô­ñ¶Š„N4¦ˆ»$ªª¦6€ê"YŽø@ú*»h™p–ž²Ùýôp²ÞE²ÞŸ ë³0¾bš‡`Á›²9+µ|Ùzí$YO»3¨5†Š·ÃÅBÎ5†ù TÊ»äÝo&`§ˆ¯©«&Ä:’È‘¬'ηâ ‚1 IDAT"%†ÜUh ÆyJ'¨¼‹kmpN“õYÞÁZlt²,ÜF«,ÞÖ()[—–¢»"‚‡õ4ôÑ@R´)™BªÙ¢B°Ñs56ÎAˆFé •i¬qa·†Öä‚ÇÔ&x·«%Ò»¹¹Ö†ìƒ¢‡k³V¶&­ßúIÿþÅ=qÎR×óp­Þ…g´#EÜÙ$ˆã™õ¾}­"°Èá9"áTfñói[¼µ¨øšP$Œ)‘¬_öÕoÔÇ‘QY‰ûð qm}SiÏ-~G 986ÚۊҢ⸌!õ,…àÆSp±˜ :(©q]-ˆ7Ô&îñ±_?YïÐñê|´ˆóx-ø,Còñu¶5uÇ Ñx#x—á}ð}w½é½EÅÀä@ÖÇ`u¥ÃsÃçXŠXðrˆ2ˆr‹\$ç°U…"¡nc. ('ÞÅ{¡ÂC!׊"ªºÄacû´Ê@² néöÂçù¥ÂwW¬qmA¼¹⸎ÛQ:d(…owó,åˆ+G‰Ö[¸…E–õh¥È³,ä‰oç6¿$‹iº o?ß»Z-no{mŸlüšÚ?c¦Rؘ‰wcëæKA"ëÞw²þCmƒ3™L8<<BÈìïüÎïð[¿õ[lllðÃþo|ãüèG?âÿñùÒ—¾Ô¾ïÖ­[í{>ûÙÏòð<ÿüóܹs‡¯ýëܾ}›¯ýëüùŸÿyê¥2,/ƒkk¨êŠLgÔÆ0ØÝÛãÚsWÉtTÌ2Õ†¤zGK´‡…¡?û‹|³ˆ8¹—Å‚¿y}Þx;q '–L W ÝçU޲—eM[C@ëp®™Òd™ç:ħ5Ü€÷­7{Ö\ƒ@æƒR±r1¸ÕØà×nµ¯qÞ¡EPâÉóHÞ[^g]P¦,dœÇˬœãÁú:Ï=ÿ<Î_ ëtð>„É%¼Žö6‚ÖY ׳á[/üæÆ5‹­?3òˆ-˾U°RÅ£”Æú ¦u¢)£26øfÃñ,!øRÒƒÎ"ZÞHCn4²qAÈ É…²×FË7¤F³@Ž}G|ktÕ~58ƒ‘Æ»º¡y‚*Ú‡’µ‘ô‹÷ÖÓ»iƒ®ç&M´^¤ôääB7“Îgá¸Þ`ð¨Ö?]–å̶9ë^¬›KÅ'gë†ÀÔf±¸·!|°uhvp¨–Èõ¼À‡0ÂÐ;Õ©ójŒDÅ¿û¨Nu1¨8†î‚oïGacoCì6vSáþi¬1xcÀ›øÚf‡O<–jHçñÆÄþâÚ´@‡¥¶spP¾J‡b]$ÿ|ì#á0ž².C†…ÊZêÏù&}Ð…°\ßì:jvRD"2žO“Sè«ï©‚eøØ^M0cÌßp ¢©co8¿ÆzÃÆþr7¼ »6ÚL"ùØ8g814'ÁÐtÛ8Ÿ·Ù²:¤OÚÓxcXŒ ñïë¥çB¸'^|;ŒN}п{²¾µkh•Ͼ%§„˜€Ã™’jV"¾Ž»špXY9~0\sñc£ÝŽYØ‹!WEZëiB(c0uÕZ•Õë¾%1Cßóíc+$~Þ"“ÓX j›Ú›æýb4KÅTi¾æ†st±àGÌ ð¾ÙQä—ÂãW˜Ûöö…ðâhÔØy9›\Ú:ËÉç½ þ×Qìpˆ“xý‹g˜oŸ[òˆo'x*øÇøn#K¿‰äy;1Û†ào‘,öÿ†]äÐ,ŠIËá³KÅ‚ÖmÆ-îIü b°³ÃÅy3Ì ~©ï"Ѱ±Õóg=Ie¥ïLÛGÅ;Jæ£ð~½Txt)а˜$Ú.°DøZ»øûmÓíõ!q ßǪ…–Zº#!˜¨ÉãXØ ÷$Ø ®ŒíxŸÂ'C‰Ž]Vba¥i¤f,†s®}–ûØÆÎµ~xT+¼-ñ1ÚâCaÁ©X0^îúÛ?çµ,~óxg—椕Ép‰;LÊx¼à-ÔÎb}[y‹ÝjyGQ|þ·ãÅ-ݦ8ÜrŸ;aQ¸<¶=(O¢²Eó®UäC²¿IHHHHHHxöøP“õ£Ñ¨ýûþáòßÿûoÿÿWõW™N§|ãßàŸþéŸøâ¿ØªoÇã1ŸùÌgøÓ?ýÓ–ûØÇ>ÆW¾òþê¯þŠ×^{7nðÑ~4õ¢#¢j»ªk”Òk˜N§2™NÐj"ÏШVIèãÂû%‚äÌeài£c9›½G‰„múñïNtüÆ} )´Þ®XÂøHºoû¨´‚¡,.¼‹"§Ó)èVên]UÔÑ“ÝEKU_*ªa—Ãa}Cj…VÁfB)ÁÚðû`МWÜ›ÍgŒ&zƒuÎ_¸À… è÷×p¼LçU·ÆÇÝ J(:¼oœð½w­ÂÎY·i´¶U™µkþxzÉWANŒY¿L|u»‰¥Ø—èÇÑМ{Cþ.±M 9¿èK*|ˆéE÷‰Š¾†jŠ-nAµu«6Ka‰|õKU$t;h ýæZ]“ÿÐ6x£§ jû >•òK–ØkiÉLÎ(šéçì[Âná}½4WÊÒ¬)¡€±\ô\¾Ë}N¾Ê-£¾,GW¸åŽ!¡Ój—ÛáäO‘åáíÙñÂé¸X€9ý:ÿÀ#ÈãN Km»x­èŸc@8ÞàM£múŠ?1~}$ÇW'NO¦nB¶½œ`‚%ì$‘¥bªwËÖ)¬šw7¤¾÷‘ØáÏÞ¹ÕqƒGĶ÷Û/OÅKžù~iFÑ«3öÊsÙ/ùù/Ï×ÂYhïí©[+'&zï—Ÿ;Ëd¡¬Ú'­ÁËååw„ðèן¾¬¦¶Dô7ç#º%R¥í›«ó³,ÏyËM+Ët¢`*rú´s€,}’•Xˆe¢úìñÐü¿C4å>ßä[´Ç“3=ãOjñ ù7ñ—ÈòvgAœ§¼û¢`Ú†s²]du,øÅ3Yš¾ÝL¾þdAÇ‚‘´ßc…á”0@BaØ-(¤ÍVaÑn"q'ÔbÞô¾)ʼn¿S'䡤 ,ÛxùÓEõXrg™GoïàIë5V»™,5ýr?’x¾§Þè0F–í÷›es/—ú\Ê,KHHHHHHHdýSÀl¶Fçyξð…Sÿþë¿þëüÃ?ü“É„ëׯóòË/0Nøâ¿xê‹Ú•+WøÔ§>Å«¯¾Ê«¯¾šÈú1‚RÛb2Cæ„yU2s4Òé?ÌV µ²÷ SÎbpõ™kÆÖVŽÒWf±ˆï”@A…|á½’%¡ ÃI c•¨új¶£«àùZEXlÚ ž·Þañ8qÁË}ÉÎG©hG£T((hÝn÷oÉtçZe«jS3͘ÎJ.\yŽ /2X_Gk^k-óé Ñ Q:’õ ¯„œ­ƒò½!?BŽ]X„¶™Ë$ÕÃ8Œès»X@«¸(÷QAé˜ÍæÌ£©u>ì(pî„ Ü?fžëõWˆ¢“ohH&QˬV»½ÿÌ5íI’EV «³É–‡QKÚÉ…o$½÷+OC¥.ø™Hä.ùaûS-!OÖš~Q¸h·Ë·jÊ”Nô!h1– öÒ·ÑÉK<‹#ðõNh_¿D CëþïýYí ¬qN²‹sóËDÙÒn¿BV}=' ;Å»?Aª¸Ç'¨«¥ß*–í>Ä—ç²D®´=ƒð’÷9c ,ˆ=tœË#G°¬XÄ,μ%EOt yôàȹ4»‘NþÖ8ŒjÉÛÕ1º0N91„›œ$deQ€;köòþŒb¦¬’­ ‘Øí»¥™ÜÒ¡äñÇ'¯Ö·¤ôcN´ò8³ðÃúÀÏ…•_«3æo9ñ'ï䦿ƒ§Ê’Â{eF”3o“œºž“y œV3Ÿ9ÞücŸá¢Å ¬þ¬~ÛNíþ1›Ò¯NPg<çürç\Ä¿¯É^çàðûÛÛ¡ÔxBk“ònÐøÛ.T¶a±¢´ AEž“g:ËPºñqW(­A…P1c=Um˜ÎKʲ¢ª µuáÏÚR[‡Œ7A‘—g:×äEŽÎÆ[ʺ¤ªKLôEuÖâ­ !·J¡£‡¼Î2´ ~ÐAIo[•{£¬·&ø[çØØÜàÊsW¹òÜUÖ77‚çv\à¯þ„v©kCUUíOs?¬µáÜL°å d½kI'°-Ùó é¯mq‘Viﬣª*†£³Ù,Ø5mà—íÜ ²ãi.…'%¤å‰—Ç^$?è|äÝ^²ôue ±ÚâòÄmÔ¦þA´ïìžú%*öá·û¼ÅÖþ§‰°ÓáÁç¸rFòt{¸‡Çh¯wk%u‘ôDcïa÷ë1ÚÚC=ÀoüŒ^,þÄÿó^еþ zº?ÑOÖ?WeN2“ž÷ì^¿wmóÎzîÊÏÉçÂÊÿ»';Ö3y¶<ÞžÕwÞ]ë?Þ´÷ô¾6cPü#Û[ï¡zö‹N©ÉϾŸ'SNrãû8'êg=KüY³Ë;xNqB©þtFž¼ë±˜ð³µ²~0P–eÄÌóS¯i~רr›÷´v8§-ÿËïIøp¢U×kC­eU³pÄóÓ›µ ù]ji÷ñòÒáA {ÿ{–Æ?ýÄ{•zQ*ø2/Ù_Hc×! ×±‡wgÁjM‘i²h‹#Þá|´ÈQ§ÀëÔ§D#&-˜Êa¼Ã¡q6âÖ:œ÷Ñž'‰i´¬êxk] ì]øÓÔ–ym©jCÑ)¸öâ‹\»vóç·è]Ê:xß‹(:ÝnPíÇb„ˆ´šv©P ÿ¯_õ­?kÑ/Xu‡¶Vˆ,|Á‰Ec,Ó霪ª±Æ`LôQgá1MãýþL ïòUOF|ùÇ9Ö{æåúp¢þÑï•wÜNþA {yz÷è…‡O:VÈÓîßòÛVžÒy½3œú?tÌùÓ·É?…æ-·§MèŸÞ½zßFÝãv×3,;Ù;žú ¯WžÚx”÷éšä1ƈ<` µÖeò„Ç÷˜N*ðÏÞ’tÆ,ãÏH¹ðœðozàFÏ>w;_Èd|'û›„„„„„„„÷jeýÖÖý~€ëׯŸùšFQáÂ…öwrþAïiõËïIøð¢ L5–º2qxtÄd2Á9¿°kaYÛã—tM~åÿ›ß¹6$‘U› –üGEÃÖ–—/²ø‘ø”ãUŽCS[Om<¥±ñÇÅ? µ5ïƒ:K ªÈ Wx-xNÅa¬Å˜ omˆ|Ô*(û•B+‰? ‰ö9¦ä¶µ®µÁ±ÖQ›š,ϸxñ"ÿøÇ¹rå ýþZëíœG”¢×ëÓë¯Ñ?kƒý^­4um˜ÍæC×–}飥Oöç—¶¦‹„]jåGµíª”Fé,¼F)ªÊ0O˜Ïçm¸Û á—ýÁ‡<ƒc½ËÏX³l]Xä ÎIÞ‡6}—ŸéŸþYË{~ÿ?È}ó 'ÏúÜÎîB§4 O ¨–¯Øny"õëÃ_»øWyhÿ~àxy‡ygžÑ“Üò³æëêðx¦Ï–^õM¯ÊKÀìy€Õ•¬.s使3„üY§ó>jå#ŸZåìq.5Ÿ<ÉsQžáPJ„{BBBBBBÂÏ.>ÔÊz­5¿ôK¿Äw¾óþùŸÿ™W^yeåß_}õUŽéõz¼ôÒKíïåW~…üàüË¿ü _øÂVìp&“ ßÿþ÷ø…_ø…Ôƒ>ÔþÁ!TÕa£® ÇÇÇììì°¹±ÎÖùóhOx·Ÿ ^Û'7û VÈx-uÚ]Ô1DV")o½‡†·£ ŠpÆG)jïqUÎ㫚…’èí%x±{‡W :ÞÇkô†ÉzƒõAÍžgšB²p¾"ûûðÙÎYŒ©©«*d`ÚEØm³ess“½ô/½ôy·¡¬jœ J/åEÎò@žg* íÚXªªÆT5EÑ ¶?,Tõ‚àp8G¸]"ìµÖdY¶²ž·Îa¬ÞøZȈÓ[1›Í888¤,K”ÒháÜ<úÕ¨W/ò„V8iiCýc[äIˆ³‰ ¦o?Ùþ乩wÙ†É#,ßÉ;™Mž€ÎxÌ&"gÞ¯Vý(ï¾,ÿþA»…¤ j~Ôñ½_Ê.XöB–õ]r;g·<£è•ÏôÖOÞoy`ÆÁéCmÜà ¯Dµ°_Nô~è|€,BXO~æ™ç{v2ûC÷tP¤÷<b|eŒ>³ÇYs¢{Œ™èqs4a]öT®Säoð8ϨÕLWˆ¯Ïì}z8ùGlfZ™k2OŽyïœÙOQð'ÇÍ™}ã!Û¯äY5÷vyqÇé#/ô©öÛ„„„„„„„„÷îý‡ _úÒ—ÐZóÝï~—o~ó›-q¸³³Ãßÿýßð›¿ù›+9Ÿÿüç¹|ù2{{{|ík_kgg³ßøÆ7(Ë’—_~™O|â©ýÀû†ÜµÔ¦f8±³»Çþá!‡uöÁ–7ÕÞ ¹DEeþȪ’Í ž£¢ÑyAÑëÑé¯Ñé÷Ñ^4ÖUö6\ƒµÌëŠY]1¯*ʺ¦¬*æó’YURššÊš`™£dw–gäyN–e(‚eE<ÞÇàUçϼöy9'Ï ®^}Ž¿ü ÝîJé`53ŸSÖ:ËXëõY[[g°6`}}ÀÚZŸN§”ñJ‘7d~´Ç á¸jåGDây=zêÑÁ:ȃ±cjF£1£Ñ˜ºªÁ‡ ËfwÀJpmBBBBBBBBBBBBBBBBBÂ{ŒìÃ~W¯^åË_þ2_ÿú×ùæ7¿É·¿ýmÖ××¹wïÞ{^~ùe¾ô¥/­¼GkÍW¾òþæoþ†ÿüÏÿä«_ý*—.]bww—²,Y__çÿøSïù9d­Uk…L)Æã ±¾¾F·ÓAk9ƒ”J®%¥}£lTó ¢9ü6¼&ü~ñ›“Xõ¬èÐ- 4ŽJ õ|ŽÅãŒÇEŸ{çï0uMmjªº¦ª*êºÆYKm Æ;AEŸ{|ò‘ð×ý×|ë[ßâµ×^ãÞ½{¬¯¯ó¹Ï}Žßû½ßckk+õžŸx+ÁL§3öÙÞ¾Ož_ Šogoí?Ûþ£Q«Æw>*Â5½ˆ {Ùþ<(E^tèõûä 2r<¡öë=•±8gƒW¾5TU‰1†ªªd½óXHt¥59à”#p÷Òn‰nü÷›ÏvÎc#Ù/~±}Û¢5këë¼ðâ‹<÷üótú}Dk¼µ(¥èv»è¼ ßï‡pÙ, >¼ÎyTõŠ ­ÔÙ›‚ò<ÇZÛJc°Æ-¶”/YQ4í윣®-eU1Ž˜NgÁÂr ê>õ O ÙÏË…~üãçÏþìÏžè=.\àË_þrê%?8eÁIiˆ]™•sûö]®\¹|ÚýŸ6¼ÃŸr‘^þ»ˆBiuŠ<ö+©dgXËD`iÌD!J£‹^ŸŽ”³Œóe lðy¡´g-Î:Œ1K?uPÆÇk„@;¼E¹óñ gbOÔ{‡·k,8Ê Y¯‚ýÖ…‹\¾ö<ƒ­s 5óºÂ8K–åôŠE¯KímÔìÎ!NOkó¶Õ§Èú†à÷Þ‘e9y^0 †Ç#Æã Ø%¶^$¨óóc˜—5£É”ª®É² SUTUMUÕ§wLü ºá<̪陫wüö“wqPÿä‡òþgí¦?ú5×õwåôÛå!ï? }Î?…óÏê>>Ëù@äÉÎé]}ÖCás>xPg|Q(=óNÿù±Ïr®{¬iê4£¯ùƒžþñüøÍ*?Ù¾Ï9ÿ asâÅ>æc¼_=Yø]àÝÏëÞ'›Ã„„„„„„„²Ô g/VþîÁ9Km ßëBYÖììrëæ6½Þ€‹ý5¬«ÑJa­ÁšŠÓÑ\ Õ¼RK´^ðNÚPÙåðXN-–<ÎZ¬±ˆÝN—~sç¶ØôÑÎB5'S ” 3MÞëÒÉ2ªºb^uuôÉ÷ˆx´ÖÔU…ñQà(Qx%8q++ÇÔ56úÔ‹÷tó xç˜ÎKœÖYNws“ÿö‹ŸâüóWPýue˜Ö&*æJgäyA§ÓEis…Z™˜©æ%ÎZò,~ùJ£D¯´‰÷ë‚ÝuŽÚ:D ?Ð[[c>/™LgA)ï\¬skc,;;;”ókCXp]–˜ªÂY î,U}ÒÙ¿ó‘õ^.åý{w¨Uk?æ=A!OÐvˆ~Æmð,?Ï¿ýÿ}ÂäwÈ»'ü{0ø§u7ä1»Á³¾÷ïrä}çÂ÷f¦—ÂI¼»›àýS9ìYpÀΑ’ƒ~^Èú„„‡,ådYÇãÝø —óšáј›7ïpþüyÖ×…„±%Áá½cAÔrü¡+!Z®H<¡U/|ïƒÚÝ{Î2:Ý.kƒuÖŠn©K”´’ €T !C‹&Óš J·Ôu=–dÎé ˜t ''>†ãª•óóÞ£lTé{qˆ(Äy<ŽB;È5Ý­ól]»Æå®Q¬­aE¨E<'×¼C·Û£Ûë’0Æ´á°Þû\Ûì°t»BQtb ´Zi8ï=e]c­”þÁNÇ£”bmm@·Û§®kÆ“)ûë˜ÏK†£ûûTUmq ¦6XkñÑ‹_žÆâÿçvd¥óüp]…| OXÞïó’'8˜¤>–Žšf¶§{±ò3݆òA8Šü ]púz–ð3ŒDÖ'$<¢› [÷%a·€© ‚E+íõNdAØŸpðïÉ”Â)ÕLÇ9\m±ÎRt{k=.>+}‰Á¹-,`­ÑítŠÝ¢C‘Áƒ^+\ð"‹á±ÖY¬ áµÖÚ0ae½^"/N ̼÷ˆRÔÆ` Ek£RÞ£3E·TüZç”UÅÁÁ!ãɔãcfÓ9¢Ý‘ÁXб­ž&YŸððÞc­Ck­V £ñˆû;»\ºtÍMœ /¢ÀÛàMï{›³ˆßèp‰á“äð‚ô_0Ô"BQoöõõ ò¼[SWe9ÇÔå,Ê7ç @Z+:EsuPº{w!„ÝúÆ“>žç '.Áå£O|l _á¼Ðét\¹Âs/¼È¥çžÃ]LUŽ<Ëé=úÝ.E^Äó »¬dQOúj_S–%ÖZò<§ßïÓëuɳÓd½ó!hW›šº>üV„, 67³Ù M¯Ûec}ƒµõ Æã1N9>>ZÇÅs‰ÿYŸðÔ‘Èú„„'€0Î’GÏ^k-Îyvww¹sgƒ .°±±ŽˆŠV6Ë‚¤÷ ±jþý,‚¸ùˆ uP™çyŽóÁ*Æ–s¦“ “ñ˜ùl‚ªkr2Ñ(£DÈuA– ‚ÅÖ5uUcATØ àu •uÝÎésPÐõÎ{¬õh•ã¼@ÑáÂå+œ¿x‰þ`ƒ©u(íÉ„*ÛëÓ-ºdÑ£ÞZ?+xà+­ÑZò˜Íf8ëé ú¬6B-ÂÉæQ@–g ‚RyTùu]ãœ'ËrŒ±Œ'c†£ÖÃþÞ>£áS[t¦©«‰~}ížYŸðXˆ*s4ðµ5HÔêJyއ#îÜ½Ïæ¹->öÒGÙÔ´¥T$´Öz¼·dY†"(Ø‘…r]¢?="øS)·Íç{²¼ Ër:.kƒ ºÝZeˆÎ:F£wîÜÅN‡¬:¹$¶ðJFQ¨ŒN–ãsýéÝ"HÖÇ¿úçÒõÎa¥6–Ê8T®È:=ÖÎoqåÚ5çÎ#Yw5y‘¡uF'/èvúh|,XçqQý_úý5¼wL§S©+Ó’üEÑi «E„PTÈD…ˆÃ‰n‹&MáÁZ‡óžé|ÆÁÁ·ïÞáèßšÑ[ IDATøë\hcƒ_½ …ƒÖõÚ'e}BBBBBBBBBBBBBBBBÂÓE"ë ËA³>†Ì‚x!Ï æ³Š½ýÞzûÝ~¥4ƒµ™…ó ëL°ÐÉ„|ˆw $}ô•÷ñ£$þÝ{øÅÿ+­é]úý½^ŸÁ „¦æYލáðà[7oÒÏ„þ… dZ“çÖG²Þ:¼³ˆ-ŠBgcð^>^)dÉï¾AÃY ‚w–ÚP5N,*ïÒß<Ï¥káüå«è~Ÿ @2òrçî=ŠNN§“³¹¹NÑɃՋªÞ÷A¿Ýʆß.HbO§è¢”FÅ0Ù^¯<ï#™Þú±Î[¼žôÆÔ”åS•8kÀ‡€V‚CWh­â±5ZiЪUÓ·d½H{É‹³¢µ²Ö‚Öt{klnmqþâ%ºƒ *ï‚’ß ˆþüH ¬õ(Yž‡‚x¬1 ‡CîܹÃýû÷O&à}Ø9Ðéå9¢Të™îÔ½‘öL¥âÿi¯³YÉöö7nÞâÞ½û”óŠ<‡²¬˜ÏçÁF‡¤¨OHHHHHHHHHHHHHHHHxÈú„„w¿ô7禮©”&Ë3Œ™rgQÐëuA®±¹±N§[ ”BÄ"âYfœ}€‹D›AºÝYÖ!ËrúýEщ„?œôÑO®E¦É”³ U9Ù å{(|TÊë@ê+E¦3²,ÃY‡ÊôYCn—Ân p`GK†ÖÝé°¶±ÉÆÖE6¶¶0ºÀ”%…Ò‚ÇáœH{!Xút»º.³ù”ãñ÷ïßçÆ›ŒFC<°¶¶F¿ß§Ûë’çyð›_."¸“Œ½´;¼ó ^@#”eÍáÑ1¯ýäuÞ~û:GGC¬õXW1›Í)ç%J+•ìéÞ$²>!á q"ÖÇ8TsGQ”eÅÁÁ!o¾ù:/ð(ΩŒ~¿C–iD ˆ‹ä8Á"'ÏP*(Þ3S²¬KžuÉóyQ tFži2¥ãk32­ÐâQª Èsú‚A·`´»Íôüæüz}€àÂÁ{P*£è(²,§Ê«­'à‚?LNío¼E“ÑÉ z›\¾ö".CÞa<-™Î+jkñ"äyޱœ#Ïrúݽ^—n·À{ÏÝ{Gܼy‹»wïq||L]ºý½þ€Áú&ýµµHب,'&¿²89‚×~–eXc¨Å‹·†ª®¹¿»Ëÿþþxë­·9Ø?¤®-¨æ%µ±Á¦Ç§¾ðþ!‘õ O‚¨®½ó T´¤·S“Îzò¬@”ÐíBžy¤µ—Qh•‘çyžSä9y^eJr´ÎÑ: Ê器6-ÒÃ{0Æ "¬­­qéâEülŒ©kFÃÞ=Ñdy, xDk”Ïxç‚:?¯À©à©ï<(vx<ÆBV(t¯Ç¹‹—YߺE‡IY3-+ÊÚà|hƒÊWˆ‡z¼ëàïî}®êÃ1Ea/D?w,mñŠN§Kocƒþ¹óHÑ¡´ŽqU1—8ëC@‡4ݼÈéu»t»]òN޳–éxÂÞÞ»»»ŒÇc¬µEAQtØØØ`ccƒÁ`,Ï£}jÛZDP:L_ zb[(P ë “ÙŒÝ]ÞxãMþë¿ÞdoŸ²¬©£® ¦6±@Á‰] ω¬OHx/ ‹àÕ–°WB^äñÜ%èòÿŸ½;µõ®ï{ÿþ=ÓöpæÁ>ÇÆÆ¦`Ãu°/&7ªe¸í%”ÛJ(©hÓ†¦­ªV©ÚÑ–F’VjŠÔ"$„V )äC± u*»˜Á€§cûØgò™öÙãšžéwÿxöÙœc%{ÛÎû…¶8ÏZÏzÖÚÏÚ^|žïúüŠý †;(Š>E¯ë£ï÷úÌ †›Õ6iLw©ôÖ¯—/zú¤IðIèõ{ìܽ›X¾€éd̹'XϘ_“g¤YNÈRˆíeÓù[¶Ž»Éû$@HhcK›¶ÔDH ä=†;v2·s'éÜiÛ0.+FÓŠé¬"!!Ïr’¬ëñôû }Š^A鯄ååeΟ?¿Ô·EÎ`0`8²cq‘……†Ã¹®g?I!Ù¼#Yèúö¿{.º×Þ¶ÝE‹ÑxÂÉSOpäÈî{àŽŸ<Él6£i¡nÚ®&Ç ^’$I’$IÏ"†õÒYŒ‘º©IÊ@•çôz=¦Ó)§ž8E–†Ã‚;HÓÃÁ½^"/ºšœ‹]ì\ZIàÒéq. î»Þö@–ôz}šùØ·Ÿº*™§¬-gu4b0Qd9Iè.NÖ‡nª>EÑÕUUÅÊê*K–F@ (º  ùù96+pŠ¢ ‰m71qñר}» $ [«ßnž÷YY2O8sæ,>ø ßþö·9qâ$£!IhÚš¶m‰±õU’$I’$IÏ*†õÒÕw§µ›¦¦®+’$ÐÆ–¸ÑpêÔI²ÍJ›á`Ý»úô{²<'ݬz‰1Ò¶-mÓf)IÈIBHºiòtsÊ< I×Ýž„Í>wÈ{ýáIìâöÕå5êªac}¥ ËĺeanŽ^±ÙƒŸ’$! ¡{ iJš&$IJH’ÍÅs[ꦦŒ&M EŸb~žÐï3#0+k&³ŠYÕÐ4±{YNQÝ…ˆ¢›¦ŸL&¬o¬saéçÏc}m¦ièõz,,ÌÓëõ,,,0˜Òë÷ɲ Ú¶»t!¤yJšå[58Ћ¶LWÖxôÑ£ÜwßýÜÿýœ;{ŽÉdBÝ4ĪڬÁ©¶¦ê%I’$I’¤g ÃzéÇ® ‚ÛØRU%1¶¤MFÛÖ¬¬4Ħ!KSмG¿?$Ë ò¼O›½ì!v‹ÈFIFHºE`»iò”$M7;Ü» ü¶TmM»ö4+è z½û®Xe´1fc}ÄÚú˜,‘ºêÑëõÈóœ$‰[ðYH“®OŸ4¡¥«¡NHÈr’þúfêéŒiYS– u‰IJžçôzƒÁ€~¿G–eÌÊ++Ëœ;{ŽsçÎ1›Lº ~~Áp@¯×½¦ápHšg„ж›u=›‹à&éfPŸ¤Ý9JÚ&RÕ ãñ˜ÇçûäÁä䉓”eI]74MCUU”eMÓ4—Uß<õ[Oz7­É‘$I’$IÒ3À°^z:DhÛ¶ ‹›†¬©‰1ïîk×xøáGÙØÛ@ü?àðáC ‡s›‹¼ Y–n‹Íue#‘„Í^û@ÓÔ”eIUN šÄ@žfEŸ^^°{ÿ¬­¬±töÕú ³YEYÌhª è‚ê,Ë6ÕÐ4I7¹ßÝKÈ3²,¥G÷m€:IiÓŒYŒÌ&SÊYM5«i6ƒú¬dýts¡Ø®Ú¦m[Ö×Ö9wögÏže2™0èõ˜››cnnŽùùyŠ¢[T7ߜ†²ªhš†¬èm.²›‘æ)!¤@ FHCÊ´³²²Ê©“§øÚ=_ã‘GáìÙ³Ýy©*ªºÞ êKêºÝ<ÇñÒK’$I’$IÏ$ÃzéÇ® c©šŠ¤m» qº©õ˜LÆ3Nž|‚/~ñËlllðÊŸ|%7ÝtmÛRméEQP×5]Zß)»ì“’êªa:›²¾ºÂúò9úyÎÜpùù„´`Çîýì¿bÄé“'X­QV%“IJšdÀ„a0èo…êMÓФ M ! ¤EŸbaŽ ®êºf\VŒ§%³iE=« j!ƒ4¥‰‘¼(h놦ª™6-ãÉKç—˜MKçÙ¿w?Ãa7u1Ô¡«²I’n1Û¦½tÜ´«ìI³Í Ò$%I2 rþüzðA¾ñÍoòððº²Âl6#ÆHY–[Lêº&Æà¤¼$I’$I’ž• 륫K§µ#±mi7o½ÏÊ’º©™N§TeD&“ëk\sí Øµk½¢ iZ"íæC·Î+l. ›¤ ‘–ªœ1Œ™Mg„yÑUÒÔm$ëõXؽ›‡Ó–c&«XéçÄÐUÉl¾¾4Ú4¥n"´-!úyA6œ§Š-ÍxÌÆdÄòÚZW{SÖĺ%kYmÓPÇHQLÒ1mÓ’$ M[‘ç‹ ‹ôŠ‚þ O¯We]O’$@÷M„º®»¡Ȳœf[ýôIȶÎoYÕŒ7Ö8qâ÷Ýw??ò?ö«««Ìf3ʪ¢*KÆã1MÛ-&ÛMÔû*I’$I’¤g'ÃzéøÑ§°DˆšºaFÙÕ·lvÎ×Mñã'˜NK666XYYáú]LJ$i×1ßMžw‹È†‹Óõ!cKÝ””嬛ÞORÒ,#ÉMl @1°ÿð!ªrÌé¦a¼¼L¬Ò¤&ÎÈC —f´IJ“4´IC²¼ æMH)ëšÉtÖuß/¯)´"Äv¿`#mÓuÄ×MMºþûùùyÒ$¥èõ(òœ4KÉæ…ØõûÇ6R7ífXÏf7Jš$IÞuØeYráÂŽ;Æ}ß¹Ÿ‡zˆÓgΰ¾¶ÚUßÔ]5P9›Q–%lVøÄ‹Ovñ›&÷’$I’$Iz1¬—ž6$ízêc„ºn©ë®7=˺.øH nÆL&Ç9{ö'Nœà¦›nâæ›_Î/} ýAAHIyžnÆÌ ±’Œ@Klš¦&†„¢ßg8? ×ψ±fVÖöº’6DÊ6Rµ0[['oZò²¢NÚ¢ I€$!&)½ùy(zŒ¦3–WWYYYa}y•éúˆ~¯[÷âd| Yž“÷zYNQä 6knÒ,%MRÒ´[÷bp/.ÄÛ¶4MKÓFÚØ-˜’„4OÉònñÝ$d´m¤mVW×xàùêWïá¡‡Ž°¼¼LU–ŒÇcʪ¢®jªª!¶m·hïæô¾$I’$I’ôleX/=ÃêºîzÙ›”ºnȲ”6Ë Ž;Át:åÌ™Ó}ìQ^úÒ—pøª+Ù¹cÇæc+Ò"'Ë6ÿÓ‘@·Hl2—2 ºŸÖª5ꦢWôØ{èI–Sô?ò£ÕUÒ}`m4¦[ò¹„^–Á G“§ŒªŠÑxÂòò–.0›Î˜ëÏ‘$a³c>ISzýy¯O¯ßg0Ð è÷ûd› Æ&¡›nO’„˜h[b„¶m¨ën¿½xtýõiF¯×£m»~yy…ÇOçÈ‘#<ôàC<öØ1VVVhÚ†ØFš¦¡ªë­cu7K~$I’$I’¤g7Ãzi´M»07MJ PäeYrþüe9ãÂòOyF’¦¦eÉÊ…5Ž?Á‘‡ŽpÿC±´´Ä… ˬ¯oP–åf×}Ål6£n*ÚÍ}/NîK’$I’$IφõÒ6é<í~ê4¥mB€ÙlÊÒÒŒ•ÕeÎ;ËÙ³g8ýÄiVW×8tÅ•8°Åd€¤ôsdYFžådYJHSš6nõÎ_ìÍOò‚¹ùyææYܱƒÅ;8ùÈÎ:ÎÚtBzyJ2³œIY²²¶Î…•Æ“)yž“å9!ItA}Þ+èõý½~¢_Yž’dÝ$]P[ñy#uiênÑר•Ô“)YÞ£,KÖVW¸°¼ÌcGç‘#säáGxìØ±.ŒoZš&RÕu]S•%³Ù èBúØ^òd’$I’$IÒs€a½´ÍbŒTUÅd6%k2Ò$tCèIwûêê*y˜»îú_¼úÕ¯æÖ[_Áõ×½^Qå9ƒÁa8OŒu7­ß¶4m@šõH³¼›`È2Ã!ýù9æw̳s÷"™ã¾o}‹º—C¿GÒïSX¸°¼ÂÊÚ:óƒišvÓôiÀ罂þ`@oÐ'Ír²¢ûI6/$iÚMøˆ1p1AošHÓ´´I7’®(¹¥ &¶‘þ Oš%¤Iw!¡(zÌÍÍSô{EAÑëmNÖ„4%D é:ê»×ÐÒÒÄîw‹±û}ÛuÛræ‰'8}æ Oœ>ñcÇ8qâ$§ÏœfmmØFÚº[„v+¤¿dÙ­ ñÒΛ.¤Á°^’$I’$IφõÒ³ÈÅоi’4¡œE²,%Ïs2b1Oxü±Çùöwîãðá«xÑ‹®ç†näàìÞ¹‹áp@¯_Ðë÷H’„&BbLˆ$´±« ÒœÞܬ­3­Æl¬ØXÓV YžÓ„4¥E‘Óë÷»°¾è‘åy÷Ú’Œ&41BšB ÝBºhÚHÕ4̦3f³ŠÑxÌh4bue…|G=ʉ'yâôi Ò¶±[$6¶ÔeM]ÕTuMs1¨ß èãÅIýË‚ù‹Á½a½$I’$I’ž; ë¥g©¦nˆ±¥i#m „’eÝâ¬!1²²¼ÊÚÚ÷Ýw?ŸúÔÿÇ ^ð^ô¢ñ’—¼„›nz);wî$Ïsb’yNÓ4TeÉd4bc}å «¬-¯2ÏHcÆÎù9B/%æd EQÐëõè÷û sdyFH’$ÐõÓ'iF–æ´MCÝ´TUIÛ¶$IÆtV±¼¼ÊéÓ§yøáG¹ï¾ïðÀ°±±Ñ½¾UUS!$´mÃt:£,K꺻€Áf¿‹ÇJ’$I’$éùư^z– !¤Y7¥Þ´ŒÇB[}öiÒM°g@]ïý‰“'YZ¾À½ßº—Ï|v°ÿ~8È5/¸š]»v²sÇ"{vïZªrÄÆÚ –Î3Þ˜Ò´)y1×-›÷EB,y‘uýôE<ß¼/I!@K€mÝÐV-!ÔL&S6F#V×ÖyâôiΜ=Ëé'NsæôYV×VÙXß`<1NiÛxÉïœtá|US–%ålJ{q‚>šÐK’$I’$éù˰^z6‹éÂê‹•/mÛ4]X#duC–¦$Œ'&Ó)X&„À‰“§X\XdÇÎìݳ‡¹aŸÅÅ8Hž§¤ Ð6TUI²$#Ïs†!%Ë Ò˜B“K¨›šdÚ3ꦡ¬Jʲ¤ª7ú£ñ˜å••­¯¬¬²¼²ÂêÊ kkëL§Ú¦[6Fhš–‹Õ7MÓÒluÓW´MóÇ8iÖßH’$I’$é¹Ç°^zë&Ê/¿­mcWCKÓD²ª!Ë3Ò<ß\Œ6%I1FÖV×Y[]çĉ“›vd0è³wï^úýÃ~ŸÁ`@¿×gn8¤W½‚¹Áþ OÑï“æÝt t=òuͬœ1™N™L&Ìf3ÖÖÖ¸páËËË,-_`:›Û–š&Ò¶]•MUU[¿[Ó´[ýô×m›†¶mºß=tSûO‰ß¿o\XV’$I’$IÏI†õÒsÐÅ)ûzsÁÕ²,idY7Ÿe)IHH³¬ë”Âfè=›–œ;wnëBÀÅë#îYH³Œºi˜Í*’$Ht“þlé!$Ý}!P×U5£ íæq’$!I2ªª¢®kªª›šoÛf3 ï¦ë»ŸÍ«±½ä7ížQ’$I’$Iz¾3¬—žãºŠœ–¶m¨šš¦ªÉ²”,ËHëú»aýæþIÒ-Þzq ½[ 6·Âó®–&„„Ä6’$aë8ÐuËw!zKŒ-1B]WÔMµyÌI m[ÊfB]ÕTuE]7ÄÍ úض] i°ùb/7°—$I’$IÒó›a½ô<#]ÈéÂðºÛnêzkbýb=L’$”eª§i²§iúÝ ÷!Ä­à¼@Ûn#nN¿ÇicKlc×3ßÔãÖ¤~š¦Ù¬¸i.™žÃåm6›ýSjlBØ\[ÖÀ^’$I’$IÏ_†õÒó@BzIÐÝuÄ×u³9E1¬¿†Ï!|w Èó‚$IºÛ“‹õ‘ö’°ÿ²Y÷ÍÅo7ŸŽ¦©©›Š¶iiÚv+Ðïž³ûÿï¾Þ„þànù­`_’$I’$IúÀ°^z¹pÇÈVHŸ$é÷Ý7ÆH»™©7Íô»w†ÍI}~øÐü©û…‹ú1 Å»p¬$I’$I’ž¿ ë%O Û/šÿc [Ç"üуöïVîħVãH’$I’$IÏ3‰§@’$I’$I’¤íeX/I’$I’$IÒ63¬—$I’$I’$i›ÙY/éi÷Ã.R+I’$I’$ýIåd½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IÛ,{>ÿrO<ñ·ß~;Gå†n൯}-W\qÅ÷Ü÷öÛoç¾ûîà–[nᵯ}í|LI’$I’$I’~ÏÛÉúååe>ô¡qôèQî¿ÿ~>ô¡1™Lž²ïí·ßÎW¾òVVVXYYá _øŸÿüç¤cJ’$I’$I’ôÃzÞ†õ÷ÝwÓéô²Û¦Ó)÷ßÿSöýÚ×¾ö”Û¾þõ¯ÿHÇ”$I’$I’$é‡eg½$I’$I’$IÛìyÖßrË-ôûýËnë÷ûÜpà OÙ÷§~ê§žrÛÍÙW IDAT7ßü#S’$I’$I’¤Öó6¬ ¼ãïØ Òo¸áÞñŽw0 ž²ïë^÷:^óš×°sçNvîÜÉk^ó^÷º×ýHÇ”$I’$I’$é‡F£Qô4èÉΜ9Ãõ/z™'B’$I’$IÒŸxù6ø#=æ±#÷såU×üÐûÛY/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤m–y ôý4õÈ“ I’$I’$éO¼£G>íÏád½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í2OôܳÑF+–šÈ(FÆDÆfmdJ æC`˜ú!2H`»¸:K™O¼N'I’$I’$=›ÖKÏçÆ)#'HY Ó¦¢N-@ B¸ø¿ ‘YŒØn¥%ŸV$á0peÙ37ðäJ’$I’$IṴ̂^z[]ßà‘³çøìW¿ÆðÚëÙsÕUdsCúi—ÁçÚˆa3¬I$tÛồôY€iÕòÈú˜/=ò(GŸyõÿÅ+_öb熞tI’$I’$iÖKÏBM¹ÿñãüþ§ï`ÏáÜxâ,/9|ƒ4’'R-4!кÉz)i€7 ‹÷9‘-e5£oðÐÑG(«’#OœæÿyÕOò‚½»HBðM$I’$I’žA†õÒ³L#G–W¸ë›°tî{¯¸’PÖ CÂ\HHÚHljbÛRÓRÅ–&FÚÍ`¾m#ÄHVä"±i‰±¡®+Byš‘µPNGLV—©Ë !©™5Sî=qŒQ[ñâ½{ÉÓÔ7C’$I’$Iz†ÖKÏ"ª’£³Ó1IlIÚ–´iHêš…aº¾Áxu|Çù~ŸÅ¹óý>y $ME]×Ìõ{œ:wšñxÄO½ðO1( ß4I’$I’$éi`X/m“ª*¹ûëÿƒ, ìΓ');²œ4d´I$Oò<ZÐKzI $US“æ=²"‡MÓÐŽ¦´ ìŸ["ss ±EFž¦¤YJçFˬ]X¥ž•,f;Yìõ™O 沌´¤›«Õܹ“²$4 œ=ÍW&Iß¼§ÁÑ£GùçÿüŸóÄOðÓ?ýÓü£ôH7¿ÍpçwòÞ÷¾wkß·¾õ­¼ímo`<ó+¿ò+|ãßàúë¯çŸü“Âþýû=¡’$I’$IÏ1†õÒ6ˆ1òð£ßba8 =аA 9»ò>± ”YC¿WPô ˆ- óóô‹œ”®—~0P–5ý~Ÿ,˾Ö× Ä„4Ë€HLrˆ€”jV—VY:wž„”;öppÇn1!+Ò4¥)½4g!ËÙ·°ƒ<ï‘%+£1»æçvØÿØ}ðƒäÑGàóŸÿ<¯zÕ«xÍk^ó¿}Üý¯ÿ•»îº €ï|ç;|ìcãïý½¿ç •$I’$IzŽ1¬—¶Á±c3ÚX%IRzyÊÂ`ÀÆhJ„阪,iÛ–ª®™Íf\}øsý!¡´mCfdIBä¡›t¯c¤njªjJU7 4 dI I $D"uYSU yšsõ¡Ã\uàJ†Ã‚$iIÓ@š&„BB % !B©ÛHžÖÿQ´mËG?úÑ­í}ûöñÆ7¾ñ²}ªªúÛßÏ÷q’$I’$Izv1¬—ža?ú0G>@QtaøtZ±¼ºA’´!²°°@žÏ¸êêÃìØ¹ÀÁƒWÐFÈû}°¾¾Îéc§X[[#!¥9¨ë†²œQN§ìÙ³‡Å;عc'Ã~Ÿ¶´M»õ:Ä+^q+ÇO<Ξ=ûHÓœápH¯—’$ ªÚ6BLèfó!ƆI9…¼ ÏüøøaÅù­ßú­­ín¸á)aým·ÝÆÑ£GYZZâ¯xöÏþÙêØozÓ›øÒ—¾Ä<À¡C‡xË[Þâ —$I’$Iz2m“žAgÏá·?þ[¼äÅŠ^QBBŒ4ÏÙ¹k7««+ÌÍÍ3+g$I`Ï޽ĉ±…¶áÂÊ*ÇŽãܹsìÚµ‹ñƈ$tazÝ4Ì&SÖ×Ö˜Ÿ›'ß‘çÝâu]o¾‚n ¿?pÝu×qÍ5W³wßnÜO¯—AÒÒÆšº® ¡ëÊ'ˆ]X_U§ÏåÂÒ7½ô¥,.,ú¦þ˜Üpà üÞïýeYRüò]\\äýï?³ÙŒ^¯ç‰”$I’$IzŽ2¬—žAûãüÒKË« çæH“Œ,/†4mäôé3ô{+äyAQ¤iB]×$iBÓ4ÔUE–e,..2ڀŅš¦`þŠƒÄ6²wï^(òŒ¶m)«’éxJ–f$iJšeäyNÐ#„ÀÆhÄÉ'–XÛXe:3™Œ™Lf4UC]·”³šªª™•%kk¬¬¬pß·¿Ã/¾ó¾©?f” þRõ’$I’$IÏm†õÒ3diù<ŸxŒ=ûö1\Xd~~$ÍiÛ–IU±òÄaçÂ"ÙbFš¥äyFŒÝTül6£¬Ê­ãÇcv,,°gÏnb‰DvïÞÝ-ÛëwUSÎfŒ7Æœ=s–ºnH’„$ÍÈ‹‚Á GšÖw/²¼zŽ¥¥³¬¯¯1›MiÛH5«¦¬­®³¶¾ÁhÏý÷ßÏüÁpï½÷rþüy8À­·ÞÊÏýÜÏqàÀËöÿÀ>ÀÇ?þñ­íO|âÜqÇ|ò“ŸäÌ™3¼å-oáMozÓ÷¬¥¹ÿþû·ýßø n¼ñFÞ÷¾÷ñÉO~rkŸ_ÿõ_çå/ùÿöüÜyç¼÷½ïÝÚ~ë[ßÊÛÞö¶§ì÷È#ð‰O|‚o|ã,--‘¦)ä'ò'ùÙŸýYvïÞ}ÙþçÎãç~îç¶¶á~7¿ùÍüÎïü_ùÊW8{ö,ƒÁ€›o¾™Ûn»«¯¾ú{¾¾ÑhÄ'>ñ ¾ô¥/qòäIêºfïÞ½ÜrË-üå¿ü—9|øð÷|ÜùóçùÏÿù?s÷Ýwsúôiêºf×®]Üxã¼ñoäÖ[oõCE’$I’$=¯ÖKÏñt•×ÿ߯ƒ4g÷î}¤YNŒóç/pôè£L6F\}ø0 ‹ ‡sôz=²4cÖ–¬¬®2•¬®¯súôΞ=Ãp0`ÇÜ<ý^$I¨«šØ´Œ&š¦¡m[Æ£ÕtFÛ4ll¬qìØ 66F@`07daaŽ[þŸ¸‘^/!IRÚ6’¦»v-2Ïȳ1± ´B$i¶Uó_>õɧ=¬²Ï}îs|õ«_½l!ÕsçÎñð|ë[ßâþÃÈ»Þõ.666¶î_^^æŽ;îà®»îâýï?W^yåeÇüà?Èïþîï>幎?ÎñãǹýöÛyÏ{Þë^õªïûºþÝ¿ûw|ñ‹_ÜÚN’äYó·÷ñœ~ðƒÄ/»ýèÑ£=z”O}êSü³öÏ~`þÀðÎw¾“sçÎmÝVUwÞy'wß}7¿ñ¿Áµ×^{Ùcyä~ù—™¥¥¥Ën?uê§Nⳟý,ï~÷»·.\\ô­o}‹w¿ûÝ—½‡ßç;3;37¼á üƒðžUçY’$I’$éGaX/=ªjB*®¹æjÊ:CÆhÌÁ+3 XX\da~ŽÑósóÏØ¹üŸÿó~ßûŽ=Êßù;g«èÉÖÖÖøð‡?Ì{Þóž­Û>õ©O=%¨/Š‚ªª¶ÂíétʯüʯðÑ~ô)ö]ÔCwa#˲­ §NÚº/ÏsöíÛ·õ\O§Ï~ö³|àøûL&Þóž÷ð›¿ù›\sÍ5ßsŸ»ï¾û>þ7ó7ùÕ_ýÕ­Û–——ùûÿﳺºú}W×5ÿâ_ü ®¾új®»î: [@ùÿã|YP¿wï^z½§NÚzO>ó™Ïpå•Wòó?ÿó~ÀH’$I’¤çÃzéð?þ!;þe£²¦?\ +½{÷ìáÆ—ÞÀÜ`È…óç‰m D–——9{æ,Çãëßü&¯¸õ•8pÉhD]–Üpà ìXXä›ßøeYrÕUW±ÿ>²,ãôéÓœ?žªªØ¹s'y‘cë^õÓö1š¦áõ¯ýÖ>×_=ÿá?ü‡§ýsss8°Ÿ4KhÛ–ØBܬ¾É’œ,Í! lÞN€@¼,ü~º½öµ¯å—~é—¶¶:Ä_ûkmk{0ð¯ÿõ¿f×®]¼ìe/ãž{îáèÑ£lll°²²Â®]»ˆ1òú׿~kZ{×®]ÜrË-ôû}Þþö·o…õGŽù¾¯ëðáü÷½ïÝš6¸ãŽ;F[Ûá/ü~ñqkûå/9ïxÇ;xì±Ç¸÷Þ{yôÑGyá _ø”c]{íµüê¯þêVíÌM7ÝÄ·¾õ-|ðA  ÝOŸ>ÍUW]Åêê*_øÂ¶{ÅWðk¿ök[AþM7ÝÄ… ¶ö¹ûî»Y[[cqq‘3gÎ\ö¼¯~õ«·þ}ã7òæ7¿yëõB7Õ?ý ‘$I’$IÏy†õÒÓìßþ*½á¼è‘¦MÓRUÚÍ0|21™Ì‘§½¢G–¤yΞݻi›†\s- œ>s†õ•U†sô{Ü €Á`ÈÆÆ>üû÷í#ÛœìÎ I’@S—llŒ™Ì¦ìܵ‹;‰±%I¡¬*†sCò"'Ïsò<£m#èfç Í úáâd}@¤m[Ò4}FÎç“kh®¼òJ’¤»À]eÊÅ þ¢Ã‡o…õÐMœïÚµ‹·ÝvÛÖíu]óØc±¼¼Ìl6c2™\vœ'w¨_ê¯ÿõ¿þ¬ ê¾öµ¯]¶ý†7¼á²í$IxÃÞÀûßÿþËó½Âú<¥þê«¯Þ ë/žW€o~ó›—Uýù?ÿç·‚ú‹n½õÖ­°>ÆÈƒ>È­·ÞÊÁƒ/Ûïßü›Ãm·ÝÆOüÄOPãoü ?T$I’$IÒó’a½ô4{ôØc4m ª[Zj)I’’eiš’çE–1?¦)Yš‘ápÈ¡C‡èõz,.Ì“$Ñú:MY²w×.V.,›–CW^ÉÜÜ<±Œ66¨ªŠÑhƒ$bliÛ–¶m¨êšªm¨ÏŸ' ÙlF¤%Ò’åÉVMÀC M³.”IÜÇÍ»6w»¸Ð,qûÎo’$¤iºÖϺìòº'ï{üøq>ò‘ð¥/}‰²,¿ïqž¼@ë¥úýþ³îoïÒž|à{†ðO¾ÀðäÇü Oà/ž×“'O^vûG>ò>ò‘üÀc-//ðš×¼†ßùßÙš°àx×»ÞEžçÜtÓM¼ò•¯äÏý¹?ÇÎ;ýp‘$I’$IÏ+†õÒÓ¨ª+ÖÖ6رc/½~4IiëÈ ?`~až¹á\7?27˜cuu•µõ5B ¤IÆ`0`qq‘S§N‘& ålÊŽÅyvïÜÁ©Ǹþú²±1"Ír’$a­_0ÞXg0PU3ÖÖW'$IÂÂâuÝpaù“É„º®ˆ!rå¡CŒGcꦆÍIúÍþIÿ¾xSò¤»"žÑ*œ§{ï½—w½ë]Ìf³çÝßߥ8EQ|Ï ß÷1\?èßÏÅó?77ÇûÞ÷>Þ÷¾÷]¶˜pUUÜsÏ=ÜsÏ=|øÃæÍo~3·ÝvÛ3öI’$I’¤§›a½ô4ªêŠ7¾ñÿåâ@öòò2_øÜçÉ‹œ^¯·95¿À}û‰;#ÓéŒétJR²´«—Ù½{7GŽ!i›Š^1¤i[ÊéŒ,IYºpž^¯Ï`0dùÂ2§Nœä–[n!IÒ­©ú¦©Y^ºÀt6e}4b2SU%Iš0?7ÇÙÁ€Éô:âæˆ|ï7D¾µa«Ó¾<×ølÛ–õ¯þÕeAý[ßúV~æg~†½{÷2yÓ›Þôœýû»´Ë½,ËË€½èÒÅ\¡ ËTEQ\¶}Ýu×±oß¾ø˜ýû÷oýûÀüËù/yðÁùÃ?üC¾ò•¯püøñ­ûg³¿û»¿Ëd2áïþÝ¿ë$I’$Iz^0¬—žFeÕgÃÍà;Rd3z½9B4Md2™‘&Ã1iV§)ƒbHš&ÄØ2™ÌÈó.Øâä š¦f:žRM+>ÌÊÊ £õ v,îàŠû‰mÃ}ßù6{Œ+bÏžÝìÞ½“µuÎ?OYNÉØ¿o/ƒÁ€¼(سg{졬J6Æcvïì‘g á’Æ›Ð-8K7A¸U%³Ùòì¹5åüàƒrúôé­í?ógþ o{ÛÛž7W\q>úèÖö£>Ê‹_üâËö¹´Ëÿâc~T—ï7ß|3ûoÿí?òq^üâó⿘¿ù7ÿ&çÏŸçsŸûþð‡·úð?ýéOó·þÖßzÊI’$I’¤ç"ÃzéiÔÄ@–ö€.Ò^XØÁ­·¾ò’="y–Ñ+ &Ó1 ¢(˜Í¦ll¬SV ;(§3.œ_b8Ð/úÌf3öïÝËãÇÓ+ zEAY–̦S>ÄîÝ»diBÛúý>»wíb4î1˜ŸŸgïž= çæÌÍCL˜LKªº!†@Ó6Œ¦3zEA !Ä@Œ6FÚ­‘û®×ž»©ÿç`ιsç.Û>|øðeÛëëë?–çyr=ÐêÅÿqºùæ›ùò—¿¼µýéOú²°¾m[þÛûo—=æ–[nù‘Ÿ÷ÉÇøÌg>Ûßüæ§,{üøqî¹çþÒ_úK[·ýüÏÿüÖ7n¾ùfÞýîwÝÂÁå¯ü{ì1î¸ãޭ󏼼ü”‹’$I’$IÏE†õÒÓ)&dYïâÉ pøðÕ—î@š&4uÅ™Nsö̦Ó)³é„ªœQô v,üÿìÝyœuÿñWUß×ôÜ3™Éä¾O’IHHH­+ ¸ ëAQVY× uwuwa]Á]YQE *,·B.Ž$ä¹È$’Iæ¾zúª®ªßÃ̃!×$&Á÷óñàñ`ª¿ÝUý­êoºßýíÏ7;—ÃuÜ®õ\]¿ß‡Çc °-‹Ö–fí”’‹ôûÞ©6ïø ð|˜¯×†A0$‹i …1½>lìw¤5\ÞY`§+¨·]§kÁY ×Ávlü>/_ì”:=………½þ~á…8çœs¨ªªbÛ¶mÜu×]'d?¦izBè]»vñä“ORYYÉÀ?°°yÑ¢E<ðÀ¤R)ž|òI¢Ñ(gŸ}6Ùl–Å‹÷šy?a„ƒœ=eeeÌ™3‡¥K—]uðoºé&®¹æFE.—ã7Þà÷¿ÿ=©TŠh4Ê‚ (//ç7Þॗ^bΜ9Ìž=誅¿}ûöžýø|>âñ¸ÆùHPX/ò2LÞîW™ëbÞP××pÁpñé4X¹uõut´·“N¥H';1 ¿Ç‡‰K0Ä4M\×Åô˜dÒ)BÁ™tŠdg¢kf}*…/Å +Ô7pñ˜&Ócbàñz°r6Žë’Íåp\‡@ Œ× ÉÑÔÒ†ë8xL9Ó}'¬7ÀDZqpq°1Ü®¸>ceèL%ñy½åZaýرc)//ï)…S__Ï 7ÜpØöÝ¡÷ñ9r$›6mºf´ÿ×ýßøÆ7X¸páòüb±ŸûÜçz}éðè£òè£ÔÖçóñå/ù„íû‹_ü"6l µµèZ¯áÇ?þñ!Û>øàƒÌŸ?Ó4ùÿïÿ±nÝ:lÛ&—Ëñío›¢¢"b±µµµ½~•°hÑ"€ùHPX/ò2LÓì*ãº.¦ëÁõtÍww Œ®íñ‚b±®íI&iin¡­¥l—ªÉÏcÛ6¦aâózéèè °¿³“¶Ö6lÇÁ¶mÛ&gY¤SiBáÁ`_0„³ ÄÃa²VŽT:K{[;9Ç%á:’’©4YË"ððø}>¼¦ NŽl¦kÖ¿c[à:¤2´u´â7lø)u~<ßúÖ·øÇüG’ÉäA·G"Çé é›››{_ŸúÔ§øÖ·¾õ¡?Çüã´¶¶òàƒ¶M(â;ßùÎ ™Uß­¸¸˜ýèG|ýë_ïµ.À{ 6ŒþçÆ4M ë ”¯ýëÜqÇ=Á|SSMMM½î7}út¾ð…/h‘ …õ" žòî¼³H«iv1 À¤{aŸ#b IDATqVŸßG4Á4Mü©T’D{&‰Ö60 \×Å5 ¤¤„Õ«VñÖö¸nW™¯×˨Q£Hg2456â÷û …C¤3Y:“œ9s&b˜^ZÛÛ©kj¢µ#A"™bÜ„ÉÄ KhéH²gÕ5{1|&ùùyå†zM¼vŽLg;V6 nÓ´1=~ŸÉ-×ý“Nºˆˆˆˆˆˆˆˆ|äìÚµ‹²²²cºÏî[¨¨ÒçöšY/ò2 ·+¨w\ÇÆ¶sàº]5ëq0Lðx ¢Ñee¥ì{{/¥eeåI¦hin!‹ÍËÓ ££–¶6ZZZ¨¯«#‘Hôì/“L&©¯¯'//Ž„iikçí½oóÆêÕìÝW‹áõÑžHОì$›sÈ+(ÂÎ94Ô7²ko-{ÔÑÖÙ‰×ç#•ì$ÑÞJ^$L<¢(/†ß$ â5l)Ë¢°¸Œp4JCs-­-´¶´`uÉL;ÂNgÀÊaØ.ùñ<"ᘉŽfZö‘ ë„‹ˆˆˆˆˆˆˆˆ'…õ" ;—#gåºjk¿Sî&—³0LÀc`]¥qlÛÆïPXXDqQ éŽ$™D’L&C4%//ŽÇ롽½ÎD'‰öêêêp]—‚B<^‰D‚D"A0¤¤¤„p(D.—#gÛ†IA~±X©áhŒxax½$RJ ÀˆÐ™éZXÖc6N§qLÃuq pmÀõÐÚ–$“…‚“X8@cS‚7×oeXU¥N¸ˆˆˆˆˆˆˆˆÈqRX/ò²sYÒ™ ¦ibšfW0ïØ®Ç0À4q]—\Î&“ÉÉd©P–Ãþ}µàÀÀÊJ¼étŠúºzöíÛKkK ™t‡ÃD¢QÊ\—x<Žãºd2²Ù,~€H,F~¼€Œ•Ò˜¦ƒ®p )).%™ÎPPP@ÕÀ467Ó±§¬íðû1=^ü¦Ÿ` BCS3 M :R6UedrZZSGFuÂEDDDDDDDDŽ“Âz‘òæõ`ÛvÏ"³®ë¾Î[$“Y¬œ…ax¼& uõ$;:°²¡pˆòòr:£QB:™¢­­d2I6ÁÊf)//#gåðx<är9ìwfèg2âñ8>¿ŸL6‹Çë#//N,%“³0<R‹ýê1<^ÆMšLGGi+‡iúÈåQV\B]m-©Î$N6‹íËF°26‰Ž4¶iÐÔÚA~~!±‚†ŽͰa#tÂEDDDDDDDDŽ“Âz‘Ï㡱¾«¤L:Ʋ, «Š ‹™0vŒN¸ˆˆˆˆˆˆˆˆÈqRX/òA¾À¼^JJŠilhÄx§n}OXo€ñNÍy †LÓèšuO–` €×ç%I‘—£´´„üü8U2 b–•% ðy …ÃÄâyDb1|þ®û™/†éÁv\lÀbz}x¼ré ~¿?@ÖŸß& ÒÜÒFs[;¶ã 0 pq ýÄóó((Œc›&ÑH€tkÉd‰T’1Æã÷ûtÂEDDDDDDDDŽ“Âz‘؈áÃH§Ò¦ €ã8¸®®‹ã¸¸®ƒ³1pH§Rà:„ü>"ár¬L†¼xŒà:6………xLۀ‚¼^/áh„P$Œ×ïÇ5L2¹©tšœíôügÙœ•J“³m|¾ŽÓUG? bçÚÚÛijjÄq 2é4©TÓ4É/ˆSZVBAA¦ÏðaƒÈlÛŽãX$Ó)†V–ëD‹ˆˆˆˆˆˆˆˆ¼ ëE>`ƒU±uëÀÅv2é4¹\Wúœeuý¿•ÃÎY¸ŽM*•$Lbg-FŽ?!—ËQTTH{{Ùl† ßOQA!¦Çƒi˜øƒ¼~.HgHe-2ÙË"›Ëaç Ó É’èLâ÷ù€NZš[iOtR6°Š¶ŽZZZ°2YÒ‹öD‰D‚¢âbV d`U‘Xˆ@(@ à§¥¥‘ýu $:L^¥-""""""""ò>(¬ù€E£òã1Þ®ÙK:¦±±‘D"A[[ mím¤R)²™,¹œE4&Nã5ML×eðÀ*ªÄçó1räH::ÚI$.øü>"‘®šöÓƒaX¶M[{;VÎ&Ë‘¶r¦‰×㣭½×…h,†454Q[[KGg’@$J]C#ÁPˆåHt&Éæ,¼^/‘h„ŠÊ””á¸6ÁP¯×¤¨0úúŒ®*#êD‹ˆˆˆˆˆˆˆˆ¼ ëE>åå¥ü×D:¦££Ó4ñz=x<&^¯¿ßO4¥¡þ†aà÷ù±,¯×G¢3A&&à÷c¸.~¯Ó0°s6¦a¾33ßÂq]²9›T:E.çÊåÈX6¦ib†< (¯ à÷ûilh ¹¹_0€ÝÙIKs3%ÅE˜^Í-­ìÝW‹í8TVTPRRŠÏï'gÛ˜@6ÛNgg'ñ¼ùq.]0['XDDDDDDDDä}RX/ò!?~•+xãÕ]µéMƒ¬eâñ˜üLÓ¤µµ +k“ËÙ„‹£Dóâ„"QÂá õÄ"ÂÁ ¦ià:Ùl–lÎ&kY¤3i2Y —üXœýõõd3Á0ñ‚Bb±8¶ --mìÚ]Cg¢“aÇ3tøH¨#??Ÿt&Kgg‚–Öf²Ù,+‰FÃt$X–Å™ê‘ÇÍ7p»^|¦a¸®‹eYdÓi\×Åql:;“´¶¶Ó‘H E(,,Âãñ`årälÛ±q0 Óô`z<øüâñ|òòºþ‹Ç ˆÅòXVŽö¶ö®õ¾…EÅø¼>š›[(,*"“ÉÐØXO[{V6 ¸är9ü?†aÐÑÑÁþýû©¯¯Ç¶m?W³êEDDDDDDDDN…õ"’É“'qñÅa8.¸.¦¦Ñ5K>gYضãØàB*™¢¡¡‘ÆúÀ ¸¸˜H4JÎuèHvÒÑ™À²s€éõà‰D¢„# —p$J8ÃÉZ465ÓØØDCc#íDc1âñ|477ã¸. 8p€DG;¡PŸ×K0À4 ‰d³Yr¹Ã+Ê< L'VDDDDDDDDäP‘Ñ—oý2/ÿå/t$:pÃ0p‡\ÖÁu]\×Áp]ÒÉ$ ¤Ói"á0±¸I:—¥¥½•DGÓ$b˜&¦éÁðxpƒŽ¦fÒV†´•ò;Éd,’É49;‡cƒá1±‡t2A[GùÔÕ ¹¹™d2…mÛx¼B¡EÅE„#\’É$„B!‚~?SGÕ 9AÖ‹|ˆ øî¿ü3_ýò­˜.ุŽMβ0 0À01 ƒ¬eÑÒÑF*›!‹â`É‹“oçhmoçÍ-[x<^ü>?¯×ôàš®a’ÉÙ¤³Y¼^/±Xœˆ/Š?ÄëñÒÜÒL}}É$ÑXœŽDÃ0d펑ÃôzPQI0IJ²¤S),Ë¢¸¸˜s¦L è÷鄊ˆˆˆˆˆˆˆˆœ *ƒ#ò!›7×þýuØ–•Íbçr]³ééªgï–cÓÚ™ ¶¡ž¶T†´ãЙÉb9ÁH„òŒ3š@(Dg:M"¦=™¤±¥™¬ãàz "±(eåå :ŒÑcÆ0vÜxVU‘slZZÛ0=>*«ªp\Óã¡­#A{G‚\¶ëxl;‡‹‹at&:©««£®®ŽYS&0°¤P'RDDDDDDDDäÒÌz‘~pó-_dë›[YùÚ«8¸8˜¸®KÎuIe24·µ³gï>ŠJŠqMÇq±L/áXŒq%etv&ÉXéL–t6Kaq1¯׋Çë#á iO$hlh¤¶v?-­­X9›Ît \—ÖÖV2™ d-‹`8D$! u-lkY¤3i&ŽÉ%s?ÜEeÇá«_ýêAÛ Ã 3hÐ Î>ûlÆŒó‘¹>6nÜÈ/~ñ Î:ë,>ùÉOžÔÇZSSÃ]wÝE^^·ß~;¦yò|ìº.¯¼ò +W®¤®®Û¶)..fÚ´iÌ›7ÇÓ«ýþýû¹óÎ;ûxóçÏçâ‹/>¦cH§Ó¼ð lܸ‘––¼^/ `Μ9œvÚi‡<æ×^{W^y…úúzLÓ¤ªªŠùóçòohhàùçŸgÇŽ$ B¡C‡eáÂ…TUUö¸jkkYµjëׯçöÛo× ,""""""rPX/Ò<wü×|öÚëØ¹};.]?sqp1 °²YššØ°a#++(,ÊÇ2¹9ÛÆëóƒÇC8Å›ËáÙDP8Ò5Gß5p]H¥Ó´utRW_OÝ:Ú;ÚI¦Rd2Y:::ðûý¤R)ÛÁqlÇÀçóF1=&–e1 ¸˜ï}éæ~ c Ã`æÌ™=Û¶Mcc#Û¶mcË–-\xá…,X°àC9–7²oß>¦OŸNQQÑ_õµ¼råJÚÛÛÙ¶mcÇŽ=iŽíW¿úkÖ¬!??Ÿ)S¦àñxxóÍ7yúé§Ù¹s'Ÿýìgß)?EÏs(--=äy-+;¶•Óé4wß}7uuu 8³Î:‹T*ņ xøá‡ihh`áÂ…½î³xñbV¬XA~~>gœq®ë²víZ~úÓŸrå•W2cÆŒž¶o¿ý6÷Üs™L†1cÆPZZJCC›6mâÍ7ßäÆodĈ=í“É$kÖ¬áõ×_gß¾}=c‘ˆˆˆˆˆˆˆœÖ‹ô“h,Æ]ÿ{7]÷öÖìÁ0ÀuÁp]+G¢£ƒ];wÒÔØD~AÇ5ÈZ9,ÛÁãñRW_Çã!±°r9üÁ–íbårär6V.‡íB.gS[{€æ–ÇÁÊå°r9+G¢³Çé ê=¦‡€ÏÇãÁ¶mÂá0ñhˆÏ_5ÑH¸ßúË4M.»ì²ƒ¶ïÞ½›{ï½—§Ÿ~š1cÆ0pàÀüX6mÚĪU«6lØ_uXoYk×®%//ööv^ýõ“&¬ß¸q#kÖ¬aðàÁÜxã +@ÿÑ~ĶmÛØ´i'Nì¹O[[çœsgžyæû>†gŸ}–ºº:Î>ûlþæoþ¦ç‹yóæñ£ýˆçž{޳Î:‹h4 t…ï+V¬ ¬¬Œ/~ñ‹=¯¿sÎ9‡ÿüÏÿäøS¦LÁï÷ðÛßþ–L&Ãu×]ǤI“zö»bÅ üqžxâ n»í¶ží¿øÅ/عs'‘H„Ù³g³råJlÛÖ`,""""""r’PÍz‘~TZVÆOy˜‘£FáqÁ똮ÇÓ5Àvɦ3dÓiìœMO¢ضC[{;uõ ì©©agu5»vífß¾}ìÝWËî=5TïÚMMÍÛ¨k ¥µ•\.€ëtÍÞƒD"aš=¡Ïïë™mðû)-Ìç‹W_Ia~ü¤ìÃ!C†0kÖ,V¯^­‹êC´iÓ&R©³gÏfèСlÞ¼™ÎÎΓâØÖ®] À¢E‹z‚z€`0ÈìÙ]¥œvíÚÕë>Ý3ëãñs­¯Y³Ã0¸ð {Í௨¨`ܸq8ŽÃž={z¶¯_¿è 练z€ââb¦NJ&“aÛ¶mÔ××S[[Ë Aƒzõ3gÎ$³ÿ~2™LÏö1cÆð™Ï|†ï~÷»\zé¥x½ú¾^DDDDDDäd¢Oê"ý¬°¸ˆÿ}ø!îþÁ¿óì“Oa``˜~l ×  a¸ho'š%‰bÛ9Û›(.)£­µ Ûv‰Dcx}²9Çv±¬Ù¬…e¥ÈZ9²–E<ÇÊfÉ$ÓØ–ã8!,Ë"—Ë‘N§1¼&H˜âÒFVU0ë´qø}¾“º‡ÊK/½DCCC¯íÍÍÍ<ÿüólݺ•D"A,côèÑœwÞyôj›ÍfY²d k×®¥©©‰p8Lee%çw^Oíï‡~˜uëÖõÜçÞ{ïàšk®aÊ”)=Û׬YòeËØ¿?¦i2hÐ -ZİaÃ:öåË—³|ùòž}Nœ8‘AƒÓóß¹s'þóŸÙ³gÙl–¢¢"N;í4æÏŸß3 `óæÍ<ðÀ,Z´ˆ‚‚–/_N]]¡Pˆ#FpÉ%—ŸŸßçýv—À™6m‘H„]»vñÆo0gΜ^í:::øÎw¾ÃÀù‡ø‡^·mß¾{ï½—©S§rõÕW÷lw]—eË–ñÊ+¯ÐÔÔD$aâĉLŸ>»îº‹3fpå•WöØFŒAaaá!û²;÷½çº>‘a½ëºÌ˜1ƒ@ ÐëË‚÷ûÏÏþýûYk¾ªªŠ×^{ýû÷3qâDLÓdþüùTVVÔÖ0 B¡©TªW î¹çjÀ9‰)¬9 Dc1¾ùoßgáEòo·ÿ êšÀ0‰CŒ9Š‚x5{ÞÆôQVVB8&Ëb»]caQ!@(D8£­£“ÐÐÐ@{{†'Kùd¯¾é®7ÿî/KŽäÝë¼×öíÛúò¤;¬ommeíÚµ´µµF™0aÂ!¿h9Ã0¸è¢‹y›ëºìرŸÏ׫lS"‘è5«¾[$éÕ¦¸¸ø°‹Ý677ÓÔÔÄ!CT“^DDDDDD䢰^ä$rÆìY<ü‡Ç¸ëÿÅÒ¿,§¸¤Œ±£ÇŸ§±¹‘Ö¦fÒ©$áhé!“³±,‹t:M2•Æq¡bà ,ÛÁ±¡0Žãâ&:{‚ìl&C²³“T*M.—#›³plÃ0¹hÑ|¾ù•/{'<lذ 'øt]—‡~˜d2Éßÿýß÷ªK¾víZyä~ùË_òÕ¯~Ã0ضm555Œ3†Ï~ö³=m§OŸÎOúSžyæÆŽ˨Q£5j{öìaÏž=Œ7ŽQ£Fõ´ß´iK—.eĈÜpà =}^SSÃÝwßÍâÅ‹ùÇüGöíÛÇË/¿L4å+_ùJÏln˲øùÏÞSîäHš››ùÝï~G(âÖ[oí©Ÿïº.?þ8¯¼ò O=õ—^zi¯ûy<n½õÖž_̘1ƒŽŽÞzë-ª««9räQ÷½jÕ*\×åôÓO  1~üx6lØÀÞ½{ß×Úû÷ïß}s8555¬^½šÊÊJFÝë¶îšõ?ûÙÏzmùå—™3gó7sB®×%K–ÐÜÜÌܹs …B=Û-Ëê9?ïÕ½­»Í‘<ñÄ€fÒ‹ˆˆˆˆˆˆœjÖ‹œdbyy|û߿˲¿,cé_^¡¸¬_ÐOYy)™½iØO*“"ŠDñùý8ŽC.—£½=Áº —\®«Ìé1q “DSÓã¡­­d*I6cá:N׊¶@EY)_¼ñï¹pÑüS¢ŸÇ¡©©‰+V°aÃB¡PÏ¢ Û·o§¾¾ž#Fô ê¦L™Â²eËØ½{7;wîdĈ=3óß[®d̘1\wÝu}ž¼lÙ2>ö±õšå?hÐ FÍÖ­[©¯¯§´´”5kÖ0{öì^eW|>3gÎìS ýꫯ’ËåX°`A¯…n»ë¤¯^½š×^{K.¹¤×ñLš4é 2@C† á­·Þ¢©©©Ïa½×ëeòäÉ=ÛN?ýt6lØÀÊ•+ßWXß={~Ö¬YõÍìÙ³;¬ïèèàÁÄ4M®ºêªƒnR™,I²Ù,þ@€H4J*™Âu]R©v.‡cç0\3|(Wÿíe\tþ‚“º?lÛ>¨Þy·üü|®½öZ¢Ñ(@Ï¢cÆŒ9dû±cDz{÷nöìÙÈ#;v,%%%¬_¿žŸüä'Lž<™áÇS^^~ÐâGRSSƒalذ¡g¶·d2 @]]¥¥¥ÔÖÖô)?œ#=Ïp8ÌàÁƒÙ±cµµµ <øˆÕæw/B|$ÕÕÕ466rÚi§ {õk8fÍš5|ìc;îL»k·¿»dÐû•Ífyàhmm媫®ê)ônï98ãŒ3p‡Ç{ŒW^yå}…õõõõüâ¿Àçóñ™Ï|æ òD}ñî…jßkíÚµ<ýôÓTTTpÅWh9Å(¬9É ¬,g`e9mííÚÚZhïhçí·ßfÿþý1|ÄÊ+*)--Å벯öéŒE:ÑIg*M2•"â:NWMúª f>K.XȈáCO‰~0 ƒ³Ï>»×ß¡PˆÊÊJÆŒÓkö{*• //ïÕ=[»;@Üzë­,_¾œU«V±xñb ëK€Y³f1oÞ®>y÷óÌÏÏïÓó|¿²ÙlO™š;w²sçÎC¶{ýõ×;¬ïŽJKKß×ñº®Ë£>ÊÖ­[™3g .ÚÚÚ¸öÚk{­sðnÝ_Ntttt>»–íþõÈ»íÛ·Ÿÿüç„B!>ÿùÏòZ‘“ŸÂz‘SPaaž>ž¾:ãºK¾lÛ¶ùó®Áß]ó¼»ÝêÕ«iiiá*á è IDATÌ3Ï$‹‘ŸŸÏ´iÓ˜8q"ßýîwY½z5—]vÙxÃ00`µµµÔÔÔµìLee%[·neÇŽ 2丟ç[o½Å¶mÛ4hP¯ÛR©555x½^***NXß®[·Žl6ËܹsùøÇ?~È6ÿþïÿÎöíÛimm%??¿§ÄN÷/ÞÍ}gÍ„w«¨¨`Ó¦Mìܹ“áÇ¿¯ã}ê©§xã7˜>}úaº)~衇˜7o—\rI¯Û±m›²²²cÞ¿eY<ðÀ8p€+¯¼òˆe•*++Ù¼y3{ö졪ªª×m555=}ónMMMÜwß}†Áç>÷9JJJ4ˆˆˆˆˆˆˆœ¢Luˆ|ÔŒ5ŠÒÒRvìØÁ›o¾Ùë¶õë×S]]MyyyO¼gÏžyæ–/_Þ«m&“Á¶íƒf[w—yoøÒÜÜÌzÚe³Y^~ùåƒî?uêT Ã`ùòå½ú&›ÍòÒK/õùX—,YÂK/½Äĉ¹òÊ+øeËÈ‘#ñù|¬\¹’ÖÖÖžíŽãðÌ3ÏÓúÐõEÄ/ùKª««ùØÇ>ÆŒ3ŽØ¾»þ’%Kz][ ¬]»–P(ÔkƒD"Á}÷ÝG&“áú믧²²R/~‘S˜fÖ‹ÈGŽa\sÍ5üä'?á`„ ÓÐÐÀæÍ› ‡Ã\}õÕ=áí¢E‹Ø¼y3/¼ð;vì`ðàÁd26mÚ„eY\tÑE½¿{Öóâŋٸq#3fÌ`äÈ‘œuÖY¼õÖ[¬[·ŽüàLœ8ŸÏ׳˜í„ zjë———sî¹çòâ‹/òÿñŒ7Ó4Ù¶mÛ!k–Jaa!—_~9¿ýío¹óÎ;™4iáp˜êêjjjj¨¬¬äâ‹/>aýÚØØHuu5¥¥¥ 8ð°í¦M›Æ3Ï<ÃÊ•+Y°`†a0kÖ,ž{î9î¾ûn&L˜€ëºìرã /5JKKY°`/¼ðÂA}s¨ö‡²yófþøÇ?âñx(**âÙgŸ=d»3Î8ƒââbÂá0ŸøÄ'xì±Ç¸ãŽ;˜8q"@€;w²ÿ~ÊËË9çœszî÷o|Ó4ù×ý×ÃÓO>ÉÆÉÏÏ'™LòôÓO²Ý\ÐóËŒyóæñÒK/qçw2qâD,ËbݺuX–ÅW\Ñë‹—ûï¿ŸÆÆF† ÆÖ­[Ùºuë!¯‘3ÏœE‹‰DX±bëÖ­# 1nÜ8&OžÌý÷ßÐc\pÁäååÔ7ƒ âÑG=êšo¿ý6е0ë¡fïw1bDÏšgžy& àÏþ3Û·o'‘HÇ™3g‹-굸«ã8GýÅB÷1´¶¶qÑáóÏ?¿çù\rÉ%”••±bÅ ^}õULÓ¤ªªŠ 0zôèC>~uu5ÕÕÕ‡|ì!C†(¬9E®ºAÞ«®®Ž¡C‡ª#D䤲dÉþøÇ?²páB.¸à‚~9†¶¶6¾÷½ï1|øpn¾ùf‘¿»ví:æõìvïØBEÕ>·WÍz9é,^¼˜M›6õÚÖÙÙɲeË7n\¿ÛêÕ«ŽZƒ^DDDDDDDäX¨ ŽˆˆœT²Ù,555,_¾œaÆ1hÐ :;;Ù¼y3Éd’™3g2xðà~;¾úúzÆÄEvEDDDDDDDŽ•ÊàÈ!© Žˆô'˲xõÕWY»v-µµµTTT0sæL¦OŸÞïÇç8¦©§‰ˆˆˆˆˆˆüµø0Êàhf½ˆˆœt|>sæÌaΜ9'åñ)¨‘MiƒˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""Òϼê9VÕÕÕÜsÏ=,]º”ýû÷ã÷û=z4ŸøÄ'¸öÚkñûýê$yß~õ«_ñ•¯|å¨í®¸â ~üã Çrùå—³|ùò£¶»ÿþû¹ä’K4|Ç´úúz&MštÔÇ/..fÓ¦Mêh9f ëEDDä˜<÷ÜsÜxã¤R©žm–e±fÍÖ¬YÃc=Æc=FAA:KDD㾈ˆÆ4‘>RX/ò!¹úê«yñÅÚnÁ‚üò—¿<îýTTTà8ÎQÛýð‡?äÓŸþ´NÌI"N3dÈ>µýŸÿù.¿üruÚ_©aÆ‘L&ÚîöÛo禛n:áûûí·ùÜç>G:>l›7rË-·ðÈ#è„}D}îsŸãüãIs<Ôõ."÷EDcšˆÈ‡I5ëEDD¤Ï~ùË_ñÃM·^xÝ»w«ÃDD4hLé#…õ"""Òg[¶lésÛ7ß|S&"¢q_DDcšˆH© ŽˆˆÈQ<òÈ#8pà¨í®¹æÊËË?Ò}áñxúþ&ë·""÷Eä£.›Ír÷ÝwµßïçK_ú’Æ4]ê0‘#=ê‘#{ä‘GذaÃQÛ-\¸ð#ÖO™2…gžyæ¨í Ã`òäɺxDD4î‹ÈGœeYüð‡?»æšk(**:j»OúÓ”••©ÃDD4hLé#…õ"""Ògüú׿>â/.¾øb¾ÿý﫳DD4hL9*ƒ#"""ÇdòäÉ,[¶Œßüæ7,]º”ýû÷ã÷û5jŸøÄ'˜;w®:IDD㾈ˆÆ4‘c¤°^DDDŽY,ã†nà†nPgüúþ÷¿Ï7¿ùÍcºÏܹsI¥RGm÷¥/}‰OúÓÇôØ:)"÷ED4¦‰È)Oa½ˆˆˆˆ“âââc¾a}jÇ4h:YDDDDDþê¨f½ˆˆˆˆˆˆˆˆˆˆH?ÓÌz9.‰D‚M›6QSSCss3©T ÇC$¡¢¢‚aÆ1räHLSß ~TX–ņ ؾ};MMMضMqq1¥¥¥œqÆÄãñý˜êêêØ²e {÷­L&C  //ÊÊJFMee¥NÞGH]]ëׯgÏž=tvv‰D(**bÒ¤IŒ1â#û¼wïÞÍ›o¾IKK íííd³Y¢Ñ(yyy”””0a„ãšíþ×Àu]vîÜÉÎ;©­­%‘HËåƒPUUÅ„ úe koogÅŠìÚµ‹l6K,c̘1Ìš5ë”éß\.ǶmÛØ¹s'ííí´··cYñxœx<Έ#;v,^ïÉù±#‘H°víZª««immÅçóQ^^΄ 5j”^ç';v°yóföïßO&“!SVVÆôéÓ)))9%žƒmÛlܸ‘mÛ¶ÑØØˆeYD£Q† Æ´iÓú<þ´¶¶²nÝ:ª««éèè PTTĸqã7n\ŸÁô×À¶m¶nÝJuu5 ™Lbš&………0vìX†ú¾o~óÍ7Ù½{7õõõ$“IB¡%%% <˜ñãÇô~êÚ·o¯¾ú*µµµ2}útF}R_uu5ëׯ§¾¾žt:M4eРALœ8ñˆ ÞÊ©õY0—ËñÚk¯±eˉáp˜ªª*Î=÷Ü>¿æs¹[¶léyÕÖÖ†ëºäååÇ©¨¨`„ D"]A ëE¤ÏšššxôÑGyòÉ'Ù°a®ë±},cÞ¼y\~ùå,\¸°O î¾ûnþíßþí¨í¶nÝJ~~þao?ãŒ3¨©©9ämÿýßÿÍ'?ùÉÃÞ÷k_û=ôÐ÷‡Ù¾}ûI>œH6là¾ûîã™gžéù ñ^‡3Ï<“[o½•Ù³gðõ¯_üâG|ìn¸ù—9¦ãÙ¶m>ú(O?ýôaÏñ»UTTpþùçó©O}ŠI“&õi3fÌ`Ïž=ÇÜWçŸþAÛ¾ñopË-·|d®‡]»vqÖYgµÝÀY½zõAÛkkk™:uêQïÿÐCqÞyçõ|àþÝï~ǃ>Ⱥuë{ŸÊÊJ®¿þz®½öZÂáð ;ϯ¾úêQ?Ð9’ŽŽŽ>½žJKKÚÎu]–/_ÎÃ?ÌòåËiiiéÓµ~Î9çð©O}Š3Î8ã¯þ߬¥K—òØcñç?ÿ¹Oý7vìX.¾øb®ºê* pLûºí¶Ûxä‘GŽØfÊ”)<óÌ3$“Iî¸ã|ðAÒéô!_;—^z)¯¼òÊQ÷=uêTž~ú飶ûÙÏ~Æ·¾õ­£¶3M“ 61niiañâÅ<ñÄlܸ‘L&sÄÇ ƒœ~úé\uÕU\tÑEýN½ÛË/¿ÌOúS–,Y‚mÛ‡l3fÌn¹å.½ôÒäN•×ùû÷ÿûßó…/|á¨÷ß±c±X €ŽŽî¿ÿ~~ýë_³wïÞÃÞgòäÉ|ñ‹_䢋.úÀƒê¾¼ÎÇŒÃË/¿Üó÷Þ½{¹çž{xüñÇikk;ôr¯—… òµ¯}1cƲ͋/¾È}÷ÝÇŠ+pçmŠ‹‹¹îºëøìg?K^^Þ!Û¬Y³† /¼°OÏ÷öÛo禛n:j»û￟oûÛ}zÌßþö·èÂŽãðì³Ïò»ßýŽ%K–ö}k·ÒÒRæÎËõ×_ÏäÉ“ß÷þ³Ù,øÃxâ‰'xõÕWßßËçó1cÆ >þñsÙe—õé½ËÉò~ª¯û¯d2yÈPúÿþïÿ˜6mZÏß³fÍbçÎG|¬›o¾¹çÚ«©©áöÛoçÙgŸ=¨ÝW\Áüã6¦Å‹s÷Ýw³m۶ö?~<×\s Ÿþô§ñù|'ì(//?âùØ´i ,8êc >œ+V|(×@~ìöÄOðùÏþ¨íª««{^+<òwÜq µ[¹råK=¦Óiþô§?ñ›ßü†5kÖu 1 ƒ‘#GrÁð·û· 2D¡ÕG„¦¼ŠÈQ¥R)~ðƒpúé§ó¯ÿú¯¬_¿þ¨A}÷­?ýéOüÝßýsæÌaÉ’%} Ïúbûö퇽­¦¦æˆÿpí8Žô&êÝáÈG=¨ïììäþáX´h?þø?ðض͊+¸üò˹ñÆI§ÓGüp}ê}ûöñ½ï}sÎ9‡M›6²Ï}ݺuÌ›7O~ò“<ùä“} ðº¯õ_ÿú×|ìccÞ¼y¬\¹ò¯òÚY½z5‹-âŠ+®à÷¿ÿ}ŸûoË–-ÜyçœqÆ|ãß ½½ý„WSSSϵ}ÑEqï½÷òCX÷¿-_|qŸwýúõG ¤€>ÿ3gÎË—/gîܹ|æ3Ÿ9â“÷ž¯ßýîwœwÞy\vÙe¼õÖ[ǽÿßþö·LŸ>[n¹…—^zé¨!t;_¾|9·Ýv§Ÿ~:?ûÙÏŽxŽõ~êÐÿ®¾ñÆ,\¸ðA=ЧàûƒÒÞÞÎå—_ÎM7ÝtÔϘ›7oæŸþ韘;w.6lЇSè³`ss3¶msóÍ7sÛm·2¨?Úµøûßÿž©S§rË-·ðÊ+¯ôi q]—íÛ·óÿÙ»ïð˜²ÿàï‘H“D0! Q%!Dßh‰mwµÕ»Öw—µkµ/_‹h«·VD·zˆÞk¬Ñ[Ho¿?<ñ“2sÏdf23™÷ëyü!sæÜ;wî½sÎçžó9sçÎ…——¾þúk÷ÁI7¬'"¥îܹÌ›7 y®çöíÛèÞ½;~ù夦¦*,W§N˜™™IÖ§,X/Œ?zô¨Ò×E‚õ¢ Õ³gÏо}{«üÞ°°0ôîÝ[­OnÁ¦M›bÇŽjÕsèÐ!´hÑ!!!¼¸ hsòäIøúúâúõë*½7::~~~ ƒúlÁ‚hß¾=nÞ¼©V=‘‘‘èØ±#ƧñŽ¿¾ÊÈÈÀÌ™3áçç§V'7%%+V¬@óæÍqùòe’““Ñ«W/DFF*,—¬)œ––†³gÏJ›S§N í§¢‡gΜAãÆ±xñb¤¤¤¨uF…€€?‘òäÉ´oß^8¸øy»Âßß_iÀ•×¹fîûK–,Aß¾}?áD;v íÚµS É/¯_¿FRR¾ÿþ{L˜0AèaÖç÷žÑ£Gcûöí>˜Úµk'4ÿü8(œqãïï/TÏ™3g$RÅÆÆ ß[:wî ­Üû§M›†€€Ü¾};Ïõ?~<×&RÞ¿¾}ûbäÈ‘xöì™ZçÎøñãÑ¥K—Ov¶§¤Ùƒ¨ôþ¬óNDRR:uꄈˆ•Þ…:HöY‰¾÷_¿~ &`Ë–-JËå6Ø/)) ƒ ÂðáÃÕ~è¼wï^4mÚT§ƒ"H3¬'"…®_¿???É)ˆªX¾|9  0`onn.4 UY@]ªaóüùs…äçÏŸ n+ÈÁúØØXtëÖM­ BDDîÝ»§‘ý ÁW_}…>h¬áD=ò”’øøoøðáxøðaŽ×Dƒõ©©©’`:¤tÎç´r¼ÇŽ‹¹sçj¤®„„Œ=ýõ—PùwïÞ¡K—.Ø·oŸÆ>Ï©S§Ð¡CµÿÆÒžzõêFŒ!ùàWW#ëß¿7n乿òõ×_ktð“¡2„¾`XX–-[&Y.{°>%%üôVSíQ£FaÉ’%ìP0ë‰Haã'00P+ ³½{÷â·ß~Søº———dŠFÖgdd|Ê£§Ì±cÇrý»È¨úB… åÓ3T?ýô“ÐqÈ'OžÄ÷߯•º'Mš¤öè Òž£GªÝ(ñâ-ZdŸ÷À˜:uªVêÞ¾};¦OŸ^ Ï—¹sçª<RDBBúôé#<ÕZŠÈùøyPA4ŽÔ‘ßEàãƒèìk*ܾ} šŽ­ª+W®`äÈ‘ùrŽÌš5+ÏA^çùc×®]j×®óѨ[·nUëýïß¿GëÖ­•Î"Y³fåø{ÅŠQ»vm¡:<¨ôuÑ u¥J•TÎ-bõêÕXµj•Æëýí·ß$ƒg4hFâewïÞ=ôîÝÉÉÉlO)qáœ>}Z²œ¡¦.Í º3Cé Š^ÙMŸ>]£û>7aÂÉ{8é/ë‰ôLRRž?žçšòÃ?h´¾ìV¬X¡pZ¯È¨uE˜«W¯ T4RHd4yÍš5 ìªë‡V»“©)±±±>|¸V§ö3F£#EIÿkt«¶:c?ýô“V·±hÑ"ɵ†êâÅ‹˜9s¦Öêÿðᆪ‘óHd½—σ ¢Áú‹/*MU'¬Ï¾½ŒŒ >\+úLÿüóÊi>Tuÿþ},]º”×¹‘X³fÁÑ5 ¤„……åšÊFttýÁƒÞ·ÒÒÒpèÐ!¡z´1ª>::'NÔÚw0vìX¥Aî̪µåêÕ«˜1cÛSjþ¦fÿ]54çÎÓȃLCdH}AÑsñó”Lׯ_ÇâÅ‹µz G­± ”¿¬'Ò3ÇŽƒ»»{žÿiâÇ,$$Då|®y1jÔ¨\ó Ö¯__2Oï“'Orí|(1ŸÝ‰'r..¬¯_¿~<÷ÒÓÓµHPů¿þŠÇkuoß¾5ú+Ý‹/4šw\öìÙ#t®)R#GŽÄ–-[ŽôíÛW(¯yzzºÐô\C“’’‚aÆi=€pîÜ9åËgú<¨P¶lYxxx‡óçÏ+ì@Šæ”nß¾}ŽßJÑëÇÊÊ íڵÀбcG888fmØœ1c†ÎSÄð:Ï?R “¤¤¤\gtêÔ … I‡ž?®päøéÓ§…gàvéÒEãŸíÇZD6¯^½z… äúÚ;w´6Kæs .Ô›E¤ ¡=%ò»jˆ¦M›f”÷¯‚Øü|dýŠ+„~«Ê—/iÓ¦a÷îÝ8rä–-[†¦M› mïéÓ§M±Cùxßâ! ¢ì½?ÿüS¸|ƒ àçç$$$àÆØ´i“Ð_/_¾ÄªU«rL·µµ…«««Òø€Só³1D§>ÇÇÇãüùó9RIÓcˆ<¨RªtëÖ ...HMMѰwï^\¼xQí}‰ŽŽÆæÍ›…྾¾hÖ¬J”(ׯ_ãôéÓØ¶m›ÐhÐððpœ?>Kj£'Nd!áëë+´`åîÝ»sLóÖÕ¢V…\.‡¿¿?ÜÝÝaaaÇ#""B¥)£çÏŸ xêŠH#ÚÊÊ {÷îEåÊ•?ý­jÕªhÖ¬jÕª…Ñ£G ŸIII077/0çGXX˜pò¢E‹¢k×®pww‡ ž9zôhž‚õuqY‘€J¦¾}ûbêÔ©9¿#GŽDHH~øáµFµ-]ºTh–ˆ Ö¯_Ÿc¶CÏž=1dÈ Mm\°`V¬Xñéÿy °*TÈàGïèooo,]ºÅ‹Ïò÷AƒáÔ©SèÞ½;’’’$ëQ7ﯶ‰,öå—_f àe?ßgΜ‰§OŸJ°¢££ÖcˆD§»¹¹aÆ °··Ïò÷~ýúaçÎøöÛo%ïYoß¾Epp0  ÕÏ”ýþãçç‡I“&I¾OQÞz©Åg3uèÐ!Çßnß¾-ôÞ±cÇf Ô€……&OžŒHÞ‡ÓÒÒpêÔ)´iÓFãÇsçÎB÷ Ž0 enkîܹ9ú9ÇǤI“„~ÃÂÃÃs샾´§>?®ª´ó»­¬Ë¶¹››V¯^ãUæý k×®B޶lÙ¢—O´uèº/¨íöÝ‹/$Fμ×+J¿;zôh¡{‘TL…ôÓàQ¢y>;wîœ#PŸ©hÑ¢X¼x1lll$ëyþü9öîÝ›ãï"ñìõ3gÎ(ÍÙ›[ã÷s111¹¦Öù\… r$ ‚øøxáh7nŒéÓ§+¥Ò½{w 2$Ïû’’’‚àà`¡²&LP˜–ÈÕÕ³gϪgÏž=B³A(ÿX[[cùòå9:–™¼¼¼„sîJ·tMdt¤²ÑÜ2™ °±±‘ü'˜0$.\ikbb‚Å‹çÔgòóó¾gi*v:uðßÿþGÅÍ›7ñäÉüûï¿8}útŽüûŽŽŽ¨Y³¦dçÏŸÏ5Ø!´OÙGÞÿ?Ê\ê_:ur­ÓÂÂB8uœ¶®SÑ€b5ð믿æšn¦lÙ²Xµj•ZëÕð:—æåå•#Àý¹!C†ÀÙÙYïïû­ZµÂ”)SrýÕªUC»ví„ê©X±"þúë¯ú̶¶èƒCE*___XZZ Ýk³¯uçΡYM¦¦¦èر£ÆÛ¬Û¶mºž¦OŸžkPÐÅÅEøÁOöÁG7n íää„9sæäÔwL˜0Ax$ïêÕ«Ùž’àëë‹Å‹ãÌ™3ˆŠŠÂãÇqíÚ5DDDèlT±™™V¬X¡pfIݺuñÝwß Õµÿ~£ér_°lÙ²øñDZwï^\»v 111ˆŠŠÂ¹sç²|‡¢3£”µ *V¬¹\.Ù&HIIAjj*;—†Ãÿˆè“ÔÔTœ>}Z¨ì°aÔ¾^²dItëÖ Ë—/jgoÈ‹¤šÉ>ºC4_}¦K—.áýû÷Ÿ*s œË—/ „?~¼džSEÑ}‰‹‹“,W¢D tïÞ]i™–-[ÂÕÕUrªqFFNœ8/¿ü’7=amm ;;;ÉëQ¤1/šSWWììì$÷1,, C‡U˜\Û£ô‘è=ßÇÇU«VUZæÛo¿Å¢E‹$nÝ‹/P²dÉ<ï÷˜1cðý÷ßç¸-ZTa???…y£3%%%áâÅ‹Y~§ÒÓÓ…~×ëÔ©ƒråÊåøûï¿ÿ®ö÷T¾|y¡rÚz`*uÜ2õë×Oé¨ÀråÊ¡N:Â?xç-È¡ŒL&ƒ——îß¿¯×÷}¥¯×ªU aaaBmNešZµj íOnëC×GhÓ¦ä¾dddàÈ‘#Yò΋®mÕ²eK+VL£Ç÷Â… BÁò&Mš D‰ _ïØ±#~úé'É:Ïž=ËòÑ{@ÿþýaaa¡ô|:t¨ÂÁOÙûJlOåÎÒÒK—.Íõº“Ëå:dekk‹ *(-Ó¹sg¡…„£££µ–.Nû¥†Ølݺ5‚‚‚`kk›åïVVV9îåR×d¦¥K—¢U«V¹>ô ÖŒ?ÒoYODŸ\¹rEhž££#jÔ¨!YÎÏÏOh»¹MÝ···—Ìo™=X/š»2SZZZ–Ư1/.+’ø8B¡víÚZÝE©²kÕª•PÊÜR;¨³]Ò¢S‘|•º$Õ‘>ŽÀiÓ¦ Ö¯_¯÷Ÿ'¿äuÑTEç’èÃXuî¾¾¾=z´ÐÂŽš¸]¿~]a ./¿×y!:-^¤c®ª7oÞ/N׺uk^ç¼ïç u4ä¥eÇBtDuöQ½ºL#šòRªÍnjj*”.êóY©©©8{ö¬ðý^ŠÐú·oßÖêŒC¾®~ùåÉdúÌÙÙYxAvc Ìb_°\¹rX¸paŽ@½"¥J•ZéÔ©Shß¾=ÂÃó¬§FGÖÑ'¢ ƒzzz •«[·.LMM%§]ݺu qqq9¦—7hÐ@é‚§=B||<¬¬¬‹Ë—/«ü™=жmÛ0î|õ"* E‹Zß—K—.iô<ýÎ4±0.å/E£L²Sgý„üàçç'´ÈéË—/1zôhL˜0Íš5CýúõQ·n]Ô¬Y³@-«é{…èCÖ ^¼xñbžÓ:4kÖ,Oï«X±¢ÐȰ'NdÉ--:S´#ûù5uòäI\¾|‘‘‘¸uëÞ¾}‹¸¸8|øðA8÷ç´Ñ ͹ïèè¨õÑ—¼Îó÷¾/’ëXß?C~ü¶hÑŋϑæ&»#GŽ ==… ›7o„ÖÖÖÖZy&ÚÞYèò×_• ‚H½sçŽÐÀ¦2eÊä:[);sssÔ©SGèáóÅ‹ѪU+¶§4ô»ªOêׯ­[·J–‹ŠŠ‚··7Ûwzج[·n®)Ë111AÛ¶m*YöêÕ«èÞ½;Ê”)ƒ-Z nݺ¨[·.ªT©¢òà2 ÖQ–¢hÐ@´áW¾|y¡k_½z•#Xïåå%¹ ü­[·P»vm?~\aǬaÆ Ÿ”ž·^*X/—Ë…?»¡yóæP9WWWƒ;+Uª¤ÑíiZ§N0{ölÄÄÄ•ÿðávíÚ…]»v .ŒZµj¡U«VhÓ¦M¾\§º–––&tß211Nâï÷Š:HëÏ;‡”””O#ÍD—­Y³¦äL¶L<À’%K°}ûvƒ¸gЦlprrâuNz'?FQfæ”_µj•d;ñÂ… ¨W¯8 ô0ÄÏÏOi˜¼Íõ\¦LÉ2 6Ôiø˜?_$XÏvjÁUªT)þ¦1&aí»o¿ýÛ¶m~öäÉJYemmF¡uëÖhݺµðyD†aˆôŒž>}šçê<] ØŠ4~Um|ä6¢Gä)xf*e)pºvíªpq¾»wïâñãÇÈÈÈ ÖÔQõ„Ò$è¨Cô<”Êm«ê9(º]"M+R¤æÎ+œ.$»””œ;wÓ¦MCóæÍ?¥ÑÈËèfC!z½–.]Zø¸êû½B$UMBB§Q§éééBSºEêMIIÁœ9sдiS¬X±Â`‚F>|*§hña^çd DSá8p€nSàâKM¥’ê¯äW_‰íÔ‚Kô\5Šãa,}ÁZµjá‡~P«³oß>üøã¨]»6úöí‹C‡ñ‚* ¬'"•¿"ùÕT-›Ûc¥J•”. ˆë[¶l©4}ËÑ£GñðáCÉi­uqY’‹keRezŸ¶h¢çV¡B…„RÄÇÇ3èA:Ó¤I¬[·N¥û«"—/_ÆèѣѰaC¡ãø{¥ZYÑ`¦U­ZU(¿ræhú«W¯ ÝÛ¥Rत¤`àÀ˜1c†ÁÝ#Eƒõ–––¼ÎÉhyzz Æ8xð RRR„Ò9ÙÛÛ£Q£FZÙ_Ñ&šJ7¤Ï}%*Dí¯:cê Ž=?ÿü³Úõ¤§§cß¾}èÙ³'|}}…×u"ýÅ`=}"•[>“ÈB.ŸwòÕ!•køÖ­[xòä îÞ½›ëënnn°··— Ö‹ä«/¨‹ËâS­UùîóJt* ©©©ÆÏm"]jÑ¢Ž9¢±µ!bbbðÃ?`РAB9v âï•*÷ u¯òƒÈb¹™£éEòÕ»¹¹IN#1böîÝkç‰èïI~ü¶ñ:'mµÍ4¡sçÎ’e®^½Š­[· =ëܹ³Ör)‹Uîÿºì+±J¢klK~rcë Ž5 [¶l‹‹‹Fê»páºté‚ùóçóâ2` ÖÑ'E‹*— \§hYE# ¤F³ÿûï¿YòÎg÷Å_êÕ«—#'~¦cÇŽ!22Rév¬¬¬P£FûÝÛØØ•Ë@€¦ÏÃääd¡FŸ¥¥%ï#sttĆ ¢±Q‰Û·oÇÈ‘# Ôq…¦ß«bÅŠéìs‹,{æÌ¤¦¦ å«—ªoÿþýB‹Þ§ñ÷éÓÿýï1þ|!((mÚ´Ñûß¶ÄÄD^çdÔDSÖL™2E£õi³˜œœ\ ~{D·M†Gô\ÍÎ1&a}Aooo>|³gÏF… Ô®/==S§NÅÊ•+y(ë‰è“’%K •S%Wí³gÏ„Ê)Jw#•'>::û÷ïWøzË–-|áÒ¸qc…Ÿ',,LévêÕ«—ç<³©Q$ú}êÓyøôéS¡rÚÈmJ”WÍš5Chh("""0räHµ“ܱc¶oß^`Ž\.×øï•!Ü+ªW¯.Ù‰‹‹‹Ã¥K—„¦@K嫟:uªÐ~5jÔ§OŸÆÌ™3ѯ_?tíÚÐéB¨¶¶¶Båt•^‚×9é‹Ê•++\ßésÏŸ?—,SµjUT¯^]kû*´ÖÆbœÚè+±J¢çªèhÆ$ ó333C¯^½pâÄ „††¢W¯^*­‘›‰'âÑ£G¼È ƒõD¤ò£¢”3Ù%&&âÉ“'jý8Ö¬YSi>ºŒŒ …Óó‹)OOÏOÿW6åüÆJ÷¯ /. ˆ•:NúxÞ¿_¨œÔúDºP©R%Œ;GŽÁµk×ð×_¡ÿþB¹Ë³[·n]9.¦¦¦B÷­¸¸8¡àÜ»wÏ î" Â.Y²D2UE•*UP¥J¥÷Ø›7oJnËÊÊ K–,ÑË ‚èo›èï¯sÊOù™_h6¿êQ÷, ÓeÕ~{H{DÛ)¢ƒ«“0ì¾ L&C£F0{öl\¼xÇǬY³ÐµkWáÅr3%&&bË–-¼È ƒõDôIµjÕ„Ê={V¨Ü¥K—„¦œUªTIá´>Ô­[Wéûm£iÓ¦YrFª“¶ ëÝÜ܄ʉ,*¦oçá¹sç„ÊÕ®]›7##“É„ÊåwÀD¹\ŽŽ;bêÔ©8vìNŸ>~øA¸ó!¼àfAúÍ:sæŒP¹óçÏĽB$oýŽ;$ËHý9"´?:tîXç7Ñü¯ÿþû¯Þä{çuNºÒ¹sgáßEeºté¢Õýtww¾®¥cÚ´iJÿ}>[¥B… °°°¬÷îÝ»xõê•d¹ääd\¹r…íT#wëÖ-¡rÙט1´v,û‚yoËôîÝóçÏÇ•+W°{÷nôìÙSxÖ¿¡®;dìLyˆ(Sݺuaii)™ÿíæÍ›ˆŠŠ’\”nÏž=BÛ•ÊKïåå…cÇŽ©üy2Sàdrrr‚³³³Ê#èLLLàááQà¿{ÑÆÎ­[·”ŽÆTW“&M0sæL¡†Ç”)S$[=6l¨ö¾‹.EúAÑ:Ùic*}¦;v ))IòúÌ-õ‰““þóŸÿ૯¾BÇŽñàÁÉóóÉ“'y­«š4i"´ˆêîÝ»%Ó¯_¿ÆéÓ§óí^¡ŽÚµk£|ùòxøð¡ZõH嫧ϤâÅ‹£\¹r’SÀÓÒÒŽvíÚñ:'½‘ß¶Ò¥KÃÛÛy®£aÆ(W®œV÷³~ýúBåNŸ>*-³|ùr\¿~]i™o¾ù;v˜››ÃÓÓS¨_²wï^ôêÕKi™#GŽHÞ€AZUGÔê+¶•³JJJ’<3eO/%ÚŽ}ÿþ=2224ò0.?ÎCî ŠˆÅ¾}û$˵mÛ6×ððð@·nÝЭ[7É5Ôm/’n0XODŸ˜™™¡AƒB£é.\ˆY³f) |lÚ´Ih»ÞÞÞJ_Ïë¨öÜFÒ·hÑBå…VÜÝÝ•¦â)ÜÝÝajjŠÔÔTɲS¦LÁš5k”–yýúuž÷ÅÃÃEŠA\\œÒr111ضm:w̉'põêUµh¢[u>7å?Ñ‘ªgΜQúÀîúõëy•ûÇàöíÛJËŒ3£GV`8p Æ/¹½/^¨`ýôéÓ%ËíÚµ ÑÑÑpttTXfÅŠHII‘¬ËÅÅ¥K—Öùgoß¾=/^œç÷W¬XQrF•ȨP‘Nw~/Þš]íÚµ…òµ._¾\i°þÑ£G¸|ù2¯s*ÐÔ Ök;ðñÁVáÂ…%ïÙ‡ÆÛ·oæ¸ùò¥Ðèûì3‡š4i"¬_ºt)ºuë–e–ovK–,ÑH_Iˆ¶•_àûVÀÇ ùÇQ¾|y…e8 Ô†,[¶lŽÔn666Éd’öâããqõêU¥³RDg!æÇ9 }AMJNNÆðáÃ%ËmݺUé>yyyÁÇÇ»wï–lÏ¥§§K>Ô ýÂo‹ˆ²èÞ½»P¹uëÖ!888××>|ø€¡C‡ -Ø&—Ë%G²yxxÀÔTµg‹U«VÍudO^Ráô8ÀÇœÃmÛ¶*»oß>LžÿÍ7ßHæ~´²²‚»»;.\¸ ü9å7n,4çsƬÏììܹS¨ì‚ pèÐ!tíÚÎÎÎHNNÆýû÷±{÷náÜ›Ê 6 ëׯ—±ùúõktìØíÛ·G“&M —Ëñöí[œ9s[·n42DéëŠFee·aÃÄÄÄÀÛÛ666HIIAll,~üñÇ|ÿ>gΜ)4…Tä6mZ<çkÖ¬)tο|ù>>>èÝ»7jÕªSSS<}úGÅþýû…ÊŠøùùIN…½~ý:¦L™‚qãÆåšŸ2>>7nÚž²Ñ]†F&“aذa5j”dÙK—.¡iÓ¦€»»;lmmñìÙ38p@h*2ðq[ïÞ½õâ³{xx L™2¿µ¹wRD;­{öìÁ‚ 0dÈOÁ„„„„„`Ò¤I:àçëë +++¡ý˜0a8€: téÒxõêΟ?¯Òï ¯sÒ]ä™¶±±AëÖ­…Ö½ÈÎÇÇ'ßÀ8p ¶nÝ*Y.447nÜ@·nÝàää™L†Û·oãï¿ÿ–œí’ÙiÚ´i–¿988 K—.B3ˆ×¯_“'O" ...055ѰuëVáѾÞÞÞÂyúu©P¡B°µµÅ»wï„úGEõêÕannŽ„„/^=zô(p×ñåË—Ñ´iStêÔ ^^^(Q¢Þ¿K—.aÆ ³r;uꤰ-.ùþãÇÃÇǨT©’’’ððáCìÙ³G8§{~žúÖÔ´öíÛKþ¦¯Zµ 5‚¯¯o®¯ß½{Wh–²™¥¤¿¬'¢,LLL0räH¥S±?wòäIœ¯*V¬ˆqãÆi­þI“&) >¡C‡*=ßÍÌÌàããƒ}ûöaâĉÉdÂ3OÖ­[§õcV´hQ¬X±›6mB‹-”ŽD¬U«-Z„U«V}:TYt—×92ÑÙ¥ºJ“]óæÍqìØ1,_¾mÛ¶jc–*U Ý»wǾ}ûð÷ßç9Ø/“ɈsçÎaÞ¼yhÑ¢…ÐÃMÔ¯_S§NÅ… 0|øp˜ššü¹ãææ†þùÓ§OY.—ËQ»víuýØÙÙÁÖÖr¹!!!˜7ožä@‚Ê•+câĉˆˆˆÈS?ÔÓÓ˜çììŒÁƒãСC|PV€Èâââ2x(»gÏž©—“ ¶>àÚµkxðà^¿~ÄÄD*TVVV°··‡‹‹ ªV­šçéx¤’““qùòeܾ}¯^½Bzz:är9*T¨€úõëgé\ôêÕ ”¬sÚ´ijlxöì"##ñðáC¼{÷ÉÉÉ(\¸0lllP¶lYT­ZU«³#âããqéÒ%Ü»wïÞ½CJJ Š-ŠbÅŠ¡|ùòpww/.c‹³gÏ"&&oÞ¼……ŧÙ6µk×Î×Q„ø÷ßq÷î]¼}û±±±HJJB‘"E`ccƒ’%K¢zõêJÂ3fˆŠŠÂíÛ·ƒ> 55æææ°³³ƒ££#ªU«Æiû*ÓÈÈH\¿~¯^½BRRär9Ê”)ƒ hlªz~]ë/^DTTbccannŽ2eÊ FZ_ø×9é³ï¿ÿ6lPZ¦Zµj8tè^îjj*nÞ¼‰¨¨(<{ö ñññÉd(V¬Š+777­^ã)))ˆŒŒDTTž?ŽøøxdddÀÒÒr¹ÎÎΨV­šÚ¹Æ ÁË—/qñâEÄÄÄàÝ»wÉd(^¼8Š+†Ê•+£råÊFs]EEEáÚµkxúô)âããQ¤H”+W5kÖD¹rå4º­ÇãÂ… xùò%bccakk‹Ò¥KÃÍÍ-ßc=Ú:tÝÔ¦¤¤$\½z?Æ»wïðöí[dddÀÆÆ¶¶¶ppp@5„R ’fÝ»wOå™–÷oG¢lygáò ֓›ƒõDôìÙ3•ˆ^¼xOOO$&&J–ýûï¿5šßžˆˆˆˆÔóæÍxxx !!Ai¹ß~ûMcù≈ˆ A~뙇ˆˆruûöm4jÔ3fÌΛš‘‘qãÆ ê . h""""=òçŸJêe2:wî̃EDD¤a ÖQñññ0`âââ0gδhÑ»víBJJŠÂ÷DGG㫯¾ÂŽ;„¶Ñ²eK£˜úKDDDd^¿~©S§bÉ’%’e½½½ z!T"""}ÅDºDD”Ø1cðï¿ÿ~úÿÍ›7Ñ¿XYYÁÛÛÎÎΟÛ{ùò%._¾ŒóçÏ À€ð@éÈÝ»w1dȤ¥¥áíÛ·ˆ‰‰nËòiƒõDD”ÅêÕ«±eË–\_‹ÇþýûÕÞFË–-ѤIl""""IHHÀ•+WT~Ÿ\.‡ŸŸ ‘0 }rùòeüúë¯Z݆\.Çÿþ÷?l""""4bĘ››ó@iƒõDDôɃ”æ¥W—‚ƒƒaooσMDDDd`œœœðÕW_ñ@i ƒõDDôIÇŽ±páBXZZj¼îêÕ«cçÎpwwç&"""20æææX´hGÕiƒõDD”EçαgÏxyyi¤> Œ7ÿüó*UªÄLDDDd`¬¬¬°jÕ*xxxð`i˜%"¢\]]†C‡aùòå8räÒÒÒTªÃÉÉ ½zõB`` J–,ɃJDDDd€<==1gκ ""Ê Ö‘B-[¶DË–-ñæÍ>|gΜÁµk×ðàÁ¼{÷iii°µµ…­­-Š+†ªU«¢N:¨[·.jÔ¨™LƃHDDD¤‡ìííˆãÇ#::úc€ÀÔ666pvvF:uо}{x{{ó`åY\\\e÷ìÙ3T¨P‚ˆˆˆˆˆˆˆˆˆŒÞ½{÷Pºti•Þsÿv$Ê–w.ÏœõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘¥§§#88:uB•*UP®\9xxx`øðá¸~ý:3f ìíí%ÿ­^½š‹ˆˆˆˆˆˆˆòÌ”‡€ˆŒEtt4îܹƒGáýû÷HJJBáÂ…aii‰’%K¢lÙ²¨R¥ Š-ª‘í%$$ oß¾8vìX–¿ÇÄÄàï¿ÿÆÖ­[1cÆ ôîÝ›_‘‘c°žˆ ¬ôôt„‡‡#44áááxþü¹ÐûѤI´k×-Z´€‰‰Iž¶?qâÄúÏ¥¥¥a̘1¨^½:êÔ©“/ÇäÒ¥KhÛ¶­PÙ½{÷¢víÚyÚΜ9s0cÆ Érööö¸téOV"""""""2zLƒCDÒ–-[ФIbóæÍÂzàãüõë×£wïÞðôôÄš5kššªÒöãââ,Y.##Ë–-ãFDDDDDDDdä¬'¢åÁƒèܹ3† †»wïª]_LL þóŸÿÀÏÏ÷îÝ~ßÝ»w‘œœ,TöÆü∈ˆˆˆˆˆˆŒÓàQqøða <ïÞ½ÓxÝ—.]Bûöí±aÃÔªUKúæj*~{•*»víZ<}úT²ž>}úÀÞÞž'‘b°žˆ „;v`È!*§«QÅëׯѧOìß¿¥K—VZ¶R¥J°¶¶Æ‡$ëõððPúúÚµkqåÊÉzZµjÅ`=‘b"2xGÅàÁƒµ¨Ïôüùs|óÍ7’)nÌÌÌ0lØ0Éú,--1xð`~‰DDDDDDDDFŽÁz"2hÑÑÑ0`ÒÒÒòm›.\À¢E‹$Ë5 _ýµÂ×íìì°jÕ*T¨P_$‘‘c"2Xøá‡«ÒûlmmáîeË"%%/^¼ÀÅ‹'\GPPz÷î%J(,#“É0}út`Ó¦M¸qãQ²dI4lؽzõRú~""""""""2 Ö‘ÁÚ¶m"""„Ë+V &L@§N`aa‘åµÔÔTlÛ¶ “'OZÌõýû÷ „ $ËÖ«WõêÕãFDDDDDDDD 1 ¤ôôtÌš5K¸|•*UpøðaôèÑ#G LMMáïï½{÷ÂÁÁA¨Î-[¶ ==_©Áz"2H‡Æ;w„Ê–(QëÖ­ƒ½½½dY{{{ Õûüùsœ:uŠ_©ipˆôHJJ nܸû÷ïãùóçˆXZZ¢dÉ’prrBõêÕann®“ý{öì._¾Œ ..EŠA‰%àîîŽJ•*å뾄„„—;v,…Ë7lØMš4Á±cÇ$ËþóÏ?hÔ¨O^Ê!11§N£GðêÕ+.\r¹•*U‚»»;LMùLDDDDDDDÿ‘"KNNFXX¶nÝŠ“'O"11QiùÂ… £AƒøòË/áïï+++ámÅÄÄÀÃÃC²ÜêիѦM@ZZ6oÞŒU«VáÒ¥K ßãàà€૯¾RiŸò"%%*ëää„=z¨¼€€¡`ýõë×¾6tèP„††JÖñçŸfÙÇ àÁƒ*ïsÛ¶msümܸq1b„Á]¢çª½½½Òó®]»ɺ\\\püøqµ÷ýÉ“'˜>}:vìØñé[vEŠŸŸ† WWWÞ‰ˆˆˆˆˆˆˆipˆt)$$žžž1b>,¨>ª#""0fÌÔ«WË–-ÓxÞô—/_nݺ…Ö­[cÔ¨Q’ÑÇcâĉhÞ¼9®]»¦ÕãvöìYÄÅÅ •íÔ©SžF07nÜX¨ÜÍ›7y"Ó'[·n…··7BBBê ..!!!hÙ²%&Mš„ÔÔT<"""""""#Ç‘õD:ðþý{ 6 ûöíS«ž×¯_cüøñعs'–-[¹\®‘ý{ùò%Nž<‰>}úàÇ*½7::~~~ذa6l¨•ãwþüyá²¹6áàà€#F 99Yi9™L†ääd˜™™ñÄ6r[¶lÁÙ³g‘‘‘!üžôôt,\¸·nÝŠ+x1ë‰òÙ»wW¯j¬ÎS§N¡C‡ CéÒ¥Õ®ïøñã˜?¾ÊúL‰‰‰4hŽ;;;;Ã7n•+\¸0jÖ¬™çíŒ7Ž', ;sæLžß{àÀŒ;³gÏæ$""""""2RLƒC”2220hÐ ê3Ý»w½{÷– .âèÑ£yÔgzñâ-Z¤•ã%T®bÅŠ\Ä“ ÆúõëÎADDDDDDd¤¬'ÊGýõ—VƒqW¯^ÅŒ3ôæó#--Mãõ>yòD¨\ÅŠyÒ©áÍ›7xþüyžþ‰®)@YMœ8QãkP‘aàS¢|rçÎL:UëÛY¸p!Ú´iƒúõëëü3¿xñ—/_†‡‡‡FëÍ\WJÑ¢Eyâ©!00!ŸÝ¸qÛ¶mCçÎy0ˆˆˆˆˆˆˆŒ ƒõDùdÁ‚Â)jœÑµkW¸¸¸ P¡B¸ÿ>BCCqóæMÉ÷fdd`öìÙ Q{Ÿår9üýýáîî <~ü*-Œ{þüyë“““…G[[[ä¹râĉ,‹”úúúâÊ•+’ïÛ½{7ÜÝݳüÍÄÄ„_>«Q£:tè'''˜šš"** ÿý7nݺ%ôþM›61XODDDDDDd„¬'Ê/^¼À–-[„ÊvîÜsçÎ…™™Y–¿>“&MÂâÅ‹%ëGdd$ÜÜÜò¼ÏÞÞÞXºt)Š/žåïƒ ©S§Ð½{w$%%IÖ# ¥JN~+++¥¯?~üOŸ>U{ŸjÔ¨sss}ƼØ *Äý:6qâD|ûí·9þ>tèP|÷Ýwغu«dGÅË—/!—Ëy@‰ˆˆˆˆˆˆŒ£:Dù`ãÆBAf'''Ì™3'G øˆ0aΞ=‹óçÏKÖµzõjLŸ>=OûkmmåË—ÃÎÎ.××½¼¼àïïàà`ɺ4 ÿœ*9ðe2™Ò×W®\‰   µ÷éÌ™3pttä‰näzöì™k LMM1cÆ >|oß¾•<Ç:„nݺñ .0K”"""„Êõïß _—Éd:t¨P]ÇÏóþZ[[+ ÔgòòòªK*0ITPÔªUKéë¶¶¶øâ‹/„êºzõ*(‘‘a°žHËRSSqöìY¡²¾¾¾’e|||„R®Ü¾}[x!Ö¼(Y²¤P¹ÄÄDnW•1¢¹í‰òKãÆ…Ê]»v‹ˆˆˆˆˆˆÈÈ0XO¤ewîÜA||¼d¹2eÊ \¹r’åÌÍÍQ§N¡m_¼xQkŸ+·T=¹Q%m&· @è¸å§ •»{÷.‘‘a°žHËDG·W¬XQ¸NnÛ˜™™Iæ¢ÏÄ`=é›R¥J •{÷î‘‘á³DZöúõk¡reÊ”®S4à÷æÍ›yLår9^¼x¡±cO¹Û»w/j×®§÷Ι33fÌàAÌÆÚÚ… FJJŠÒrIIIHJJJyEDDDDDDDGÖi™è«VVVÂuŠ–-¨ÁzÑL%Bú¨hÑ¢BåÞ¿σEDDDDDDdD¬'Ò²ÔÔT¡r… ÖxU… „ÊÝ»wOéæñãÇãéÓ§¹þ[³f O^ÒŠŒŒ ±èBü‰&""""""2&Œi™P¹„„á:EËŠnÛÐT«VM¨\ZZΟ?Ï“ôJRR’P9kkk,"""""""#Â`=‘–•,YR¨œ*‹Á>}úT¨\ñâÅ ä1­[·®pÙÝ»wó$$½‘ššŠ>H–377‡™™‘a°žHËDƒõªäW¿wïžP¹%JÈcêéé)œ·Û¶mHLLä‰HzAô¡œ­­-‘‘a°žHË*T¨ ÉrwïÞÅ«W¯$Ë%''ãÊ•+BÛ®]»v<¦æææhÞ¼¹PÙgÏžaÙ²e< ŒL&*'šÿ]_ܺuK¨œ‹‹ O"""""""#Ã`=‘–™››ÃÓÓS¨ìÞ½{%Ë9rD(çuÅŠQªT©{\{ôè!\vΜ9¸víZ?×ÒÓÓ Ìg)R¤ˆP¹÷ïßTÀþÂ… BåªW¯Î›'‘‘a°ž(4iÒD¨ÜÒ¥K‘’’¢´Ì’%K„êòöö.ÐÇô‹/¾€³³³PÙ¸¸8ª°þü¹Þ|VÑQæ¯_¿.0߯ÐçŽÇÕ«W•–9sæL¾ìó7”¾ž‘‘íÛ· ÕÅ`=‘ña°ž(øûûÃÔÔT²ÜÍ›7ñóÏ?ç°ÏÈÈÀôéÓqüøq¡möéÓ§@SüøãÂå_¼x6mÚ`Ê”)ˆŽŽVXîîÝ»7nÆŒ£7ŸU4?ÿ®]» Ì÷+“ÉP¬X1¡²'NT¸.AXX&Nœ˜/û¼zõj¬^½ZáëAAA’ýÌÏÞ²eKÞ8‰ˆˆˆˆˆˆŒŒ)‘ö988 K—.Ø´i“dÙõë×ãäÉ“€‹‹ LMMñàÁlݺUrq&ooo¸»»øãêïïµk×âôéÓBåÓÒÒ„   ¸¹¹ÁÑÑr¹©©©xóæ nܸGéÝç´³³*·aÃÄÄÄÀÛÛ666HIIAll¬J5ôIÍš5.YîøñãðññA`` *Uª„¤¤$<|ø{öìÁ¹sçòuŸúé'„„„ cÇŽpvv†™™?~ŒíÛ·ãØ±cBuxyyÁÞÞž7N"""""""#Ã`=Q>>|8BCC‘šš*Y6** üñGž·õý÷ßÅ1•ÉdøóÏ?ѪU+|øðA¥÷FFF"22Ò >gùòå…ˆ‡‡g p[YYl°ÞÓÓS(XwîÜÁäÉ“õb¿/\¸ œ›>7¼a!¦Á!Ê'UªTÁO?ý¤õíôïß76šãZ¡Büõ×_(TH7·3;;;ØØØhu^^^FyÍøùùÝg®P¡ºwïÎ&‘b°ž( >M›6ÕZýU«Vů¿þjtǵeË–X¸p!LLLòu»ŽŽŽ έžWMš4µµµÑ}¯®®®hÞ¼¹Q}æ_~ùEh} """""""*x¬'ÊG2™ K–,A54^·ƒƒÖ­[ £<¶:uºuë„ó»««W¯^8xð \]]µ¾- 0À(¿×ßÿ]x]E¬­­Q¢D ­î§µµ5d2™ZutèÐÁ(gÑG Öå³bÅŠaË–-hÕª•Æê¬S§vîÜ©Rnó‚¨E‹Ø¿¿Vg/4hлvíÂìÙ³µžþæs£F‚§§§Ñ}§®®® Êó¬ +++lذAëU5j„Ù³gçùý^^^˜;w.oDDDDDDDFŒÁz"(Z´(Ö¬Yƒ9sæ T©Ry®ÇÖÖãÇÇŽ;P¦LX|\ŒuÓ¦MX±bÜÝÝ5R§L&Ã_|7bÛ¶m¨[·n¾. ¬]»íÚµ3ºïÔ××aaa([¶¬JïsuuEhh(<==µ>²ÞÉÉ ={öļyóTNYÔ·o_lܸQíDDDDDDDdؘ—HGd2áïï°°0lݺ'Nœ@RR’Ò÷™˜˜ nݺøòË/ѽ{w£Ìe.Â××¾¾¾8wîÂÂÂpèÐ!DEE ¿¿xñâhР5j„öíÛ«(Ö;;;¬\¹ûöíÊ+pôèQ¤§§+,oee…FˆïÓÓÓX¿~=V®\©ô»tssC=Я_?.\ —˵ºNNN€nݺ¡qãÆøã?°sçN|øð!×òhÛ¶-ŒÚµkó‚%"""""""Èâââ2x(»gÏž¡B… <ù,%%‘‘‘ˆŠŠÂóçÏŒŒ XZZB.—ÃÙÙÕªUãÜëüùóxöìΜ9£1/>>;wîÄÎ;‘ššÊ†ÑAúÈÊ€q“æ€ñó˨<2DqautÖÛgùùùA&“áÑ£GgÛý‹™² ˆ^< ¬ E^^Z·nÍ ªB”?¬¨¶ËãÇ‘——§À×///:týû÷ט÷äÉìÚµ зo_Ô®]›SNòÈG4ƒòò¨ÀÌFöõöYîîîxðàìííÑ¢E ¶-Ñ¿ƒõD/m=ëµM#Ã{øð!õžõÚ¦éÃðáÃ1|øpVz%‘GiéAŸ– ¤§À¸™ `l¢·ÏjÕª¶lÙÂJ'""""""ú`¢—HPPLMMÕzØjëÁM† SSS4oÞ\œVQÁzª\ÚÒÝ<ïmÿ +ˆˆˆˆˆˆˆˆÊ„=ë‰^iiixòä Z·n sssqzQÁú±cÇB*•böìÙ>|8öïß‹/âéÓ§077GëÖ­1yòd¸ººêüܘ˜8pþþþJ¥°¶¶†‹‹ FöíÛ‹åd2FŒ¹\ŽO?ýîîîï5wî\âÿû¼½½5æ/]ºç΃««+Ö­[§6/** û÷ïG@@¤R)ÌÌÌиqcôë×£GV«“ªÐVOŸ>EË–-ÕÖK™Ç¾eË–:—ýûï¿qàÀ#//0`ƇŋãÚµk3f æÌ™#.óÅ_àÚµkjõ6aÂ$$$¨½÷´iÓŽŽŽØ±c‡ÖÏ ľ}ûðàÁdeeÁÎÎýû÷ǤI“P­Z5µ²‡† —.]Òú~ß|ó .]º„V­ZaãÆZËäååáÀ¸xñ"âââ`nnŽ-Z`̘1èÙ³g•;åQšipÄÞöM^ÑkÛªÖñùóçabbRæ¶%""""""¢ªÁz¢*¬Y³fGiœT™¯¼cÇŽ8wîœÚ¼„„̘1QQQâ´¼¼<üõ×_ð÷÷Ç·ß~‹nݺi¼çùóç±bÅ äçç‹ÓRSSáçç???̘1ãÇX[[£eË– B@@€F°>##C̹ýúu­Áú»wï:wî¬6ýêÕ«øöÛo‘——'N+((À£GðèÑ#\¸p«W¯F5 ÖV...m ²C† ´oß¿ýö›8}Ïž=)O"##±}ûv\½zFFF%^Ÿ5j ''ÈÎÎÛÈØØXg=>|Û¶mS›‹_~ùwîÜÁš5k`bb¢×zËÉÉÁܹsñèÑ#µ}3 ˜:u*¦L™bÐã0÷»¹(üó¬ÆôìIšÇLÞöåÈÛ¾`yè.`^­J´-U} ÖUaööö¨^½: 332™ 666°´´ X'%%ÁÜÜuëÖØÚÚj¼Ï¡C‡`nnoootïÞÆÆÆøë¯¿ðË/¿ //ëׯG×®]Õ†X²d  K—.˜>> B`` .^¼777½Ö[LL ŒŒŒ0jÔ( 05kÖDxx8vìØèèhìܹmÛ¶E»ví Ö¶F5jÁ¨N}€Ÿd¦æÕad]S,#¤&‚ –S,hTeÚ–ˆˆˆˆˆˆˆª>뉪0???ñõôéÓqèÐ!øøø wïÞ©GÆŒ///¬_¿^çû˜˜˜`ùòåjÏW^yùùùðññA\\âââаaC€\.ÇòåŠÞÁíÛ·Çwß}'òmmmñõ×_ãí·ßFDD~ùå,]º€"Ⱦk×.$$$àéÓ§°³³?ïúõë€jÕª!777oÞ{˜Ï{ÕרQÎÎÎjuðìÙ3À’%KÄžê‰-Z´@~~>Ž?Ž+W®@&“ÁÚÚÚ muñâEñõìÙ³qôèQlݺULãråʼþúë5jÖ¬Y£±üöíÛ5kÖÄ?þ¨öô„‹‹ š5k&¶IEéÒ¥ –,YSSÅ¥ÁÑÑ­ZµÂ¤I“ “ÉpóæM½ëàý÷߇§§§øãÆÑ¾}{L™2éé騵k—Aƒõ泿_œ9€¼ a6zÌ&ÎULÌ{†ìqaTß[.Tɶ%""""""¢ªÌ½$üýýadd¤´ô÷÷ H}S777­ÁNÕìOž<_ߺuK̉=wî\&&&=z4Eye0½U«Vb°< @,/—Ëñ×_ÁÈÈ'NܸqCí=ïÝ»'n‹±ñóS“L&?SÛS£F¸qãàå奖&Ç`dd„¶mÛªM€:h”—J¥ xxxhMs4dÈÔ«W¯B×ûƒ>õJ5kÖ¢/Ê4OÚ(Ÿ €ÐÐÐ*q,†*‚õ&Î*ÁúGŠ}×DK°¾ª´-U}LƒCôPö 1(ûömXXXˆ9ãKKµÇ¼jÎleîø¤¤$qàÚ¢¨Ð;wîŒ?þøC-X¯LÓ½{wØÚÚ¢E‹ Ž{÷СC¤¦¦"66V\^U‡0tèPœ:u çÎÃÅ‹áââ‚öíÛ£k×®eÞöŠ¢ÜîŸv€……Z¶l©±ŒT*_ÛÛÛW¹ýO¹Ÿ”&¯º>H$­ud0¹9¢Ã`dߨQKœ\¨ìmïÜæ¥k["""""""ª:¬'ª¢zõê…ŒŒ @VVàØ±cj¹Ñ¥R)LLLÄÞì...Ø»wo¹?ûÅÞëÅQM?£ ¶'&&âÉ“'°··W Ö@Ïž=Šëׯ£C‡b¯ú&MšhMòñÇ£ÿþؽ{7îÝ»'þíÚµ 4À”)S*$—zI 0™™™€ììlÀ‰'pùòe±Lrr2LLLÄ:hݺ5víÚàyuµ''þëjÕzW¦Zªlyë¿DaÀ5Å?…€\Aú9o>ï%/¤&r—ÏŒMªY°m‰ˆˆˆˆˆˆ¨Ä¬'ª¢bccÅ`½RFF†Æ´ÂÂB±WºjZ›ò033 è¾xñâbËW«VM|-‘HШQ#ÄÄÄ ‚ ::õë×G³fÍ=zôÀÎ;qãÆ Ìž=[ÌWÿb¯zU:uB§N™™ ÀÏÏqqqXºt)BBB0{ölƒ´U\\œ¬/®­âââ4ÚÊÂÂBœŸ••+++PÿѨ¨t9IHO†¯>1?Os!9áù?r9Û–ˆˆˆˆˆˆˆJ…Ir‰ª¨ÈÈH¤¤¤ %%NNN022Bll¬8mþüù€µk׊Ó.]º¤—ÏV’£££aaaQìß‹ù¶•A÷;wê»uë&ÎoÑ¢ê×¯ØØXÄÆÆêÌW¯M5Я_?¼ÿþûØ·oúöí 8tèø£Ee{ôèâããGGGáñãÇâ´?üðý÷ß‹ÓNŸ>-.¯ú4AE âZQt¥QÒ—§OŸj­£ÊTmÁFXúÃÒ7¦n^Ši_m§U_ê0éë)N³ô ,¬^ê¶%""""""¢ÊÇ`=Q—ÈÈH8::ÂÒÒRœþðáCÏ`Õ§6m¹·“’’Ä^ïÚè Ðj Ö+Ó¿(õèÑpþüyDDDÀÌÌ mÛjÐùÉ'Ÿ`Þ¼y8~ü¸Æ<333L›6Mü?<<Ü m•““ƒ¨¨(4iÒDìQ <dTW~}ÕéEýàRXXX¥öMÕýñÅ' ”TÖ¦¨ô6W®\ øQà•W^1øöÊ£BNÇWT¦…jLû7´-U>뉪¸‡B |PPh°´¼(b×­[§5 š••…÷Þ{§NҘ׮];˜šš")) ·oßFµjÕļúJÊ`ý Ú´i£–NGõsîÞ½ ___äççkÌWÀÓÚÚÚ m A4‚òÊ`½³³³ÖåêÔ©#ÖÏo¿ý¦uÌ€'N”iUSÓçÙΔùôõ¥Q£Fâkå ȪBBBÄkt‰ŽŽÆ±cÇ4¦§¤¤àÌ™3ƒ ÛØØö@È£ÃkÕ}>ð­ÀoòÊ¿ªm‰ˆˆˆˆˆˆ¨ò1XOTÅ)ƒò...â´gÏž!<<ŽŽŽ ¶²²ÂÌ™3aaax÷ÝwqãÆ ¤¥¥!11.\À;#ÀÀ@9rD£÷tõêÕñꫯPô¾ïСÌÍÍÕÊ´k×–––✺RàLœ8€¢×ü‡~ˆëׯC*•">>gϞŲeË(Ò(?ÓP”O;¨ëŸ={†ˆˆ4iÒ¤È|åo½õŒŒŒžžŽ¹sçâòåˈ‰‰Áƒ°nÝ:¬^½ºLëdgg'¾Þ·oBBBðàÁ½loË–-Q§NÀš5kàëë‹ÈÈH<|ø»ví¼yóŠíY?üðÖ®]‹û÷ï#&&—.]Â{ï½™L˜:uªÁCái ð,[£½®®®?uõ —G‡V5`dk÷¯j["""""""ª|ìYOTÅi Ök›V&Mš„-[¶ÀÝ݉fff°±±AË–-1wî\¬_¿^çÀŸ]ºt_k Ö@¯^½(R…4mÚTçzLž<?þø#ú÷ïzõêÁÔÔæææprrÂøñã±k×® ¯‹’Pö¬WMM¤ à—$]ÑèÑ£±jÕ*têÔ ÖÖÖâ6¾ùæ›øá‡ħTv-‰o¾ùîîî°±±™™6l¨·mîÛ·/Ö¬Yƒ.]ºÀÊÊ ¦¦¦¨_¿><<<°yófqü]$ Ö¯_7ß|NNN077‡••Ú·oeË–áõ×_¯ǡ؃^%X/$ÅÙ2)p^ö¶%""""""¢Êe”••%°èE prrbEU!ÇGVV¦L™R%RÃÛ–ˆˆˆˆˆˆè¿"""‰¤TËD†>„C#Ç—gÏz"¢*"==]缨¨(deeXYl["""""""ú—a°žˆ¨ ˆ‰‰Á”)SÄ<ÿ/Ú¹s'Ežx]ùý‰mKDDDDDDD//0KDTœ:u éééøøã1vìX 4uêÔA\\öíÛ‡k׮ƌƒÚµk³ÂضDDDDDDDô/Üõ¤sÖU®‚‚,Y²—/_ÖYfÀ€øüóÏabb cÛQ%ªŒœõ Ö“V ÖÆÝ»wñûï¿ãîÝ»J¥°²²‚³³3<==Ñ«W/VÛ–ˆˆˆˆˆˆˆ  2‚õLƒCDT…´mÛmÛ¶eE°m‰ˆˆˆˆˆˆè?†ÌƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘™² ˆþÛòóóñèÑ#$''£víÚpttDÍš5Y1DDz$ÂÃÃêÕ«£qãÆH$¬*‘ÄÄD„……A.—£Q£Fhܸ1ŒŒŒX1DDDDDÿ2ìYOô•ŸŸï¿ÿ...4hÆÁƒcÅŠ¬""=:zô(ºv튞={bìØ±ðôôÄ„ X1ÿa›7o†ìììpâÄ åîÝ»OOO´iÓ£G†——ºvíŠôôôb?#88XüŒÏ>ûì?YÁÕÕvvvèÙ³'wä—\hhh•?F¦L™"®crrr¥~ö®]»ÄÏ>zôèbŸXø]z D¯¡‘HK—ó !xNŒF¯¡‘˜<#Î`ëpøD†¸_^òËf£ý0XOT ¾ÿþ{ñfWÛ_Ó¦Mѽ{wLŸ>¾¾¾(,,¬ðuš7oV­Z…ŒŒ µéµjÕbƒý‹$''cÀ€hÞ¼9~ýõWVQ%Û½{7fΜ‰èèhµéµk×fåP‘nnnˆ­°Ï»sç> °µµÅŽ;‚ððpÌš5‹ ¢…jϦ’ôh¬ ÷ïß×éË/¿ÔZæ?þ@PPd2¶oßΆ$ªDyyyøæ›oÄÿ-Z„{÷î!::;wîdQ‘–-[†ìlEº±cÇâúõ눎ŽFPPSà!!!ÇGNNöîÝ[e®Ù¼&W½{¤—÷§ªËÝ+ ½†Fbêìx½”{ݼ•ƒ$i!LM÷ÖZËddÊñÇõ,Àð!Özý|iJ!.þ‘…Ü\¿•!S¦ù¤Ä§ß$Š=ÖµÍ'"2æ¬'ªdÞÞÞèÞ½»Ú´ääd„……áСCÉd Âo¼óçÏÃÔTÿ‡éü!¾ž?><<<Ø0ÿRݺuCƒ ðäÉŒ3†BT‰Å@á¨Q£0cÆ qž¹¹9+ˆŠtõêU€ƒƒÖ¬Y#Þpß)Z½zõлwo\½zƒ®RO!ðšLÜŸè¿âÄ™L@ŸîV¨e£½èé 2äç¶uLн³¥^?¿N-tjW·î‚»»;ââ⌠.ÀÝÝ]ïë •>ÐÕÕ•ò/fooäççÃÌÌŒBT‰x®¥²ÊÌÌDnn. U«VòÃý¿•±±1<ˆ¼¼¼*÷ïÉÄý‰þ ’S ñçMÅ“ažîº{Ì+únÖ0Ñs,ÝØX»Ôùù"zéîgYDU‡­­-fÏž-þÿbžZ}A|Í›ûÿ¶3Qå“Ëå<©ÜûõeS•Ÿ@àù€¸?ѿ٩s2Ê»ú¦èÔÞBk™Á¹ˆˆÊx®QÇÛƒˆ^> ÖU1Í›7_¿8ø«*ApáÂL™2;vD£FЦM¼ñÆðõõÕ(Ÿ˜˜(æîܲe‹8}РAâô?þXëgÅÆÆâ믿F¿~ýмys4iÒ;wÆìÙ³áççWäö¸ººÂÎÎÆ C^^V¯^=z aÆèÝ»w¹·«4233±nÝ: :-Z´@ƒ кukŒ3;vì{1*}ðÁbÝœ9sFœîìì\dþúŒŒ lذ#FŒ@Ë–-Ñ A¼òÊ+6lÖ­[‡ÌÌL­ë*¾ïÒ¥K‘˜˜ˆ?ümÛ¶…½½=æÏŸøøx±Ì AƒÄe·lÙ¢57«jÎÖÏ>ûLgû¼ñÆ€€€Ìš5 íÛ·G£FкukLš4I-u’.þþþxçwЦM4jÔ®®®ðööÆ… nnn°³³ƒ——W¹ÚñÆâ6=ºÈ²={ö„4h Ö˹¼û¶¿¿¿¸ß~û­ÎrGËmÛ¶­LÛ›M›6aäÈ‘puuEÆ ѪU+xyya÷îÝÈÏÏ/rùÈÈH|õÕWâ t 6„««+^ýu>|X-(¨j×®]âºß¹sÏž=ÃÆáîî.ÖUïÞ½±lÙ²rå„–Ëå8|ø0&L˜WWW4hÐÍ›7‡››–-[†¤¤¤bß#11+W®ÄÀѬY34kÖ }ûöÅ¢E‹ðôéÓ _^×~÷¿ÿýOœ¶páB±>{ö쩳­7nÜOOO´nÝZ<ÿMœ8ûöí+rðñÒžk_´zõjqýV®\©³ÜÓ§OÅrýû÷×z?zô(¼½½Ñ¶m[4jÔ­ZµÂ°aÃðÃ?y]›0a‚øÞÏž=+¶~[µjUîz(íu¡¢¯Yü1ìììàìì,N;sæŒÚ ô‰‰e„/77›6m‚‡Ôó¯ò IDAT‡Z´hGGGôèÑ .Ô8β³³Ñ¬Y3ØÙÙ¡iÓ¦bî|m>úè#qÝN:Uêõò÷÷Çûï¿nݺ¡iÓ¦âzÍŸ?aaaeÚÖ-ZÀÎÎ}ûö­°s«.·nÝBÓ¦Magg'''µŽE]“Uï6nÜðõõÅøñãѺuk4lØ:tÀ{gÇ»G…——Zµj…Æ£S§Nxÿý÷™L&~Öš5kÊ´å9Ö+êúRÚ{$mŽ?^æ:×÷µ¤8•¹?iSXXˆ·ß~[üœ7ß|³ÈëÔËHš\ˆ7§àõ·c1`D‰Â;<Á±S™xñöiÜ›±bþó¬lEǨ°ˆÎ+v{î=ÈÅ×+’0fj úˆÄÀQQ˜ðV,¾ûAаˆ<í |²(GEaéi Î Àogßu†»[C×+'N+Êtl[öº”~œ‹…ß%aĤô{-ž£ñé׉¸q+0íÝxô‰÷>Ó<Æ”cLž'Nûn­T¬k¿ϯmã¢K”¿>è‘¢Gy+ÖgØ„h|´0<Ó¹þÊ÷Ý´#Uçûž¿’%–;|"£È:NN-ĺ-)˜øvŒŒÂ`¯(¼õ^<öÉ@/]ë¼l­ãߌŠQQ02 ¯¿‹•’[ü$$bÃÖxÏŠÃ`¯( ¯©±øæû$ܾ«ûþ.ôñóãàÀ± äå Ø{$ï|ðCÆFcÀˆ(Œ3?nN4åù¹&5MŽ->©˜<#n££0pT&ψÃÏ;S‘žÁ±èåÄ®:DULDD„øºI“&ZËÈd2Ì™3§OŸÖø’pþüyœ?GÅ–-[ÊÝ#oÏž=øüóÏ5'111ˆ‰‰ÁáÇ1zôh¬]»¶È^l999˜4i’˜ƒ€Æy¹]ÁÁÁ˜4iâââÔ¦§¤¤àÚµk¸ví|||°oß>H$’2××­[·ðæ›o"!!A#€ïïïlÛ¶ {÷îÕhRŠŽŽÆàÁƒÕ¾ÜU䀂ÙÙÙX¿~=–,Y¢öäEJJ .\¸€ .`áÂ…: Ö¶¬T*ÅÙ³gqöìYL:UoƒüuíÚ7Ftt4®_¿Ž„„­möèÑ#ñ hß¾}akk[!ûvE ÆÄ‰¯þÅ-55~~~ðóóï¿þ Ô«WOcy|ñÅÈËSÿ&•JqéÒ%\ºt >>>øå—_P³fMë†9sæhÎBCCñÃ?àØ±cøí·ß4ê¸8™™™˜:u*®]»¦q. D`` |||°mÛ6ôèÑCë{œ={³gÏÖøìÑ£Gxôè~ýõWìܹ½zõªåõåÎ;˜:uªF@'11/^ÄÅ‹±uëVüòË/°··/×¹V///¬X±B V}ôÑGZËýþûïâës$'''cêÔ©O…¥¦¦Šç¿Ÿþ[·nÕÙžúR’z(ïu¡2¯Åå•””www«MÇæÍ›±ÿ~ìÛ·íÛ·XZZbøðáØ¿?²³³qöìYŒ9Rã}år¹øcvÍš51pàÀR­×W_}…ŸþYczxx8ÂÃñgÏ,Y²ÞÞÞUêÜZTðtâĉÈÎΆ™™vìØÎ;—zýÒÓÓ1mÚ4?âãã±ÿ~øúúbÏž=c @~~>¦OŸ®v¬Š§÷îÝ‹ƒâ“O>)WýéóX¯¨ëKiåææÂÛÛgÏž-uW¥k‰¾÷'ÝY~ø!Nœ8!ÞgmÚ´ &&&•¾}iii°±±Ñû}ò_·s°r½Ù9ÏïmóòÌÁ¹¸ñw–~YÆ•Ôý1QZ€¿JƒÔϧâÌÅ,œ¿œ…OæÚbØ`k-í¬ßš‚ýG_  ˆ/@l¼ ¿Ÿ“aö[u0n¤úý`ph.þüKñ™§ÎÉðÖäÚ¨o«»î=Cl|ŒanÚ{Ìgç¸ð‡b`YÏ!º{Õï>˜ŽŸv¦BåëRÓäð»™ ¿›Ù5¬dY•ŒÝµ/[Q_Ÿô 9nÜÊÁ[9˜õfmLS±ã¤=Ãò¤jÛ—‡æ!84g.ÈðÃ2;ØÔ,ÛŽ¹n‹¶ýˆ‰+@L\&NžÉļu1r¨öv;yV†Õ“‘—'¨MšX€§‰8{) ƒû[á³yõŠ|ê!<2SfÇ!&®@mzÜ“8–³—dX·Üié…øri"ÒÒÕ÷ƒˆè|DD§ãÌE6­r€¤^埛ˆÊƒÁz¢*$..?üðƒøEyìØ±e 1qâDüõ×_€>}ú`òäɰ³³CLL ¶oߎ[·ná÷ßÇâÅ‹ñõ×_P ¸¦ \.^¼;wîT\POžƒÆ/>Œ>ø`ee…éÓ§£{÷î077Gpp0¶mÛ†ÐÐP9r¹¹¹Eö T«V ½{÷†D"Q –u»JB&“©})7n† ‚:uê ** [·nE`` >|ˆ)S¦àÔ©S066Ʋe˰xñbÀŒ3pîÜ9ÅMh@€¸îVVVjÁ…qãÆ!;;æææðöö†››êÖ­‹øøxìÙ³§OŸÆÓ§O1eÊ\½zÕªUÓºÎÇŽ HÔ½{wÔ¬YmÚ´½½½ØŽ>ÄðáÃS§N{‹•åqhüù矨_¿>¦NŠÖ­[#-- §OŸQß~û-† ¦ñ#Ò‰'ÄÞ寯Æxýõ×ѧOT«V !!!ðññ÷7}022ÂØ±c±jÕ*‚___¼ýöÛ¥ *êsß®(ÉÉÉðòòŸpwwÇÈ‘#aoo¨¨(üúë¯øûï¿€I“&áÔ©SjÇðÑ£GÅ€Œ­­-fΜ‰Ž;¢zõêxüø16lØ€   ܼyóçÏǦM›t®Ë‡~ˆÜÜ\ <Æ ƒ =z„Í›7#99QQQX¼x±xþ*©wß}W ÔwéÒS§N…ƒƒ’’’àëë‹'N 55ÞÞÞ¸zõªFúâÅ‹b¯fÍš˜9s&ºu놂‚øùùá矆L&ÃÔ©S+dy]Î;ApöìYÌœ9ðÅ_ˆ=í_ („††b̘1ÈÊR|q0a<<|èÑ£&Mš„F!-- çÎÃîÝ»‘’’‚ &À××íÚµ«°ã§¸z(ëu¡¢¯Yß~û--Z„ŒŒ 1pîææ†Ÿ~úI,ciYúAøNž<)®çˆ#P¿~}$&&âðáÃøóÏ?‘žžŽ7Þx~~~¨]»¶X'û÷ï øG[°þÖ­[b¯|OOO×4mV¯^-êmmm1cÆ ¸ºº¢°°ÿý7~þùgäääà“O>­­-†Z%έE'L˜€ŒŒ ã§Ÿ~B¿~ýÊ´Ž?ýôrssáêꊉ'¢aƈ‡‚‚‚““ƒyóæáúõëjû% xŠGyý³±±Á´iÓжm[äææâöíÛøõ×_±téÒ2ן¾u}^_Ês´oß>Èåò2ÕyE]Kô¥<û“._~ù%öíÛèܹ3vìØa°Ž ß|ó ±sçN½þ0úíª$˜šaôðhëZFæâèo((ünfãÌE<)‚ã>ˆ½íGMŽFV¶€¦Žføi•ˆ9ÙKZNã^ýŸÉ.-«aÈ@kHê™"-½þÈÂMÿÊï~±±\ZªŸ‹Ï°võM1ÑËŽÌð,WÀÀg8蛎ü|àÇÍ)p°7E¯®Ï¯3šÁ¶Ž ¤)…pjl†ºµ‹z*óÐwíhz:‚úç¯ÈóL@ kcôé¡ýšvÉ/[ì‰nl u³F—ö033BdL>ŽÊÀÑß2Kݮ̮‹¹ïÔ,Zž(þqÔ§¬¬•oi¡ùÃOTl>¶ø¤¢nmŒV̑͜)“ãêl\½®è¡ÿÓŽTôëaUä“åuàXLL€aƒ­Ñ¡¬­Œ—ã§2_€°ˆ<|¹,?.³+õ{ïÜ“&î'µkcÂ(´hf¹\ñ#Á¾£ÈͰr}2j×2AßÚîì¥,|·V*Öḑ6hëZæfFÊÃ!ß DÅäãì¥,äæ X² ¾îû–³2˜˜(Ú½S; XZ!*&GNf !©iér|¹4‰Òdg Üß Û[ÀÊÊQ1ù8ö›¢\¢´«7J±ü+ ˆ^*YYYÿø÷â_xx¸@ú³bÅ A"‘‰DX¼x±àçç'þ]½zU8|ø°ðÅ_NNN‚D"6l(œ:uJë{­ZµJ|¯O?ýTc~~~¾àáá!H$ÁÁÁAˆŒŒÔ(óÅ_ˆï¨õs„¦M› ‰DpvvBCC5Ê<{öL=z´ø^Ð(ãââ"Î>|¸””TaÛ¥ËîÝ»Å÷^¸p¡Æü‚‚aĈb™ .h”ñööç§¥¥iýœ÷Þ{O,sòäI­ef̘!–ùý÷ßÕæ…„„ˆó$‰ðÙgŸ ¹¹¹:·+00P,ûÅ_[F[½ª¶§§§ÖmSÝ_Ö­[§6///OhÛ¶­ ‘H;;;áÌ™3Ëgffªí'cÆŒ)÷1)¾ßСCµ–qss$‰àèè(deeéuß¾uë–Ú1­Ë‘#GÄr[·n-Õ6Λ7O\vÓ¦Móår¹0wî\±ŒÚüÎ; ‰DhÚ´©¥±|VV–еkWA"‘öööBJJŠÚü;wŠïmoo/9rDã=âããÅó–“““PPPP¦62dˆÖe—.]ª³ž“““…Ö­[ÙŽgΜ—Ÿ7ož^—/‰S§N‰ËÿüóÏ:˹»»‹åŽ;¦µŒj]h[—’žkKz®\²d‰ÆüÔÔTÁÁÁAH$ÂÈ‘#Õæ-Z´¨Ès Âùóç{{{A"‘Ý»w×hóñãNj“£s={ôè!H$¡eË–e®‡ò^Ê{ÍúùçŸÅå}}}5–OKKç{{{—é<ùðáCµkÊúõëµ–ûðÃÅ2_~ù¥Ú9¦cÇŽ‚D"7n,dddh,ûÕW_‰Ëúùù•xÝ"""„†  ‰DèÒ¥‹Övzøð¡àèè(H$¡]»vjûKqõ×¼ysA"‘}úôÑû¹U¹õèÑCœ%´k×N\fß¾}¥¾&¿xðùçŸ ………ûÕàÁƒÅ2þþþufgg'H$ÁÅÅEë¹?44T¼nK$aõêÕ¥Ú¯ôq¬Wôõ¥¤÷Hú¨óо–¨ÞJ¥ÒJÝŸTÛIµT¯GÒÓÓ ú=ëܹs‚D"¦OŸ.äåå•ë½¾\–(ôôˆzzDž£…°Í÷ûãÏ,±Ì‡_>Õú>ƒÇD =="„)³âŠü¼’”ó%~Þú-É‚\®Yf‹OªXfúûñóGMŽzzDn£#…$©æ±tãV¶¸üÛóâµÜ3Ê…àÐ\!7W^äödd ý_SlÓ•?³t–{ë½8¡§G„°ö§d­óóóaÄŠuî54B𻑭uÞÿD\﹟>ÑY¿o¼«õsæ .Ÿ‘Y¨µÌðן×ÿÌãµ–ûáçd±Ì¯Ô¿KÝøLœ·q{Šîýø²L,wÈWý˜:ä›.Î02R¸}Oó);G.L'–»z=«Tû~l|¾Ð×S±ìØi1Bjšæv>ŽÈŒTÔéÈÉÑBJiJà6Z1oÈØ(!*FóØÉÍSo³ßÏgªŸ·ÂrÅy½‡EhngV¶\xýíX±\OáÔ ï#‚)+÷û¢Ú—¨,ÂÃÃKc}pç–š,-ñsÖU²õë×c̘1⟗—fÍš…-[¶ ;;Í›7ǹsçàáᡱl^^ž˜o¾aÆZ{ꙚšŠ=† Å^/¥µmÛ6±—ç‚ Ôré+U«V ?þø£Ø“fíÚµ:ßÏÊÊ Û¶mÓúsEoWTT”øZ[ŽeÌ;WÌ/úâcñ%åîîŽåË—cÅŠZÛ€Z¾veÏOmÚ·o%K–TZ/¥5j`ëÖ­°±Ñ|tsÒ¤IâkeO:¥ .ˆi;ÜÜÜ0xð`å­­­‹ìµ]Mš4A—.]ħbbbÔæÇÅÅáÞ½{€!C†¨õDÕ÷¾]¤R):hÛ¶-f̘¡õ ƒeË–¡zõê –[.—cΜ9X¾|96lØ€Æk,oii‰aƉå=z¤s}fÍš¥Ö‹Zµã€(R)½ØE‰ŒŒ_÷îÝ[ë£ó3fÌ@óæÍѬY3¤¦ªçùÜ¿?’““‹lÇÁƒ‹½“;&¶»>–×—+W®àÎ;bOõ#Fh-7þ|´lÙRÑ«êÀÔ-%9×çµ×^ƒ………¸½ÚžPæ#V}Z%==»ví4jÔHg/òнOÃÃÃË=IQŠ«‡ò\*óZ¬/ýû÷WÀ^Õ‚ ÄsÝÁƒÅ6622¯Y¹¹¹iU€çO0ÙÛÛ—*…ƶmÛÄœðß~û­ÖvjÙ²¥ødÊ“'Oàïïoðs«6 ;v,ž€˜V®N:j¾hĈ˜Ñš–­´Ú´i£³>KrM633+òÕsiTı^חʬóªr-©ˆm{ÑÞ½{Å´‡ 6ÄÁƒ+|,’022Â÷ßsss\¿~ýúõÞ={ÔÆQ*‹–-t§õªgkúÏ9 òò¥[T7Ò™ߨ®’«þÎýçã1™šBLGž§s Úï¿–`Ï–ص±A™×ñä?)p<YC×ð¾¿+Ê´v®†¦ŽÚÓRݾ÷|ýGxèþ1¨VÍÊËC^ßÖTg Õt?E N« ìu§;íÚÉB\Ç»÷Ÿ•ê}¯ÝTœÛmj£{g åö±ÂáQC-eÓ*–·´0ÒD™n-ZTâÖÒR½q.É Xªe”Í•FEo—••Nœ8 À××X½z5V¯^ ssstïÞ£F¨Q£J58ž6'OžÄüùóÅG¢ÿí222Ä}¸¬½y˪fÍš2dŽ?ŽÀÀ@DDDÀÉÉ ÉÉɸqãE¯LÕÞ˜•½o—•jÊ—²ö€+V¬ÀúõëÅž¤UÍúõëáèèˆÍ›7#-- ;wî#~õÕWáé鉉'jôÜKIIAn®âÑÛÇùô€¶óFy—×'å —¶¶¶Åö®Œý±OŸ>H$HHH€¯¯/-Z###\ºt 99ŠAØ^ ̪žïJr\ÙÙÙA*•Vê1¥ÏëBe]‹+“jÐMy^W7nüýýQPP€S§N‰©Ñ~ûí7Š€º‹‹K‰?Kµ‡tYÏo†<·ŠÁ¤ÈHµt^üñ ‘f»œœñ\ß Aƒ ùŒ—ñX¯HUéZRÑ|||Ä×r¹GŽÁüùóËõžÍ›7×8ß”GXX˜Ú5úO}Ÿ´Uéõ-ËRïEV:ßK&SDVMMQ쀶¤®~=õÞä% Ög¨­Ð´†`è§TS4(slŸ9sFLiQšÞž±oÒÒ¥K±fÍäçç£S§Nضm#î .4è:š™™á³Ï>Ã;wðý÷ßÃÝÝ]L™ˆ¥K—¢K—.ضm[¹ÏÄ@Vy—7Õý±¢Òd‹yÊŸç™ ö”ö,¢Çü‰úûZÁÒ¨ˆócÿ•}Õ˜I"­Ø³ž¨ rvvFtt4är9bbbÄ/‚ª8;w¯¾új…|¾j~qÕ„º¨äT–Ü䕵]€b`ÒyóæaÞ¼yÈÏÏÇ;wpøðaøøø ..'NÄ… ´Vœ%K–ˆÛsêÔ)ƒõ®«LÊTùùùHJJªôÞõýúõC½zõ””„cÇŽ_T IDATáý÷ßSà4nÜ:u2è¾]Vªé RRRÔÒa•„T*ÅÆ:uÂñãǵàZUØØØˆy©EŠ€S§NaÓ¦MHKK `mm-æ`VyðàÁj=þJúyåY^ŸêÖ­‹èèhH¥RÙNªûcEöH7n6lØ@ñ#XÇŽÅãÇ×Hóâq¥mPKmÛQ™Ç”>¯ •yͪ,ª¿8Ðx­Zµ0xð`œ6¾Š<꺖¿þ“¯¼ HI+dïúRHH,(v?ЬïçåÒÒKÿƒs­šÏ——&ß9A*}¾¯ÚÔdÛiÃß±ˆªúAªòsó+¯¼"¾.*GnyYXXˆ¹¹ðìYÑÔ\¿~]|]–¼å¹]‚ ==éééâ hJfffèܹ3¾ûî;|ýõ×€ÜÜ\ìÝ»·ÔŸ“‘‘   @ïÞ½ÿz@ñÃ’REåÐ.Љ‰‰(zôènß¾-öôÒ@Ò×¾­š{¶"zÈ)óEê9‚µ‰ŒŒÄýû÷Õ…¼uë–˜ßwÔ¨QU2P/“Éžž®u`Û-Zà½÷ÞÃÁƒÅž™Êô8€¢wŸàîÝ»¥~£¼Ëë“r¿ÊÍÍ-vÐÁòžkKs\+Ð'NœÀÕ«WÅ´ ÚžVQ]ÕuÔ&,,LLýóâÀ’ªƒUVdOôò^*ëZ\™TÏ3ªÛ§¤|ŠI.—ãĉb°¾K—.¥N5aaa!Éïß¿_dÙììlÜ¿÷ïßWKac¨s«*{{{lÚ´ fffذaƒxÝ_³f ®^½jÐkrttt… Ȫ¯cýߢ*]K*Ú¢E‹Ð¹sgôèÑü1EÇ€™3gìi¥'NàñãÇðööƆ þ“zxœ+¾vjüüzš›+ S&G¦LŽ›ªnm lÍ« ©§¸W<{Q†¬ìÒíËÊ8ƒû[éÌW~âŸÁgš˜Á¥eÑiGš<¿Ï Ë{©ÛÅÔÔHåÞ¦bÏ……@x”¢¾jÙ—(T«f„†Š~¼¡á¹E–Íy& ô±b beúœjՌļóA!¹ÈË+z;•?Ú€óK0&‘!0XOTÅdggãï¿ÿþçÂWM-'hÿþýÅàýöíÛ‹l«¸@dQ<<<(j‡ÒY.>>^ìÉܬY3­_ò‹S‘Û•›› ggg8;;‹½r‹Ú^@½÷ªRq”Ëd2ñuQ¹H‹ ”FUx̽OŸ>âë¢z”i«S}Qm×>ø@Ì«+Ž>ömÕÞ™ñññ:ߣ$½÷uÕ«òƒê,'<==1hÐ Ì›7OëþXT>X}î¥5nÜ88;;£eË–:éW_}U ¾¸ 4 ŒYšsFy—×ÕsÏ‹é~TÉårñ “r§¢)Iû(ƒ1Ê µD"AÏž=5ÊöíÛW ŽìÞ½[-}Û‹¶oß®uÛ_<®tõ ÎÉÉ)w¾çò^*óZ¬/ÊGµILLÄÙ³gõë××:ö€ı#víÚ…[·nyž-Žrÿ•J¥âÀÅÚ8pƒ  Aƒpûöm½\³ÊsnUeii)Ž3akk‹M›6ÁØØ‚ `æÌ™HLL4Ø59??ûöíÓû5Y_Çze¨¬{¤ªr-©h5j<ï ýÞ{ï¡oß¾ >MbHþù'Þ~ûm¬X±¢Ê¥€Òç~š[DzAN{Þù¡}›çOÀíØ“qÑð ÿ»ÏtœÏŒÐ± P¤¦•‚)î½uõ˜/,~?/+²ŒªÎí-Ä×ÇNé¾MJ.(g;Uü¾`£Òë<1© ˆm)YGEë>ï^½žÔ4E½C‹R­g.Šs{jšÝÖâëôþ÷n<þ÷n¼Øîħ5²³œ¾(Ó}Ï!-ÄÕ늎˜•kœ¢3뉪ÂÂB,X°@ì åææ¦–nÀÁÁAÌ%üðáC,X°@k/žüü||ñÅø{÷Eµ·üÙÝd7Énz#¡W‘¢€ ÅPC ½ƒ(MáUŠbA.\E¼(R­T/‚4¥z@"„" (A$„Ò“Í–l?,™dÙMH#ÉÕç÷ ²3›™3gf³ÏœùŸÐÐPa´wiMž=óÉœ—5œ„À>ê’iéö¿çÆ_:lÜZ²§Ç¾ßžó¿9nµÿ-xAaö7EÔ îÆöá=ððR†åßf8,‡“’jÂ÷Û¬}ÐÓCŒ6…n ì!´çª Y¸wß¾³è ügYš0/¸1ž €ˆŠÀšõD•,::'Ož´ûB÷î]ìØ±C˜°ÍÝÝ]¨¿XØ‚ pþüyÜ»w›6mÂï¿ÿŽ—_~5‚Á`@tt4~øáá±í+W®Ø<ö]RX²d ¦OŸŽììlôéÓ“'OF‡ “ÉpëÖ-lذA:ÃÂÂl&û,­'¹_óçÏÇàÁƒa00|øp <={öD`` 233qêÔ)¡Ä››ÆŒc÷…˽¼û8q" ú÷ï899aܸqXµjL&Œ—^z O=õ²³³qúôi»/2å}¤¿V­Zpuu…V«Å¡C‡°bÅ 4hÐÞÞÞ6#ÞŸô¶Ï>û cÇŽ…ÅbÁ„ 0fÌtîÜR©7oÞÄ–-[Š}¾{÷n!Ì_·n]™¾Ô=Ú&4Ècždß9r$Ö¬YFƒ^½zaÊ”)hÒ¤ ²²²‰ýû÷—«DÎûï¿cÇŽ!==óæÍÃÙ³g1pà@"11Û·o&¾|öÙgñꫯ ë¶nÝ­ZµÂÕ«Wqÿþ}tíÚ/¾ø"‚ƒƒ‘””„={öàÎ;ÚKkêԩرc±hÑ"œ9sC† Aݺu¡ÑhpíÚ5lܸQ» ï`½!ñÑGáƒ>@ff&ÂÂÂ0nÜ8téÒžžžHKKÉ'°}ûvF>|Ó§Oê—wýŠôõ×_£oß¾P«Õxíµ×pìØ1ôë×ÞÞÞHNNÆöíÛqúôiÖ¹òGº?I¾¾¾èÑ£‡0âúqçÕìÙ³qêÔ)DGGcãÆˆŽŽÆ‹/¾ˆ:uê@©TâØ±cغu+Ìf3¤R)¾ýö[!àÊ7xð`,\¸yyyX»v-âãã1`ÀÈd2ܽ{;wîÄíÛ·+dÿÊû¹PYŸÅiÙ²eˆŒŒÄСCQ£F ¤¤¤`ûöíˆõ   ̘1£ÈõGen÷èѣ̵ÈëÕ«‡·ß~Ÿþ9bccÑ­[7L™2Í›7‡ÅbÁo¿ý†ï¾ûNx2hñâÅvs%TŵõqfΜ‰¨¨(¡~ý²eË„¿2Ô¯_Ó¦MÃW_}…ôôtôêÕ 'NDË–-¡×ëqñâElÛ¶Í®üSiTĹ^*ëo¤êôYR™üüü°zõj¡~ý믿^-ê×Wõë8#=Äì3-OGÇv®0š¬ebʲ\¾õ?dã÷?óЧ‡5œ£4ãĵ0¹«D ̘b{]~îY„´wCäy Î]ÔbÂôDôë©@£RˆÄ'±ç ÷­7möu‡L&² ÇMMDz† J±þ‹`HÄáëá*a½¢ì ·ú];Émê£ýýxgš/f}˜‹˜³ ýz*жµ+œD¸{Oý‡s‘š^¾€½^)kÛ-þ"Cû{Àh´ ë nPÈ+n\kßP¶ïVB›gÁ¤71zˆ'êÖq†2׌˿kqòŒ%­þg0ïÍOAÏ®r´må w…÷ Ø}@‰”4k{„´wCÛV¶Ÿ™©é&L˜–ˆ\•íÚ¸bÅ'¶%[k9aâ/¬ÿ! IFŒŸ–ˆ‘ƒ=и‹µÌÒ®}J¨ÔÖ¿ËgÍð³)yäë-Á{oøaÁ’4äªÌ˜<3 #yàÙ.JEˆ‹7à§ýJ!ÄïÒÑ a%¸qCôOŰž¨’­Y³kÖ¬)v™:uê`õêÕGx{yyaÏž=˜4i®^½Š+W®8¬sìââ‚E‹aìØ±eÞÖáÇC§ÓaîܹÐh4øòË/ñå—_Ú-7tèPaô[Y=ÉýjÓ¦ Ö®]‹3f@­Vc×®]ËŸxzzbݺuëïŽ9_ý5rssqéÒ%¡À /¼ |áš3gnܸӧOC«ÕbýúõvÛ>oÞ<á&LyGZ:;;cüøñX³f L&/^,lke…õùÍ¢E‹ðÁÀl6cë֭غu«Í2'N´©9^ц † Àd2A$aÈ!O¼oÏž=[xŠ"==Ÿ~ú©ÍëùÛ±gÏž2ÞµkÆŽ+”äÉ/ËSXHHÖ­[gSï[$aíÚµ6l””d7Ê¿fÍš=z4–/_^!ý±´<<<°mÛ6Œ?±±±8sæŒÃ:Ïb±sçÎÅ€ì^›*ó³¸"L:8þ<Ο?o÷º¯¯/¶lÙ">`²Ž8îÑ£RSS±|ùrtìØ!!!•v¬çÌ™ƒ„„ìÞ½ÙÙÙvŸaNNNx饗>½Rq®W†Êü©º|–T¶ü§I/^ŒôôtL›6 ;vìpøtÎ?Íð¸xÅ:R=ü„ á'Tô—Ø…ð%]‚P3È ¯ä ë&‘ï¿ã& í¯YÎöLJŸ¦"ê’qñ|»Áñn!n˜þª·ÍÏbïþ°DKÌ=²s &|=ý«¹*3\d"ôêêøó#-Ý$”U).ÐT‡¶®x{ª/¾X“³8pT…GmË« íïŽÝsË|œú†*°eg6Ô þˆÖáhëHýÖÏԪаþÕ—½qõzþº­GvŽk¾Ïzä;ÚEŽoºgæk>X¿9 G#Ô8a¿|ÓÆR|0Ë~‚à›1:䪬Aû¥+Z˜ÌnºßׯzA©2cÇ%2³LX³É¾Ÿ¸ÈD˜ý¦º‡ØÏ Ñ»»zƒ˿ɀ6Ï‚Í;r°y‡}éž]åøw)'1&ú§aXOT 8;;ÃÇÇ-Z´@XX†W×¢ëÌáСCØ»w/öìÙƒ«W¯"33 …AAA ÅøñãK=é›#cÇŽE×®]±~ýzDDDàþýû0 ð÷÷ÇóÏ?±cÇ¢sçÎÒOr¿Â‰M›6áÔ©S¸{÷.Ôj5är95j„ÐÐPLœ8Q¨Éû¨àà`:t‹-Âùóç¡R©P»vmÈd$Éd2üøãغu+¶oߎèèhèõzÔ¨Q={öÄÔ©SQ»vmܸq)))‰DÐh4åšëÃ?D­Zµ°yófÄÅÅA.—£^½z•Þ‡_yå´iÓ«V­Â¹sç™™ ///´iÓ¯¼ò :uê$„õް+<‘¤\./Óï÷÷÷GóæÍqíÚ5„„„”h‚ßòöm¹\Ž}ûöaݺuÂHu‹Å‚ÀÀ@tìØÿ÷ÿ‡¼¼¼2‡õдiSDFFâûï¿Gxx8nß¾œœxzz¢U«V=z4 ä°æi:upâÄ ¬^½ááህD"A½zõ0xð`L™2EÁž2U¶ÆãĉøñÇŽèèhdggC*•¢V­ZèÔ©&Mš„¦M›Û÷zõê… 6àÔ©SÂq D“&M0fÌ„……9Ényׯ(­ZµÂ¹sç„cƒÜÜ\xyy¡E‹4hF]©“wëÖ­ P(A0ëëë‹}ûöaïÞ½øù矅k¸\.Gƒ лwo¼òÊ+ÅÞl1b6lˆo¿ýçÎCVV š6mŠbܸq˜0aB¹ÃúŠø\¨ÌÏâòjÒ¤ æÌ™ƒ7bïÞ½¸}û6ôz=‚ƒƒÑ§O̘1£Èý|´Oܼyr¹½{÷.÷v-\¸C† ÁæÍ›qöìY¤¥¥Áb± víÚ ÅäÉ“Q«V­ oò\[§ªGK$¬Zµ }ûöÅæÍ›qýúuh4¢K—.˜6m„°¾,×”Š8×+CeþT]>K*ÛÌ™3qîÜ9üòË/ˆŒŒ¬ô§Iª«nXº ›~ÌÆXk™Áúu¥e^.?$]þI P!ü¸ 1wõPkÌðö’ Í3.;Âê;^×ÍU„%âL”GN¨}K‡¬kïã-Aó§\Я—ÚÚÿlÚDж­\p톡åBPLÛ£‹nnޝ—æÂl‚k8Ù”M)‰áÝѼ© [ÊÁï×ó­4Á]!F‹¦.6Э[º a½DRúëu€ŸkWcͦ,üþg4Z3‚œ‹œ$·¬Ü\EXµ4;ö*qü´ñ ÀøúHЪ¥ Fñ€No)QXÿB{7ôè"ÇÖ]98wA‹iF8I€:µœÑ«›Â¦œMaÏ=ëŠæMe¸«Ç°þîvA}¾7ÿÏ¡]äØž‹«×ó‘e‚Åb½YÔ±+FòD`@Ñ×±½h×Ú»öæàüe-¤a0Zàã%AËf.ÐÇÝnÔ?Ù©Õj ›•’’âpT7QY$%%¡M›6¬£ÕW­Z%¼¶téRar² .5ðK#-- ­Zµ‚ÉdÂÊ•+–2"¢ÒÙ¿?¦L™R®s“þ^òÃúQ£F9|‰þ7ìÚµK(y´téR¼üòËl¢jªßèx(sͨ_Ç›W׬6Û•”lĨW­ó ­Z„–ÍdvËX,ÀÈI xjÄÿMðÆøÑ{/5Ý„aã­ssôê&ÇüÙþì0DôÄÅÆÆ–hp`aq1Ñ®]¯ÄËó5""*·øøøb_/®=!”ay÷ÝwËôûãââ„ڰLJ»»; Q9:tH˜{âĉl8­V‹ °N¨YQåï¨âÍ™3ÇŽÖ-[мys»×#""°{÷n@£Fìn ý…ô‹«–Ûy¨^µßÖ¸xÃc·Él†Œ»_ªý>vJE+Ò0÷-‡5üSRMX¿ÙZSÝÉ B õêz,©úžSDÕÃz""*—mÛ¶A¯×cÚ´iضmFŒzõê!//QQQذa²³³o½õ–Mýæü ~ìØ±èÛ·o‰çõë×ñÇàÎ;غu«Pç|æÌ™< De„„\¾|Y˜lµQ£F:t(ç(%%§OŸÆƒ°sçNÄÄÄf͚Š$«©ÌÌL=z)))èÓ§Fމ^½z! 8zô(¶mۓɉD‚O?ý´Luù‰þnþ—¼JØxè¸ °`IÂç¢wj9C§³à÷?óðÓ>¥0aê„1^¨àôj"ú{cÍz*ò kÖQI¨ÕjLŸ>‡.v¹™3gbîܹv?¿~ý:š7o^ªð§pû|_~ù%FÅBTFÆ ÃÙ³g…ÿ+ 8p Ø ~éïëìÙ³vOK½øâ‹X±b§‹‰‰Á”)S„’EŽ( |ñÅ,Gô? ºÖ¬Ò4Z .MÙsšb—7Ú¯MðfG!¢JS5ë9²žˆˆÊE.—cÓ¦MÂhܳgÏ">>‹AAAèÔ©^yå4kÖÌáúe©—¨T*´nݳfÍbY¢rª_¿>®^½ '''téÒóæÍCݺuÙ0ÿPžžž¨Y³&’““ѤIŒ?“&MbÃTs7FDD<ˆC‡áÒ¥KHNN†L&Cƒ ŠI“&! €EDÕ–›«ŸÎ À¿t8rR…+×ó”l„@€Ÿ­[ºbØ@w4ª/ecÑßGÖ“CYODDDDDDDDDdU#ëYp’ˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*æÄ& ¢ÿ5s¤"2J8ðcxyò¾#ýocÂET…Lf`èøûé‡í»•lB>ü, ¡CïáÓ•é¥Z/;ÇŒ‰Ó“Ð{Ä=ì;œË†,¥øBúÅ!¤_nÝÑ ?¿ö§ƒ^ºaãï#ú–ž EDDDDDDDTÁÖU¡ó—´HK7ÁÉ èÓCñØç˜;z! þbM¦ÃeÒ3M8ù‹:ª«2—øý/^Ñâv¬?ïgX_ZûÞàhÒPŠ& ¥ÂÏŸP!3Ë„ÔtŽF¨ØPÕøü![;ö(…6û圆 BDDDDDDÕÃz¢*´ÿˆ5íÒQÎR.…øxIж• ¤½Ü%o›V-\è/X ôî.gc–‚Ñ„Ÿ°ñûºÛ¼Ö¥“d2ÜÜDèÜÑEDDDDDDDTÁX³ž¨Šdd™pö¼u”çÀ> 6H!b1°rQ  €³séÖõ÷“à§ïkÃhœx…+•3Qdç˜!“‰Ð«›íŽm]qô§º=<>DDDDDDDDT±eU‘CÇT0™NhÛÚ• â@iƒz›‹¯n¥–_§{ˆ ¹}"/aHODDDDDDDôÄ0Î"ª pð¨5ÐG‘Èöõ{”ør­µõƯ‚áí%Á?çàüoZ©² ë7ïÈFí4;]_(7”"¤½>Zœ†ã§ÕHz`ÄùKZ!sdø@w̘ìk7òÙÍՌɤ™““HøyeY¸4Mê-KѲ™ ½ºÉ±æû,lÞžƒ¤F|µ.sßòsø^zƒÏ4“añGpW¤¾ýz)ðåÚLìØ£„Ù DDªñÒHÛÑñ —¥!Gi J?þ—ív<ÛB†ÎÝ0îõ¨5|µ./´w³±¼íç¡]W/ ²)›ÒéyW<×Êïγ†ÂÿÝ–SlXᲩé&H$@X¨{©Û41ÙˆMÛ²ÁANX»<^žíÑ¡­+B»(0åí$èt¬\nB™¡Œ,–~m êÝb¬YdS.çÙ2ôï­À¬y)¸|-§Õàð ú†*Š<.ÃZËÂãõuÇkï$áfŒIÉF܌ѡÙS¥{Š <힣4ã“eiEîgÛV.hÖT†9§B£±`ýY˜û–D¢Š?VmÌ‚ú“}l® ϶¡o¨‹V¤#ü¸ ÝÖãÀÑ\ sÜ7Z6“áÓy6Ç\¸¾lË‚úGËRµl&Ch9¦ÎJÆ¿tصW‰á_'Ì|ÝGØ·­»Šîƒ£‡x2¨'"""""¢RãÈz¢Jvàa œ°ž ‡e%åá^txZ8¼jÛÚµÈåü}%ˆ¹c ³4Z³MY—.ÃÀ˳`CÕš¢ƒß§›ÈìêUW'§ ÕÌ>°èb10¬¿–~““8wAƒ!ýíGø9Á·ˆZÞ…ËåªlÛìhDA 9 OÑ#Ù{t‘cëOÖ@ðʵ<<÷°†¹““õýÓÒMˆ¹«G̽pC¦°%>¶M²²ÍøõÂÃ'=ú¸—©]=o]ßÓCŒŽíŠî‡¡]äÈʲ†Ý…'ïýåamy7WQ±g ¿;Êqò5â ¸w߀ºµíï§I‹,oPè¸(U7abîèa*¢k× v‚B..w»çäRgzw/z?»w–#ú–µ\Oô-pÜK"1Ùh×ßòùxKà'Á…ËZáæJßbÚÛÕE„W_òBÒ£Ã0ÞzLŠ>¢.i ÌµnKߊ"oâuhë W´y\¾¦à%œ‡EÍo`{}—èúTÜ9ðG´õæQÛV.¨W§è»Ý^ÃÏ'é™&Dž×`6O`ýôS2•Ãz¢Jtã/î<Í; ·{¹ßO,.HÆ]e¢-—Ò=J£±àä5¢~Ó .Þe®z½‹Åf4¾å¸ýoÝ.¨¯ý¸ò'…'½y[À½ÌÇÆôÈÀü¸ø‚Ñ¿ „Ñþ*<Ñê½û¶ËLí…¥ßX'còv:wpC§önhÕÂÅáä¢:– “É„~R£¤t: “­ªI£âoÖÔ¯ãŒ÷Þðµ[?‚ݧ›È„‘ÜEiÝÒ'Îð×m½Ã°¾,ÇeÆ¿’í&|Í·x~ ^hïZîv¸Ÿ5œì&¶ù`–ˆ wC©Âú¯Öe"2Jãðµ1Ã<0c²Í“M ¨6‡ª,ûüèS(k6eá‡ÖRP-ž–áÅažhö” Þ^8=ü fëO9øö»¬Êë‚…û DDDDDDD†a=Q%9ñp²Hw…Ý^p«6Ûµz£5äRÈÅX³"~>ßQ¢žb$=°Ö¨6™më¦?ªðèw/Š‹;Î77Ž–"$vxw²Î;?÷@F– ç.j±íçÄŰÿp.ŒF ÞÇÏnÝýŸôx¾+ýËvÜ Ï©P–'3 ·má‘ØEIO7:žU×WKÛîî…æ‰iï†ÏæTáyPÐn9Jj?™? ϱá«`4qPß¿8Ù9füøSAPÿÍ’ bÏÙ²*ütAzæãŸÖHË(Ô=9ªžˆˆˆˆˆˆ*Ž˜M@T9òKàôî.l]îÊ¢R›q;ÖZGú¹V.ë žzXŸ[o° ú/]±Ë^¹žg·^EÉ/‘¢ÑXŸh(õú:¹*3rUf›ùÀ×[‚½X»Eþ(høi¿²ÈåÌf`ÏAë͉èô|Å> ѱ]ÁûíÜ£,vY½ÁbìnÜš°Qñß~w.º¹‰ð\+뤨&³}Ýý£*èõxyŠÒ¡|û—ß>YÙf\¸¬-r¹Ã'T˜ôF&½‘$œ…‹FcÁᓪ"×OM7áÌ9ë †:5[¿¢•·Ý;=<îé™&DDª‹?îEÜ´¨ˆóçù6®B ™Ã'Šno‹˜:+“ÞH¢åi¥þ=íÛº ¥Š~Þ¯‚÷’îsáëSqµûó'Ž.+o š7µÞûíª¶ØÉ9«AúÑõ;ÈùáFDDDDDDŠa=Q%ÈUß´±H«ÍvùzKàæfMÿ®^ÏÃ_B¯È( ¾Z[09¤ÁP¾!Á..¥+{R‘žo㊦­íì”Z˜CàQë7g Oô U”¹DLQzt–£f5-Ý}0ÇO;ÞŽì3Þú÷üë㛉\Ûµqþ½cOŽ]oÀ:Šýú k ,uÙLÌ ûXCÚ~=݅ඬ†ôÞcù·Ëᤤšðý¶lÖrDmžq^1Ø®.Ö~¸jC–ðTo°à?ËÒ„IZÇñ¬ôó¥¼íþâpOabãeßd öžãP8掣^MÀÚï³ìîŠ8¼<ÅèÓCøó¦;÷*‹<ò'ñíÑEQêßà'AŸîÖõîİrU†Ã' ŒF`åêLLœž$œwl&á>pÄþé³XÿC¶Íùãèú”ß·¬mæ¸ÌÍ„1^Â{~², Ú<û÷yjÄÊÕ¬e^î """"""¢ŠÄšõDO˜Þ`F¯V§‰e@"÷uÇ?[G½N{/û¸£~]g䪬£¤/?2‚8Gi.×ï¬à™L΂_Îj°éÇlÔ©é ww Úµvyâûµxº ôOÏ0aé7Öß?÷-?!¬€÷Þðƒ““{æ"é_z¢(ŸDb½Ñ1r°ˆˆˆˆˆˆˆ*Ãz¢'lÿk0Ú£‹\(9SHEX¶ Žæ"ü¸ wâô0,ð÷uBÇv®xq¸'j8!æ®™&ˆDÖR…KK”Ö´W}P#À {Ãs‘˜l€«‹X( Sš6–âÇõµ°çP.ΜU#î¾jî 1š4”¡G9Âz*žØ„–ùži.Ãöïjcox."£Ôˆ‹7@¥6ÃÛS‚NèÙUްžî;è7n®",ù8g¢48rB…è[:dåXGûxKÐü)ôë¥@‡¶®6ëió,8þË“yÒãÍÿóAh9ö†çâêõÔ«ãŒþ½Üѹ“[‘ý¯¢ÎŸúu±u]-ì>h=î% R™¡PˆñtúõT {gy¹ëäûûI°vE0NžQãøi5nÞÒ![i‚›«~NèÐÖCú»£F€ý>×p¦¯kbûn%NŸU#1ɱ¨ìŒÐ.rŒì΂¿b¬s ˆl¬H¬øO |÷C6ÎD©‘ža‚·—>Þ¶}Q"fM÷EX¨{ôa±ðwB»Ö®>Èuj:ƒˆˆˆˆˆˆèI©Õj ›•’’‚úõë³!Ê))ÙˆQ¯&V- BËf26 U©GUøle:än"ìÛRǦL 9‹ÀÀÀR­àÚõJ¼<'˜%z‚òGÕ׫ãÌ žªGŸ|X§Wwƒz"""""""¢j„#ëÉ!ެ¯!ýâØDDˆ If there are merge commits, there may be multiple paths. In this case, only one path needs to be authenticated: when the parent authenticates the merge commit, it implicitly authenticates the changes added by the other parents. The `--trust-root` argument specifies the start of the path. By using `HEAD^`, Bob is asking if the current commit is allowed by the parent commit's policy.
`sq-git` authenticates a range of commits. The **trust root** is the start of the range. We call it the trust root, because this is what the user trusts; the authentication status of the target commit is derived from the trust root.
`sq-git` requires each user to select their own trust root; for security reasons, this cannot be delegated to the project. Consider Dave. When deciding whether to use a project, he first does some due diligence. He looks at the code, researches the project and its maintainers, and examines the most recent commit's signing policy. If he is happy, he uses that commit as his trust root for that project. Alternatively, if the project has been audited, he might decide to rely on the auditors, and use the commit that they reviewed as his trust root. Or, Dave might [*yolo*] it, and set the trust root to the current commit. This is like trust on first use ([TOFU]): `sq-git log` will alert him to future changes that violate the singing policy, which is less secure, but still helpful. [*yolo*]: https://en.wikipedia.org/wiki/YOLO_(aphorism) [TOFU]: https://en.wikipedia.org/wiki/Trust_on_first_use Dave records the trust root in his local checkout by setting git's `sequoia.trustRoot` configuration key to the hash of the commit that he audited: ```shell {{#include ../examples/frob-60-dave-sets-a-trust-root.txt}} ``` It's important to use a hash and not use a branch or a tag, as these may be changed by a third party when you pull from an upstream repository. When Dave fetches updates from the upstream repository, he can use `sq-git` to check that there is an authenticated path from his trust root to the latest commit. To illustrate, let's say that Bob adds a few commits: ```shell {{#include ../examples/frob-70-bob-adds-a-commit.txt}} ``` Later, Dave updates his local repository, and authenticates the changes: ```shell {{#include ../examples/frob-80-dave-checks.txt}} ``` Since Dave set the trust root in his `git` configuration to `{{#include ../examples/frob-55-dave-trust-root.txt}}`, he doesn't have to pass the `--trust-root` argument. In this case, `sq-git` didn't complain, which means that it found a path from the trust root to the current commit. Let's say that Carol adds a commit: ```shell {{#include ../examples/frob-90-carol-adds-a-commit.txt}} ``` If Dave were to pull her changes and try to authenticate them, he would see that he can't authenticate Carol's commit: ```shell {{#include ../examples/frob-100-dave-checks-carols-commit.txt}} ``` `sq-git` correctly identify that the commit was not authorized. The missing key error message means that the certificate used to sign the commit was not found in the parent commit's policy file. This is exactly what we expect and want: the parent commit does not authorize Carol to add commits. There are two main reasons for unauthorized commits. First, it may be that the maintainers made a mistake. For instance, Alice accidentally merged Carol's commit without first verifying that the commit is authorized by the policy. Second, an attacker added a commit. This could happen if an the attacker compromised the upstream repository by gaining access to the server, or by convincing the operator of the forge to give them access to the repository. The latter is sometimes reasonable if the original maintainer has abandoned the project. `sq-git` is not able to distinguish these different cases. So, it is up to the user to investigate what happened, and decide what to do. Let's imagine that Carol sees that `sq-git log` is unhappy with her commit, and she tries to fix it by adding herself to the signing policy. ```shell {{#include ../examples/frob-110-carol-adds-herself-to-the-policy.txt}} ``` Now, `sq-git log` can authenticate Carol's commit! So, she pushes her branch, and thinks that everything is okay. When Dave tries to authenticate it, however, he still sees an error: ```shell {{#include ../examples/frob-120-dave-checks-carols-new-commits.txt}} ``` This is because although `sq-git log` can authenticate the commit with Carol's functional change, it correctly rejects the commit where she adds herself to the signing policy: the parent commit doesn't authorize that, and Dave's trust root comes earlier. If Bob is happy with Carol's functional change, he can merge it: ```shell {{#include ../examples/frob-130-bob-merges-carols-commit.txt}} ``` Notice that Bob uses the `--no-ff` switch to force a merge commit. This results in the following history: ```shell {{#include ../examples/frob-140-git-log.txt}} ``` The merge commit has two parent's: Carol's commit, and Bob's commit. Although Bob's commit can still not authenticate Carol's commit, it can authenticate Bob's merge commit. Therefore there is an unbroken path from Dave's trust root to Bob's merge commit. Now, when Dave runs `sq-git` with his trust root, he can again authenticate the changes: ```shell {{#include ../examples/frob-150-dave-checks-merge-commit.txt}} ``` Note that the Carol's commit, `{{#include ../examples/frob-95-carol-commit-cherry-picked.txt}}`, still can't be authenticated. But because there is an alternate path to the trust root, `sq-git` is happy. Instead of using an empty merge commit, Bob could have re-signed Carol's commit using his certificate: ```shell {{#include ../examples/frob-160-bob-signs-carols-commit.txt}} ``` This preserves the Carol's authorship information, but replaces the signature, and updates the committer. Now there is an authenticated path from Dave's trust root to the branch's tip: ```shell {{#include ../examples/frob-170-dave-checks-resign.txt}} ``` sequoia-git-0.4.0/book/src/getting-start.md000064400000000000000000000000221046102023000167050ustar 00000000000000# Getting Started sequoia-git-0.4.0/book/src/introduction.md000064400000000000000000000105411046102023000166410ustar 00000000000000# Introduction A version control system like `git` doesn't just track changes, it also provides a record of who made those changes. This information can be used to check that commits are authorized, which can improve software supply chain security. In particular, checking a change's provenance can be used to remove intermediaries like forges, and package registries from a user's trusted computing base. But, [authorship information can easily be forged](https://dev.to/martiliones/how-i-got-linus-torvalds-in-my-contributors-on-github-3k4g). ![Screenshot of a blog post about impersonating Linus Torvalds](assets/github-impersonation.jpg) An obvious solution to prevent forgeries is to require commits to be digitally signed. But, by itself a digital signature doesn't prevent forgeries. Anyone can generate a certificate with any user ID, and use it to sign commits: ```shell {{#include ../examples/intro-10-neal-cert.txt}} {{#include ../examples/intro-20-neal-commit.txt}} ``` When someone like Alice verifies the signature, they see that the commit is correctly signed, which it is: ```shell {{#include ../examples/intro-30-git-log.txt}} ``` But as the warning points out, the certificate may not actually belong to the stated owner. And, as the prompt suggests, it isn't. What is needed is not only a list of entities that are allowed to modify the repository, *but also* the certificates they use to sign the commits. In other words, to authenticate a commit we need a signing policy, which says what certificates are authorized to make changes. Creating a policy isn't complicated. But, for an end user it is time consuming, and requires diligently tracking the project to identify when maintainers come and go. That's too much work. Instead, a project's maintainers could curate a list of entities that are allowed to add commits and update the signing policy, and enumerate the certificates they use to sign them. The tricky part is applying the policy. There are a number of edge cases that need to be handled like how to merge changes from external contributions, who is allowed to change the policy, and how to deal with compromised keys. The [Sequoia git](https://gitlab.com/sequoia-pgp/sequoia-git) project [specifies a set of semantics](https://sequoia-pgp.gitlab.io/sequoia-git/), defines a policy language and file format, and provides a set of tools to manage a policy file, and authenticate commits. Using `sq-git` is relatively straightforward. You start by adding a policy file, `openpgp-policy.toml`, to your project's repository. (As shown in the following chapters, `sq-git` helps you do that.) The policy is maintained in-band to allow it to evolve, just like the rest of the project. The `openpgp-policy.toml` file is basically a list of entities, the type of changes they are authorized to make, and their respective OpenPGP certificates. Before you merge a pull request, you check that commits are authorized by the policy. Locally, this can be done by running `sq-git log` on the range of commits that you want to check. If your project uses CI, you add a job that automatically checks that all new commits are authorized. Downstream users can use `sq-git` to check that there is a chain of trust from an older, known-good version of the software to a new version. This helps prevent the use of versions that include modifications that weren't authorized by the project's maintainers. `sq-git` has a relatively simple two-step authentication rule. First, a commit is considered authorized if one of its parent's policies can authenticate it. A commit is considered authorized with respect to a trust root if there is a path from the trust root to the commit where every commit is authenticated by the parent commit on the path. The following shows that there are multiple paths from the first commit to the last commit: ```shell {{#include ../examples/frob-140-git-log.txt}} ``` Only one of those paths needs to be authenticated, because when the parent authenticates the merge commit, it implicitly authenticates the changes added by the other parents. In a certain sense, the fact that the other parents are recorded in the git history is purely decorative. `sq-git` distinguishes itself from projects like [sigstore](https://www.sigstore.dev/) in that all of the information required to authenticate commits is available locally, and no third-party authorities are required. sequoia-git-0.4.0/book/src/signing-commits.md000064400000000000000000000015751046102023000172360ustar 00000000000000# Signing Commits Signing a commit means adding a digital signature to your commits. This allows someone who has your certificate to verify that you made the signature. Signing commits is a prerequisite to using `sq-git`. If you are using Sequoia, you can create a certificate as follows: ```shell $ sq key generate --name "Iliana" --email iliana@example.org --own-key Please enter the password to protect key (press enter to not use a password): Please repeat the password: - ┌ 5D4142463C04ADCF7372231DC06A1E7BD5E115DC └ Iliana - certification created - ┌ 5D4142463C04ADCF7372231DC06A1E7BD5E115DC └ - certification created ... ``` Then you need to configure `git` to use it: ```shell $ git --global gpg.gpgsign true $ git --global user.signingKey 5D4142463C04ADCF7372231DC06A1E7BD5E115DC ``` sequoia-git-0.4.0/build.rs000064400000000000000000000050371046102023000135260ustar 00000000000000use std::env; use clap::CommandFactory; use clap_complete::Shell; use anyhow::Result; use sequoia_man::asset_out_dir; pub mod cli { include!("src/cli/mod.rs"); } // To avoid adding a build dependency on sequoia-openpgp, we mock the // bits of openpgp that the CLI module uses. pub mod openpgp { #[derive(Clone, Debug)] pub struct KeyHandle { } impl From<&str> for KeyHandle { fn from(_: &str) -> KeyHandle { KeyHandle {} } } } fn main() { let mut cli = cli::build(false); git_version(); completions(); generate_man_pages(&mut cli).expect("can generate man pages"); } fn git_version() { // Emit the "cargo:" instructions including // "cargo:rustc-env=VERGEN_GIT_DESCRIBE=". // // If the source directory does not contain a git repository, // e.g., because the code was extracted from a tarball, this // produces an `Error` result, which we ignore, and // `VERGEN_GIT_DESCRIBE` is not set. That's okay, because we are // careful to only use `VERGEN_GIT_DESCRIBE` if it is actually // set. let _ = vergen::EmitBuilder::builder() // VERGEN_GIT_DESCRIBE .git_describe(/* dirty */ true, /* tags */ false, None) // Don't emit placeholder values for the git version if the // git repository is not present. .fail_on_error() .emit(); } fn completions() { // Generate shell completions let outdir = match std::env::var_os("CARGO_TARGET_DIR") { None => { println!("cargo:warning=Not generating completion files, \ environment variable CARGO_TARGET_DIR not set"); return; } Some(outdir) => outdir, }; std::fs::create_dir_all(&outdir).unwrap(); let mut cli = cli::Cli::command(); for shell in &[Shell::Bash, Shell::Fish, Shell::Zsh, Shell::PowerShell, Shell::Elvish] { let path = clap_complete::generate_to( *shell, &mut cli, "sq-git", &outdir).unwrap(); println!("cargo:warning=generated completion file {:?}", path); }; } /// Generates man pages. fn generate_man_pages(cli: &mut clap::Command) -> Result<()> { let version = env!("CARGO_PKG_VERSION"); let mut builder = sequoia_man::man::Builder::new(cli, version, None); builder.see_also( &[ "For the full documentation see ." ]); let man_pages = asset_out_dir("man-pages")?; sequoia_man::generate_man_pages(&man_pages, &builder).unwrap(); Ok(()) } sequoia-git-0.4.0/openpgp-policy.toml000064400000000000000000003065731046102023000157340ustar 00000000000000version = 0 commit_goodlist = [] [authorization."Justus Winter "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: CBCD 8F03 0588 653E EDD7 E265 9B7D D433 F254 904A Comment: Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter 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 =BwBn -----END PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: D2F2 C5D4 5BE9 FDE6 A4EE 0AAF 3185 5247 6038 31FD Comment: Justus Winter (Code Signing Key) "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: F717 3B3C 7C68 5CD9 ECC4 191B 74E4 45BA 0E15 C957 Comment: Neal H. Walfield (Code Signing Key) Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield 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 =DRsl -----END PGP PUBLIC KEY BLOCK----- """ [authorization.dvn] sign_commit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 0CC0 11A7 C3DC 6EB4 7567 9BC9 AC0A BA31 866A 7E76 Comment: Devan Carpenter Comment: dvn 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 /g== =nP6D -----END PGP PUBLIC KEY BLOCK----- """ sequoia-git-0.4.0/scripts/gitlab.sh000075500000000000000000000031551046102023000153500ustar 00000000000000#!/bin/bash set -exuo pipefail if test x$CI_DEFAULT_BRANCH = x then : Environment variable CI_DEFAULT_BRANCH not set. exit 1 fi : HEAD is $(git rev-parse HEAD). MAIN=refs/remotes/origin/$CI_DEFAULT_BRANCH : Default branch is $CI_DEFAULT_BRANCH, $(git rev-parse $MAIN). if git merge-base --is-ancestor $MAIN HEAD then : $CI_DEFAULT_BRANCH can be fast-forwarded. : : Commits since $CI_DEFAULT_BRANCH: git log --format=oneline $MAIN..HEAD : : Authenticating commits: sq-git log --keep-going --trust-root `git rev-parse $MAIN` else FORK=`git merge-base $MAIN HEAD || true` if test x$FORK = x then : Failing. HEAD does not appear to have a common fork point : with $MAIN. : : If HEAD and $MAIN have a common fork point, then you : probably did a shallow clone. : git rev-parse --is-shallow-repository : : If so, go to: : : Project / Settings / CI/CD / General pipelines / Git strategy : : And make sure "git shallow clone" is set to "0". This causes : gitlab to fetch all of the history. : : Alternatively, you can use the GIT_DEPTH variable to set this on : a per-job basis. exit 1 else : MR needs to be merged or rebased. Fork point is $FORK. : : Authenticating commits: git log --format=oneline $FORK..HEAD : : Authenticating commits, using fork point $FORK as trust root: sq-git log --keep-going --trust-root $FORK : Failing. Cannot fast-forward $MAIN. exit 1 fi fi sequoia-git-0.4.0/spec/Makefile000064400000000000000000000010001046102023000144350ustar 00000000000000#!/usr/bin/make -f # dependencies: # apt install weasyprint xml2rfc ruby-kramdown-rfc2629 draft = draft-sequoia-git OUTPUT = $(draft).txt $(draft).html $(draft).xml $(draft).pdf all: $(OUTPUT) %.xmlv2: sequoia-git.md kramdown-rfc2629 < $< > $@.tmp mv $@.tmp $@ %.xml: %.xmlv2 xml2rfc --v2v3 $< -o $@ %.html: %.xml xml2rfc $< --html -o $@ %.txt: %.xml xml2rfc $< --text -o $@ %.pdf: %.xml xml2rfc $< --pdf -o $@ clean: -rm -rf $(OUTPUT) $(draft).xmlv2 .PRECIOUS: $(draft).xmlv2 .PHONY: clean all sequoia-git-0.4.0/spec/sequoia-git.md000064400000000000000000001101401046102023000155540ustar 00000000000000--- title: Supply Chain Security for Version Control Systems abbrev: Supply Chain Security for VCSs docname: draft-nhw-openpgp-supply-chain-security-vcs-00 date: 2023-06-20 category: info submissiontype: independent ipr: trust200902 area: int workgroup: openpgp keyword: Internet-Draft stand_alone: yes pi: [toc, sortrefs, symrefs] venue: group: "OpenPGP" type: "Working Group" mail: "openpgp@ietf.org" arch: "https://mailarchive.ietf.org/arch/browse/openpgp/" repo: "https://gitlab.com/sequoia-pgp/sequoia-git" latest: "https://sequoia-pgp.gitlab.io/sequoia-git/" author: - ins: N.H. Walfield name: Neal H. Walfield org: Sequoia PGP email: neal@sequoia-pgp.org - ins: J. Winter name: Justus Winter org: Sequoia PGP email: justus@sequoia-pgp.org normative: RFC2119: RFC4880: RFC8174: toml: author: - ins: T. Preston Werner name: Tom Preston-Werner - ins: P. Gedam name: Pradyun Gedam title: TOML v1.0.0 date: 2021-01-12 target: https://toml.io/en/v1.0.0 informative: event-stream: author: - ins: T. Hunter name: Thomas Hunter II title: "Compromised npm Package: event-stream" date: 2018-11-27 target: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 dependency-confusion: author: - ins: A. Birsan name: Alex Birsan title: "Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies" date: 2021-02-09 target: https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610 reflections-on-trusting-trust: DOI.10.1145/358198.358210 guix: author: - ins: L. Courtès name: Ludovic Courtès title: Building a Secure Software Supply Chain with GNU Guix date: 2022-06 doi: 10.48550/arXiv.2206.14606 target: https://arxiv.org/abs/2206.14606 --- abstract In a software supply chain attack, an attacker injects malicious code into some software, which they then leverage to compromise systems that depend on that software. A simple example of a supply chain attack is when SourceForge, a once popular open source software forge, injected advertising into the binaries that they delivered on behalf of the projects that they hosted. Software supply chain attacks are different from normal bugs in that the intent of the perpetrator is different: in the former case, bugs are added with the intent to harm, and in the latter they are added inadvertently, or due to negligence. Software supply chain security starts on a developer's machine. By signing a commit or a tag, a developer can assert that they wrote or approved the change. This allows users of a code base to determine whether a version has been approved, and by whom, and then make a policy decision based on that information. For instance, a packager may require that software releases be signed with a particular certificate. Version control systems such as git have long included support for signed commits and tags. Most developers don't sign their commits, and in the cases where they do, it is usually unclear what the semantics are. This document describes a set of semantics for signed commits and tags, and a framework to work with them in a version control system, in particular, in a git repository. The framework is designed to be self contained. That is, given a repository, it is possible to add changes, or authenticate a version without consulting any third parties; all of the relevant information is stored in the repository itself. By publishing this draft we hope to clarify and enrich the semantics of signing in version control system repositories thereby enabling a new tooling ecosystem, which can strengthen software supply chain security. --- middle # Introduction ## Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 {{RFC2119}} {{RFC8174}} when, and only when, they appear in all capitals, as shown here. ## Terminology - "Maintainer" is a software developer, who is responsible for a software project in the sense that they act as a gatekeeper, and decide with other maintainers what changes are acceptable, and should be added to the software. - "Contributor" is someone who contributes changes to a software project. Unlike a maintainer, a contributor cannot add their changes to a project on their own accord. - "Software supply chain" is the collection of software that something depends on. For instance, a software package depends on libraries, it is built by a compiler, it is distributed by a package registry, etc. - "Software supply chain attack" is an attack in which an attacker compromises a software supply chain. For instance, a maintainer or a contributor may stealthily insert malicious code into a software project in order to compromise the security of a system that depends on that software. - "Version control system" is a database, which contains versions of a software project. Each version includes links to preceding versions. - "git" is a popular version control system. Although "git" is distributed and does not rely on a central authority, it is often used with one to simplify collaboration. Examples of centralized authorities include gitea, GitHub, and Gitlab. - "Commit" is a version that is added to the "version control system". In git, commits are identified by their message digest. - "Branch" is a typically human readable name given to a particular commit. When a commit is superseded, the branch is updated to point to the new commit. Repositories normally have at least one branch called "main" or "master" where most work is done. - "Tag" is a name given to a particular commit. Tags are usually only added for significant versions like releases and are normally not changed once published. - "Change" is a commit or a tag. - "Forge" is a service which hosts software repositories, and often provides additional services like a bug tracker. Examples of forges are codeberg, GitHub, and GitLab. - "Registry" or "Package Registry" is a service that provides an index of software packages. Maintainers register their software there under a well-known name. Build tools like `cargo` fetch dependencies by looking up the software by its name. - "Authentication" is the process of determining whether something should be considered authentic. - "Trust model" is a process for determining what evidence to consider, and how to weigh it when doing authentication. - "OpenPGP certificate" or just "certificate" is the data structure that section 11.2 of {{RFC4880}} defines as a "Transferable Public Key". A certificate is sometimes called a key, but this is confusing, because a certificate contains components that are also called keys. - "Liveness" is a property of a certificate, a signature, etc. An object is considered live with respect to some reference time if, as of the reference time, its creation time is in the past, and it has not expired. # Problem Statement Consider the following scenario. Alice and Bob are developers. They are the primary maintainers of the Xyzzy project, which is a free and open source project. Although they do most of the work on the project, they also have occasional collaborators like Carol, and drive-by contributions from people like Dave. Paul packages their software for an operating system distribution. Ted from Ty Coon Corporation integrates it into his company's software. And, Mallory is an adversary who is trying to subvert the project. When someone updates their local copy of Xyzzy's source code repository, they want to authentic any changes before they use them. That is, they want to know that each change was made or approved by someone whom they consider authorized to make that change. In the Xyzzy project, Alice is willing to rely on Bob to check-in changes he makes, and to approve contributions from third parties without auditing the code herself. But, she doesn't want to rely on anyone else without checking their proposed changes manually. Bob feels the same way about Alice. In version control systems like `git`, the meta-data for a commit or tag includes `author` and `committer` fields. By themselves, these fields cannot be used to reliably determine who a change's author and committer are, because these fields are set by the committer and unauthenticated. That is, Mallory could author a commit, set both of these fields to "Bob," and push the malicious commit. No one would be able to tell that they came from Mallory and not Bob. There are two main ways to authenticate changes. First, changes to a repository or branch can be mediated by a trusted third party, which enforces a policy at the time a change is added to the repository. Second, individual changes can be signed, and a policy can be evaluated at any time. These two approaches can be mixed. ## Repositories Protected by a Trusted Third Party When using a trusted third party, only certain users are allowed to change the repository. This is often realized using access control lists: the trusted third party has a list of users who are allowed to do certain types of modifications. Before the trusted third party allows a user to modify the repository, the user has to authenticate themselves. When they attempt to make a change, the trusted third party checks that they are authorized. If they are, the third party allows the modification. If not, it is rejected. A user of this repository can now conclude that if they can authenticate the trusted third party, then the changes were approved. A drawback of using a trusted third party is that it relies on centralized infrastructure. This means the only way for a user to determine if a version of Xyzzy is authentic is to fetch it from the trusted third party; the repository is not self authenticating. If the third party ever disappears, users will no longer be able to authenticate the project's source code. Another disadvantage is that this approach doesn't expose the project's policy to its users. This means that both first-parties like Alice and third-parties like Paul are not able to audit the trusted third party. This is the case even if the set of users that are currently authorized to make changes are exposed via a separate API end point: because the set of authorized users changes with time, all updates to the ACLs would need to be exposed along with information about what user authorized each change. ## Self-Authenticating Repositories An alternative approach is to have authors and committers sign their changes. Users then check that the changes are signed correctly, and authenticate the signers. For instance, for the Xyzzy project, Paul might decide that Alice or Bob are allowed to make changes. So when Paul fetches changes, he checks whether Alice or Bob signed the new changes, and flags changes made by anyone else. If Alice and Bob later decide that Carol should also be allowed to directly commit her changes, Paul needs to update his policy. If Bob leaves the team, Paul needs to pay enough attention to notice, and then disallow changes made by Bob after a certain date. For projects that sign their commits today, this is more or less the status quo. Most users, however, do not want to maintain their own policy, and aren't even in a good position to do so. Since users are willing to rely on the maintainers to make changes to the project, they can just as well delegate the policy to them. Now, a user like Paul just needs to designate an initial policy. If he knows when the policy changes, and can authenticate changes to the policy based on the existing policy, then he is able to authenticate any subsequent changes to the repository. An easy way to manage the policy is to include it in the repository itself. Then changes to the policy can be authenticated in the same way as normal changes. This also makes the repository self authenticating, because it is self contained. One issue is how users should handle forks to a project. A fork in a project may occur due to a social or technical conflict, or because the project dies, and is later revived by a different party. In both cases, it may not be possible for there to be a clean hand off to the new maintainer. That is, Alice or Bob may not be willing or able to change the policy file to allow Dave to seamlessly continue the development of Xyzzy. Forks are straightforward to handle, but require user intervention: from the system's perspective, Dave is not authorized, so his changes are rejected. And that's good, as Dave may be an attacker; the system can't tell. Users opt in to a fork by changing their trust root to designate a version in which Dave is authorized to make changes. # Threat Model Consider an attacker, Mallory, who is trying to compromise a user, Ursula, by injecting a vulnerability into the software supply chain of a piece of software, Super Frob, that she uses. There are several different ways that Mallory could accomplish this. These include: - Mallory could pose as a contributor, and convince a develop to authorize a malicious change to one of Super Frob's dependencies, such as a library. - Mallory could take over an abandoned package that Super Frob depends on, and publish a new version with malicious code. - Mallory could use typo squatting to opportunistically or through social engineering inject malicious software into Super Frob's supply chain. For instance, Mallory could publish a library called `libevent`, which is a copy of `libevents`, but includes a malicious change, and Super Frob accidentally includes `libevent` as a dependency instead of `libevents`. - Mallory could publish a malicious package that has the same name as a package on another registry in order to confuse Super Frob's build tools. This type of attack is called a dependency confusion attack, {{dependency-confusion}}. It can be launched when an organization uses an internal registry and a public registry to find dependencies. As dependencies are often referenced by name, and that name does not include the registry, an attacker may trick the organization into using their malicious version of the package. - Mallory could sneak a change into one of Super Frob's build dependencies, like the compiler. Whereas software maintainers have a large degree of control over their direct dependencies, they have more limited control over the tools downstream users use to build their software. In the extreme, a software project may include a copy of a dependency in their version control system, or depend on a specific version of a dependency by cryptographic hash, but only specify a standard that the compiler needs, like C99. This attack is most well-known from Ken Thompson's Reflections on Trusting Trust Turning award lecture, {{reflections-on-trusting-trust}}. - Mallory could compromise the tools that a developer uses, e.g., by publishing a useful, but malicious plug-in for an editor, which detects certain code patterns, and quietly modifies them to insert malicious code. - Mallory could compromise the systems that the developers use, and modify their source code repositories. For instance, if Mallory gets access to a developer's machine, he could stealthy modify code before it is signed and committed. Or, he could exfiltrate the developer's signing key, or login credentials and imitate her. Similarly, if a software project uses a forge and Mallory is able to compromise the forge, he could modify the source code. - Mallory could compromise Super Frob or one of its dependencies as it is being downloaded. For instance, if a package registry like `crates.io` depends on a content delivery network (CDN) to distribute packages, a compromised node in the CDN may return a modified version of the software to the user. The setting is as follows. To protect herself from Mallory, Ursula has to make sure that versions of the software she obtains do not contain malicious code. Ursula cannot afford to audit every version of the software, but she is willing to rely on the maintainers of the project to not add malicious code, and to review contributions from third parties. The framework presented in this specification allows Ursula to audit a dependency and its developers once, and then to delegate decisions of what code and dependencies to include to the developers. Assuming the developers are reliable, this can protect Ursula from attacks where Mallory is not explicitly authorized to make a change. For instance, if the developers of an abandoned software package do not authorize a new maintainer, Ursula will be warned when a package has a new maintainer, as she can no longer authenticate it. She can then reaudit it. Similarly, when the software is modified in transit by a machine in the middle, Ursula will not be able to authenticate it. This can also stop dependency confusion attacks, because the software cannot be authenticated. It won't however, stop a downgrade attack, as older versions can still be authenticated. This framework cannot protect Ursula from mistakes that she or a developer of the software that she depends on makes. For instance, if Mallory is able to convince a developer to authorize a malicious change to their software, this framework consider the change to be legitimate. This framework can facilitate forensic analysis in these case by making it easier to identify changes approved by the same person (potentially across different projects) and thereby conduct a targeted audit. # Authentication This framework helps users authenticate three types of artifacts: commits, tags, and tarballs or other archives. ## Policy Every commit has an associated policy. If a commit contains the file `openpgp-policy.toml` in the root directory, then that file describes the commit's policy. If the commit does not contain that file, the void policy is used. The void policy rejects everything. `openpgp-policy.toml` is a TOML v1.0.0 file {{toml}}. Version 0 defines the following three top-level keys: `version`, `authorization`, and `commit_goodlist`. If a parser recognizes the version, but encounters keys that it does not know, then it must ignore the unknown keys. This allows a degree of forwards compatibility. ### version The value of the `version` key is an integer and must be `0`: version = 0 If the value of `version` is not recognized, the implementation SHOULD error out. It MAY instead treat the policy as the void policy. ### authorization `authorization` is a table of authorization entries. Each key in the `authorization` table is a free-form identifier, which is chosen by the user of the system. The identifier SHOULD be a UTF-8 encoded, human-readable string that identifies an entity. Examples of identifiers are `alice`, `Bob `, `Boty McBotface `. The value of each authorization entry is another table. The table has the following entries: - `keyring` - `sign_commit` - `sign_tag` - `sign_archive` - `audit` - `add_user` - `retire_user` #### keyring The value of `keyring` is a string. It contains one or more OpenPGP certificates. The OpenPGP certificates MUST be ASCII-armored. An ASCII-armored block MAY contain more than one OpenPGP certificate. The string MAY contain multiple ASCII-armored blocks. An implementation SHOULD ignore valid OpenPGP certificates that is does not support, and MAY emit a warning that a certificate, or component is not supported. An implementation SHOULD return an error if it encounters something other than an OpenPGP certificate encoded with ASCII armor. When adding a certificate, an implementation SHOULD only add components that are needed to validate the signatures. That is, an implementation SHOULD strip subkeys that are not signing capable, and third-party signatures. For components that are kept, an implementation SHOULD include all known self signatures, and not just the newest self signature. #### sign_commit The value of `sign_commit` is a boolean. If `true`, then the entity is authorized to sign commits. #### sign_tag The value of `sign_tag` is a boolean. If `true`, then the entity is authorized to sign tags. #### sign_archive The value of `sign_archive` is a boolean. If `true`, then the entity is authorized to sign tarballs or other archives. #### audit The value of `audit` is a boolean. If `true`, then the entity is authorized to add commits to the top-level `commit_goodlist` array. #### add_user The value of `add_user` is a boolean. If `true`, then the entity is authorized to add new entities to the authorization table, to grant them any capabilities that they have, and to add new certificates to any entity's keyring. Note: no special capability is required to extend an existing certificate. For instance, an entity that has the `sign_commit` capability can add new user IDs, new subkeys, and new signatures to any existing certificate. Adding new certificates requires the `add_user` capability, and removing most packets from an existing certificate requires the `retire_user` capability. #### retire_user The value of `retire_user` is a boolean. If `true`, then the entity is authorized to retire capabilities from any entity. This includes capabilities that they do not have. The entity is also authorized to remove certificates, and to strip components and signatures from existing certificates. If an entity does not have the `retire_user` capability, it is still possible for the entity remove some packets. The following algorithm determines whether a change is allowed: - Ignore marker packets. - Ignore third-party certifications. A third-party certification is a signature packet where none of the issuer packets and none of the issuer fingerprint packets alias the certificate's fingerprint. - Consider all of the remaining non-signature packets to be components. - Iterate over the packets in the certificate in the parent commit's policy in order. For each signature create a tuple consisting of the signature and the preceding component. Call the set of tuples `P`. - Repeat the previous step for the version of the certificate in the child commit's policy, but call the set of tuples `C`. - If `P`, the set of tuples derived from the version of the certificate in the parent policy, minus `C`, the set of tuples derived from the version of the certificate in the child policy, is not empty, then the update requires the `retire_user` right. Note: This algorithm does not check signatures for cryptographic validity. This means it is possible to handle signatures that use signature versions, and cryptographyic algorithms that the implementation does not support. Changing a signature's associated component is only allowed if the entity has the `retire_user` right. An entity can always add new signatures. Components are only considered in the context of a signature. Consider the following certificate: - Primary Key - Signature - User ID A - User ID B - Signature Since the algorithm above would not create any tuples consisting of user ID `A` and a signature, removing the user ID `A` packet does not require the `retire_user` right. #### Example The following is an example of an authorization entry. The user has been granted all the capabilities. The user is identified by two different OpenPGP certificates. The certificates are contained in two concatenated ASCII armored blocks. [authorization."Neal H. Walfield "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: F717 3B3C 7C68 5CD9 ECC4 191B 74E4 45BA 0E15 C957 Comment: Neal H. Walfield (Code Signing Key) Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield xsEhBFUjmukBDqCpmVI7Ve+2xTFSTG+mXMFHml63/Yai2nqxBk9gBfQfRFIjMt74 =MESu -----END PGP PUBLIC KEY BLOCK----- """ ### commit_goodlist The value of `commit_goodlist` is an array of strings where each string contains a commit identifier. The commit identifier MUST be a full hash. The commit identifier MUST NOT be a branch name, a tag name, or a truncated hash. Commits listed in the `commit_goodlist` are commits that have retroactively been marked as valid. This may be useful when a certificate's private key material has been compromised. ## Authenticating Commits Each commit in a `git` repository is part of a directed acyclic graph (DAG) where a node is a commit, and a directed edge shows how two commits are related. Specifically, the head of a directed edge is a commit that is derived from the tail. Except for the root commits, each commit has one or more parents. A commit that has multiple parents is derived from multiple commits. Conceptually, it merges multiple paths, and as such is called a merge commit. A commit is consider authenticated if at least one of its parent commits considers the commit to be authenticated. This rule is different from Guix's *authorization invariant* as described in {{guix}}, which states that all parent commits must consider the commit to be authenticated. The semantics described here allow a developer to add commits from unauthorized third-parties as-is using a merge commit. Using Guix's authorization invariant, the third party's commit would have to be resigned, which loses the third-party's signature, and consequently complicates forensic analysis. A commit's parent authenticates it as follows. First, the implementation looks up the signer's certificate in the parent commit's policy file. If the implementation finds a certificate, it scans the commit's policy file for any updates to that certificate (and only that certificate) except for revocations. That is, the implementation iterates over all of the certificates in the commit's policy file, and looks for certificates with the same fingerprint. If it finds any, it merges them into the original certificate with the exception of any revocation signatures. In this way, it is straightforward for a user to recover if the certificate in the parent commit's policy file is no longer usable, e.g., because it has expired, or the signing subkey has been replaced. Consider a parent commit whose policy file that contains a certificate that expires at time `t`. After `t`, the certificate is unusable; it can't be used to authenticate any commits made at or after `t`. This mechanism allows the user to easily add new commits by extending their certificate's expiration, and adding the update to a new commit. Revocation certificates are skipped so that it is possible for a user to add a commit that revokes their own certificate, or a component thereof. The implementation SHOULD then canonicalize the certificate so that the active self signatures are those that were active when the signature was made. A self signature is valid, if it is not revoked, and not expired. A self signature is active, if it is the most recent, valid self signature prior to a reference time. That is, if a new commit was made on June 9, 2023, then each component's most recent signature as of June 9, 2023, which is also not revoked, and not expired, is considered that component's active self signature. If the canonicalized certificate is valid as of the signature's time, not expired as of that time, not soft revoked as of that time, not hard revoked at any time, and the signature is correct, then the signature is considered verified. The implementation MAY consider certificate updates from other sources. If it does, it SHOULD only consider hard revocations. The implementation MUST then check that the type of change is authorized by the policy. The following capabilities allow the specified types of changes: - `sign_commit`: Needed for any change. - `add_user`: Needed to delegate a capability to another user. Updating `keyring` does not require this capability if a certificate is only updated, and not added. - `retire_user`: Needed to rescind a capability from another user. - `audit`: Needed to modify the `version` field, and the `commit_goodlist` list. If the signature is considered verified, and the signer is authorized to make the type of change that was made, then the commit is considered authenticated. If the commit is not considered authenticated, because the signer's certificate has been hard revoked, but the commit is included in a later commit's `commit_goodlist`, then the commit is considered to be authenticated. A commit is considered to occur later if when authenticating a range of commits, a commit is a direct descendant of the commit in question, and it is in the commit range. Consider the three commits `a`, `b`, and `c` where `a` is `b`'s parent, `b` is `c`'s parent, the certificate used to sign `b` has been hard revoked, and `c` includes `b` in its `commit_goodlist`. In this case, the hard revocation for the certificate to use `b` is ignored. All other criteria including the fact that the signature on `b` is valid are still checked. ## Authenticating Tags A tag is a special type of commit in `git`, which has no content, but assigns a name to a specific commit. A tag is usually used to mark release points. A tag is authenticated in the same way as a commit, as described in the previous section, with the following exceptions. First, the tagged commit is considered a parent commit, and the tag is considered its child commit. The entity that signed the tag needs the `sign_tag` capability, and only the `sign_tag` capability. ## Authenticating Archives Archives like tarballs are often generated as part of a software's release process. These may be signed. To authenticate an archive with respect to a signature, and a trust root, the trust root's policy is used to authenticate the tarball's signature. The entity that signed the tarball must have the `sign_archive` capability. Unlike a commit, an archive does not have a pointer to the commit that it was derived from. Thus, if an archive is derived from commit `c`, it may be possible to authenticate commit `c`, as well as tags referring to commit `c` using a given trust root, but to not authenticate an archive derived from commit `c` using the same trust root, because the policy changed in the meantime. If the signature includes the notation `commit@notations.sequoia-pgp.org`, then the value of the notation is interpreted as the commit that the archive is derived from. The value of the notation is a hexadecimal value corresponding to the commit's full hash. Truncated hashes MUST be considered erroneous. The commit identifier MUST NOT be a branch name, a tag name, or a truncated hash. Since archives are often verified outside of a repository, one or more repositories may be specified using the `repository@notations.sequoia-pgp.org` notation. In that case, each notation indicates a git repository. For example, the main repository of the reference implementation, `sq-git`, is `https://gitlab.com/sequoia-pgp/sequoia-git.git`. So, archives SHOULD include the `repository@notations.sequoia-pgp.org` notation with `https://gitlab.com/sequoia-pgp/sequoia-git.git` as the value. When `commit@notations.sequoia-pgp.org` is present in the signature, the implementation MUST use that commit's policy to authenticate the archive, and then authenticate that commit by chaining back to the trust root, as described above; in this case, it MUST NOT use the trust root's policy directly unless the specified commit is also the trust root. # Reference implementation A Rust implementation of this specification is part of Sequoia. See https://gitlab.com/sequoia-pgp/sequoia-git for the source code. # Security Concerns ## Malicious vs. Buggy Changes The scheme presented here can help mitigate malicious attacks on a code base, but it does nothing to prevent design flaws or code errors. That is, this scheme does not and cannot provide any protections from normal bugs. ## Trusted Developers The protections outlined in this document are mainly designed to stop third-parties from adding malicious code to a project. This system provides no protection from a developer who is authorized to make changes and turns out to be malicious. That said, because commits are signed, when malicious code is discovered, an audit is required to restore trust in the code base. Using this system, it is easier to identify other code added by the same person, and focus an audit on that code. ## Judging Code vs. Judging Humans The approach described in this document relies on transitive trust. The basic idea is that if a user is willing to run a developer's code, then they can reasonably rely on that developer to modify the code, and to delegate that capability to a third party. Yet, writing and reviewing code is fundamentally different from evaluating another person's intents. This is demonstrated quite well by the events surrounding the popular `event-stream` npm package, {{event-stream}}. In 2018, a new developer gained the trust of the package's maintainer by contributing a number of high-quality changes. The original developer eventually made the new developer the maintainer, and the new maintainer introduced malicious code to steal user's credentials. ## Operational Security Signing commits relies on each developer having a long-term identity key, which they keep safe. If the key is compromised, the attacker is able to impersonate the developer. It is possible to limit the damage by revoking the compromised key, or having another authorized user retire the developer's access. In this regard, sigstore appears to be better as it relies on ephemeral signing keys, which are issued by a central authority. However, in order to obtain a signing key, the user needs to log in. If they use a password, then if an attacker gets access to the password, an attacker can impersonate the developer. If the developer uses a second factor like a hardware token, then they are again using private key cryptography, and may as well put their private keys on a hardware token, and forego the centralized infrastructure. ## Dependencies This specification has concentrated on enabling a user of a software project to authenticate new versions. But most software has its own dependencies, and those also need to be authenticated. A user could identify all software that they are willing to rely on, but this is more work than most users are willing and able to do. But, just as developers are usually in a better position to evaluate who should be allowed to contribute to their project, they are also in a better position to designate a trust root for their dependencies. Enabling this functionality requires ecosystem-specific tooling. The developer needs to be able to specifying a trust root for each dependency, and the build infrastructure needs to authenticate the dependencies. For instance, the Rust ecosystem uses Cargo for building and dependency management. Currently, to add `sequoia-openpgp` as a dependency to a project, a developer would modify their `Cargo.toml` file as follows: [dependencies] sequoia-openpgp = { version = "1" } Instead, they would also specify a trust root, which they've presumably audited: [dependencies] sequoia-openpgp = { version = "1", trust-root = "HASH" } When downloading the dependency, `cargo` would make sure that the dependency can be authenticated from the specified trust root, and if not throw an error. ## Document History This is a first draft that has not been published. # Acknowledgments My thanks go---in particular, but not only---to the Sequoia PGP team for many fruitful discussions. Funding for this project was provided by the Sovereign Tech Fund. sequoia-git-0.4.0/src/cli/mod.rs000064400000000000000000000716601046102023000145510ustar 00000000000000use std::fmt::Write; use std::path::{ PathBuf, }; use clap::{ ArgGroup, Command, CommandFactory, Parser, builder::StyledStr, }; // Note: this file is used both from main.rs and from build.rs. This // means that we can only use what is under the cli module! // // We also try to minimize the number of build dependencies to reduce // the build time. This includes not depending on sequoia-openpgp. // Since we do need a couple of types from sequoia-openpgp, we mock // them in build.rs. If you import another type here, you'll need to // mock that too. use crate::openpgp; use openpgp::{ KeyHandle, // Mock additional imports in build.rs! }; pub mod paths; use paths::StateDirectory; use paths::StateDirectoryValueParser; pub const GLOBAL_OPTIONS_HEADER: &str = "Global Options"; /// Builds the top-level Clap command. pub fn build(globals_hidden: bool) -> clap::Command { let mut command = Cli::command() // To improve readability limit the width of the text columns. .max_term_width(100); // Change the globals to be hidden. if globals_hidden { fn add_after_help(command: &mut Command) { // We want to append to after_long_help. let mut after_long_help = if let Some(s) = command.get_after_long_help() { let mut s = s.clone(); s.write_char('\n').expect("Can write to string"); s.write_char('\n').expect("Can write to string"); s } else if let Some(s) = command.get_after_help() { // If after_long_help is not explicitly set, it // falls back to after_help. If we set // after_long_help, the fallback no longer happens // so we need to do it manually. let mut s = s.clone(); s.write_char('\n').expect("Can write to string"); s.write_char('\n').expect("Can write to string"); s } else { StyledStr::new() }; after_long_help.write_str(&format!("\ {}:\n See `sq-git --help` for a description of the global options.", GLOBAL_OPTIONS_HEADER)) .expect("Can write to string"); *command = command.clone() .after_long_help(after_long_help); for sc in command.get_subcommands_mut() { add_after_help(sc); } } command = command .mut_args(|mut a| { if a.is_global_set() { a = a.hide(true); } a }); add_after_help(&mut command); }; command } #[derive(Parser)] #[command( author, name = "sq-git", version = format!("{}{}", clap::crate_version!(), if let Some(v) = option_env!("VERGEN_GIT_DESCRIBE") { format!("-g{}", v) } else { "".into() }), about = "A tool to help protect a project's supply chain.", long_about = "\ `sq-git` is a tool that can help improve a project's supply chain \ security. To use `sq-git`, you add a policy file (`openpgp-policy.toml`) to \ the root of a `git` repository. The policy file includes a list of \ OpenPGP certificates, and the types of changes they are authorized to \ make. The capabilities include adding a commit, and authorizing a new \ certificate. See the `sq-git init` and `sq-git policy` \ subcommands for more details. A commit is considered authorized if the commit is signed, and at \ least one immediate parent commit's policy authorizes the signer's \ certificate to make that type of change. A downstream user authenticates a version of the project using the \ `sq-git log` subcommand. They specify a trust root (a commit), \ which they've presumably audited, and `sq-git log` looks for an \ authenticated path from the trust root to the current `HEAD`. If \ there is an authenticated path, then there is evidence that the \ project's maintainers authorized all of the intermediate changes. To find an authenticated path, `sq-git` starts with the current \ commit, and tries to authenticate it using each of its parent commits. \ It repeats this process for each parent commit that authenticated it. \ If the trust root is reached, then the version is considered \ authenticated.", subcommand_required = true, arg_required_else_help = true, disable_colored_help = true, disable_version_flag = true, // We want a top-level `help` subcommand, but we don't want // subcommands groups (like `sq pki`) to have a `help` subcommand. // Users get used to being able to use `help` instead of `--help`, // and then are confused when `sq pki authenticate help` (i.e., // using the `help` subcommand on an action) doesn't work. // // Note: this option is recursive. So if we disable it here, then // we have to enable it for all of the top-level subcommands. disable_help_subcommand = false, )] pub struct Cli { #[clap( long = "home", value_name = "PATH", env = "SEQUOIA_HOME", global = true, help_heading = GLOBAL_OPTIONS_HEADER, help = "Set the home directory", long_help = format!("\ Set the home directory Sequoia's default home directory is `{}`. When using the default \ location, files are placed according to the local standard, \ e.g., the XDG Base Directory Specification. When an alternate \ location is specified, the user data, configuration files, and \ cache data are placed under a single, unified directory. This is \ a lightweight way to partially isolate Sequoia programs. Use `default` to explicitly use the default location, use `none` to \ not use a home directory.", sequoia_directories::Home::default_location() .map(|p| { let p = p.display().to_string(); if let Some(home) = dirs::home_dir() { let home = home.display().to_string(); if let Some(rest) = p.strip_prefix(&home) { return format!("$HOME{}", rest); } } p }) .unwrap_or("".to_string())), value_parser = StateDirectoryValueParser::default(), )] pub home: Option, #[clap( long = "cert-store", value_name = "PATH", env = "SEQUOIA_CERT_STORE", global = true, help_heading = GLOBAL_OPTIONS_HEADER, help = "Specify the location of the certificate store", long_help = format!("\ Specify the location of the certificate store By default, `sq-git` uses \ the OpenPGP certificate directory in Sequoia's home directory (see `--home`), \ {}. This can be overridden by using this options, or setting the either \ the `SEQUOIA_CERT_STORE` or the `PGP_CERT_D` environment variable. Use `default` to explicitly use the default cert store, use `none` to \ not use a cert store.", sequoia_directories::Home::default() .map(|home| { let p = home.data_dir(sequoia_directories::Component::CertD); let p = p.display().to_string(); if let Some(home) = dirs::home_dir() { let home = home.display().to_string(); if let Some(rest) = p.strip_prefix(&home) { return format!("$HOME{}", rest); } } p }) .unwrap_or("".to_string())), value_parser = StateDirectoryValueParser::default(), )] pub cert_store: Option, #[arg( global = true, long = "output-format", value_name = "FORMAT", value_parser = ["human-readable", "json"], default_value = "human-readable", help_heading = GLOBAL_OPTIONS_HEADER, help = "Produces output in the specified format, if possible", )] pub output_format: String, #[command(subcommand)] pub subcommand: Subcommand, } #[derive(Parser, Debug)] #[clap( name = "init", about = "Suggests how to create a policy", long_about = "\ Suggests how to create a policy Suggests how to create a policy by analyzing recent commits. The \ heuristic considers signed commits on the current branch that were \ made over the past half year, and suggests that the most frequent \ committer be made the project maintainer, and other committers be made \ committers. Note: This is a *simple* heuristic; its recommendations should be \ viewed as a starting point. In particular, you still need to do some \ due diligance. It is essential that you review the suggested roles, \ and check that people actually control the certificates. Ideally, you \ should ask each person for their OpenPGP fingerprint in person. But \ in the very least you should ask them via email.", after_help = "\ Examples: # Inspects the current branch and suggests how to create a policy. $ sq-git init ", )] pub struct InitSubcommand { /// Show additional information. #[clap( short='v' )] pub verbose: bool, } /// Describe, update, and change the OpenPGP policy. #[derive(Parser)] #[clap( name = "policy", subcommand_required = true, arg_required_else_help = true, disable_help_subcommand = true, )] pub enum PolicySubcommand { /// Describes the policy. /// /// This reads in the policy and dumps it in a more descriptive /// format on stdout. /// /// By default the policy in the root of the repository's working /// tree is described. Describe { #[command(flatten)] policy_file: PolicyFileArg, /// Describe the policy from the specified commit. #[arg(long, conflicts_with="path")] commit: Option, }, /// Shows changes between two policies. /// /// If no arguments are given, compares `HEAD`'s policy, and the /// working tree's policy file (`openpgp-policy.toml`). If one /// argument is given, the policy in the corresponding commit or /// file is compared with the working tree's policy file. /// Otherwise, the policies of the two commits or files are /// compared. /// /// Exit status: /// /// The exit code is 0 if the policies are the same, and 1 if they /// are different. #[clap(group(ArgGroup::new("cert-ref").args(&["old", "old_commit", "old_file"])))] #[clap(group(ArgGroup::new("new-ref").args(&["new", "new_commit", "new_file"])))] Diff { /// The old policy. /// /// This is first interpreted as a commit. If there is no /// such commit, it is interpreted as a filename. /// /// When using this command from a script, you should prefer /// `--old-commit` or `--old-file` instead as they are /// explicit. old: Option, /// The old policy as taken from the specified commit. #[arg(long)] old_commit: Option, /// The old policy as taken from the specified file. #[arg(long)] old_file: Option, /// The new policy. /// /// This is first interpreted as a commit. If there is no /// such commit, it is interpreted as a filename. /// /// When using this command from a script, you should prefer /// `--new-commit` or `--new-file` instead as they are /// explicit. new: Option, /// The new policy as taken from the specified commit. #[arg(long)] new_commit: Option, /// The new policy as taken from the specified file. #[arg(long)] new_file: Option, }, /// Changes the authorizations. /// /// A certificate can delegate any of its capabilities to another /// certificate without breaking an authentication chain. /// /// To fork a project, you create a new policy file. Authorize { #[command(flatten)] policy_file: PolicyFileArg, name: String, #[command(flatten)] cert: CertArg, /// Grant the certificate the sign-commit capability. /// /// This capability allows the certificate to sign commits. /// That is, when authenticating a version of the repository, /// a commit is considered authenticated if it is signed by a /// certificate with this capability. #[arg(long, overrides_with = "no_sign_commit", default_value_ifs( [("committer", "true", Some("true")), ("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_commit: bool, /// Rescind the sign-commit capability from a certificate. /// /// Removes the sign-commit capability for the certificate. /// Note: this operation is not retroactive; commits signed /// with the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_commit: bool, /// Grant the certificate the sign-tag capability. /// /// This capability allows the certificate to sign tags. That /// is, when authenticating a tag, a tag is considered /// authenticated if it is signed by a certificate with this /// capability. #[arg(long, overrides_with = "no_sign_tag", default_value_ifs( [("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_tag: bool, /// Rescind the sign-tag capability from a certificate. /// /// Removes the sign-tag capability for the certificate. /// Note: this operation is not retroactive; tags signed with /// the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_tag: bool, /// Grant the certificate the sign-archive capability. /// /// This capability allows the certificate to sign tarballs or /// other archives. That is, when authenticating an archive, /// an archive is considered authenticated if it is signed by /// a certificate with this capability. #[arg(long, overrides_with = "no_sign_archive", default_value_ifs( [("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_archive: bool, /// Rescind the sign-archive capability from a certificate. /// /// Removes the sign-archive capability for the certificate. /// Note: this operation is not retroactive; archives signed /// with the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_archive: bool, /// Grant the certificate the add-user capability. /// /// This capability allows the certificate add users to the /// policy file, and to grant them capabilities. A /// certificate that has this capability is only allowed to /// grant capabilities that it has. That is, if Alice has the /// `sign-commit` and `add-user` capability, she can grant Bob /// either of those capabilities, but she is can't grant him /// the `sign-tag` capability, because she does not have that /// capability. #[arg(long, overrides_with = "no_add_user", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] add_user: bool, /// Rescind the add-user capability from a certificate. /// /// Removes the add-user capability for the certificate. /// Note: this operation is not retroactive; operations that /// rely on this grant prior to the policy change are still /// considered authenticated. /// /// Rescinding the add-user capability from a certificate does /// not rescind any grants that that certificate made. That /// is, if Alice grants Bob the can-sign and add-user /// capability, Bob grants Carol the can-sign capability, and /// then Alice rescinds Bob's can-sign and add-user /// capabilities, Carol still has the can-sign capability. In /// this way, a grant is a copy of a capability. #[clap(long)] no_add_user: bool, /// Grants the certificate the retire-user capability. /// /// This capability allows the certificate to rescind /// arbitrary capabilities. That is, if Alice has the /// retire-user capability, she can rescind Bob's can-sign /// capability even if she didn't grant him that capability. #[arg(long, overrides_with = "no_retire_user", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] retire_user: bool, /// Rescind the retire-user capability from a certificate. /// /// Removes the retire-user capability from a certificate. /// The specified certificate cannot no longer rescind /// capabilities even those that they granted. #[clap(long)] no_retire_user: bool, /// Grants the certificate the audit capability. /// /// This capability allows the certificate to audit commits. /// If Alice has the audit capability, Bob has the can-sign /// capability, and then Bob revokes his key, because it was /// compromised, then all commits that Bob signed are /// considered invalid. Alice can recover from this situation /// by auditing Bob's commit. After auditing each commit, she /// marks it as good using `sq-git policy goodlist`. #[arg(long, overrides_with = "no_audit", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] audit: bool, /// Rescind the audit capability from a certificate. /// /// Removes the audit capability from a certificate. The /// specified certificate cannot no longer mark arbitrary /// commits as good. #[clap(long)] no_audit: bool, /// Grants all capabilities relevant to a project maintainer. /// /// A project maintainer is a person who is responsible for /// maintaining the project. This options grants the /// certificate all capabilities. #[arg(long)] project_maintainer: bool, /// Grants all capabilities relevant to a release manager. /// /// A release manager is authorized to commit changes, and /// make releases. This options grants the certificate the /// `sign-tag`, `sign-archive`, and `sign-commit` /// capabilities. #[arg(long)] release_manager: bool, /// Grants all capabilities relevant to a committer. /// /// A committer is authorized to commit changes to the code. /// This options grants the certificate the `sign-commit` /// capability. #[arg(long)] committer: bool, }, /// Exports the certificates associated with an entity. #[clap(group(ArgGroup::new("some-entity").args(&["name", "all"]).required(true)))] Export { #[command(flatten)] policy_file: PolicyFileArg, /// Use the policy in the specified commit. #[arg(long, value_name = "COMMIT", conflicts_with="path")] commit: Option, /// The name of the entity whose certificates should be /// exported. #[arg(long, value_name = "NAME")] name: Option, /// Exports all of the certificates. #[arg(long)] all: bool, }, /// Updates the OpenPGP certificates in the policy. /// /// `sq-git` looks for updates to the certificates listed in the /// policy file in the user's certificate store, and on /// the main public keyservers. /// /// Examples: /// /// # Look for certificates updates. /// /// $ sq-git policy sync Sync { #[command(flatten)] policy_file: PolicyFileArg, /// Looks for updates on the specified keyservers. /// /// In addition to looking in the local certificate store, /// also looks for updates in the specified keyserver. #[clap( long, short='s', default_values_t = [ "hkps://keys.openpgp.org".to_string(), "hkps://mail-api.proton.me".to_string(), "hkps://keys.mailvelope.com".to_string(), "hkps://keyserver.ubuntu.com".to_string(), "hkps://sks.pod01.fleetstreetops.com".to_string(), ], )] keyserver: Vec, /// Don't look for updates on any keyservers. /// /// Updates are still looked for in the user's certificate /// store. #[arg(long)] disable_keyservers: bool, }, /// Adds the given commit to the commit goodlist. /// /// This requires the audit capability to not break an /// authentication chain. Goodlist { #[command(flatten)] policy_file: PolicyFileArg, commit: String, }, } #[derive(clap::Subcommand)] pub enum Subcommand { Init(InitSubcommand), Policy { #[command(subcommand)] command: PolicySubcommand, }, /// Lists and verifies commits. /// /// Lists and verifies that the commits from the given trust root /// to the target commit adhere to the policy. /// /// A version is considered authenticated if there is a path from /// the trust root to the target commit on which each commit can /// be authenticated by its parent. /// /// If the key used to sign a commit is hard revoked, then the /// commit is considered bad. `sq-git` looks for hard revocations /// in all of the commits that it examines. Thus, if a project /// maintainer adds a hard revocation to a commit's policy file, /// it will cause later *and* earlier commits signed with that key /// to be considered invalid. This is useful when a key has been /// compromised. /// /// When a key has been hard revoked, downstream users either need /// to start using a more recent trust root, or the upstream /// project maintainers need to audit the relevant commits. If /// the commits are considered benign, they can be added to a /// goodlist using `sq-git policy goodlist`. When a commit is /// considered authenticated, but the certificate has been hard /// revoked, `sq-git` looks to see whether the commit has been /// goodlisted by a commit that is on an authenticated path from /// the commit in question to the target. If so, the commit is /// considered to be authenticated. Log { #[command(flatten)] policy_file: PolicyFileArg, /// Specifies the trust root. /// /// If no policy is specified, then the value of the git /// repository's `sequoia.trustRoot` configuration key is /// used as the trust root. #[arg(long, value_name = "COMMIT")] trust_root: Option, /// Continues to check commits even when it is clear that the /// target commit cannot be authenticated. /// /// Causes `sq-git log` to continue to check commits rather /// than stopping as soon as it is clear that the version /// can't be authenticated. #[arg(long)] keep_going: bool, /// After authenticating the current version, prunes the /// certificates. /// /// After authenticating the current version, prunes unused /// components of the certificates. In particular, subkeys /// that were not used to verify a signature, and user IDs /// that were never considered primary are removed. /// /// This does not remove unused certificates from the policy /// file; this just minimizes them. /// /// This requires the `retire-user` capability. #[arg(long)] prune_certs: bool, /// The commits to check. /// /// If not specified, HEAD is authenticated with respect to /// the trust root. /// /// If a single commit ID is specified, the specified commit /// is authenticated with respect to the trust root. /// /// If a commit range like `3895a3a..3b388ae` is specified, /// the end of the range is authenticated with respect to the /// trust root, and there must be an authenticated path from /// the trust root via the start of the range to the end of /// the range. commit_range: Option, }, /// Verifies signatures on archives like release tarballs. Verify { #[command(flatten)] policy_file: PolicyFileArg, /// Read the policy from this commit. /// /// Falls back to using the value of the git repository's /// `sequoia.trustRoot` configuration key. Can be overridden /// using `--policy-file`. #[arg(long, value_name = "COMMIT")] trust_root: Option, /// The signature to verify. #[arg(long, value_name = "FILENAME")] signature: PathBuf, /// The archive that the signature protects. #[arg(long, value_name = "FILENAME")] archive: PathBuf, }, /// A `git update hook` that enforces the policy. /// /// Insert the following line into `hooks/update` on the shared /// git server to make it enforce the policy embedded in the /// repository starting at the trust root `COMMIT`. /// /// sq-git update-hook --trust-root= "$@" /// /// When a branch is pushed that is not previously known to the /// server, `sq-git update-hook` checks that all commits starting /// from the trust root to the pushed commit adhere to the policy. /// /// When a branch is pushed that is previously known to the /// server, i.e. the branch is updated, `sq-git update-hook` /// checks that all new commits starting from the commit /// previously known to the server to the pushed commit adhere to /// the policy. If there is no path from the previously known /// commit to the new one, the branch has been rebased. Then, we /// fall back to searching for a path from the trust root. UpdateHook { #[command(flatten)] policy_file: PolicyFileArg, /// The commit to use as a trust root. #[arg(long, value_name = "COMMIT", required = true)] trust_root: String, /// The name of the ref being updated /// /// Supplied as the first argument to the update hook, see /// `githooks(5)`. ref_name: String, /// The old object name stored in the ref /// /// Supplied as the second argument to the update hook, see /// `githooks(5)`. old_object: String, /// The new object name stored in the ref /// /// Supplied as third argument to the update hook, see /// `githooks(5)`. new_object: String, } } #[derive(clap::Args, Debug)] #[clap(group(ArgGroup::new("cert") .args(&["value", "cert_handle", "cert_file"]) .required(true)))] pub struct CertArg { /// The filename, fingerprint or Key ID of the certificate to /// authenticate /// /// This is first interpreted as a filename. If that file does /// not exist, then it is interpreted as a fingerprint or Key ID, /// and read from the certificate store. To avoid ambiguity, use /// `--cert` or `--cert-file` instead. /// /// See the top-level option `--home` for more information about /// the certificate store. #[arg(value_name="FILE|FINGERPRINT|KEYID")] pub value: Option, /// The fingerprint or Key ID of the certificate to use /// /// This is read from the user's default certificate /// directory. /// /// See the top-level option `--home` for more information about /// the certificate store. #[arg(long="cert", value_name="FINGERPRINT|KEYID")] pub cert_handle: Option, /// The file containing the certificate to authorize. /// /// The file must contain exactly one certificate. #[arg(long, value_name="FILE")] pub cert_file: Option, } #[derive(clap::Args, Debug)] pub struct PolicyFileArg { /// Use an alternate policy. /// /// The default policy is the `openpgp-policy.toml` file in the /// root of the repository's working tree. #[arg(long="policy-file", value_name = "POLICY", )] pub path: Option, } sequoia-git-0.4.0/src/cli/paths.rs000064400000000000000000000110031046102023000150720ustar 00000000000000// This is a copy of // https://gitlab.com/sequoia-pgp/sequoia-sq/-/blob/main/src/cli/types/paths.rs #![allow(dead_code)] //! A type for absolute paths or default paths, and a clap parser. use std::path::PathBuf; use anyhow::{Result, anyhow}; /// Either an absolute path, or a default path. /// /// Even though this type is homomorphic to [`Option`], we /// need a new type for this, because clap handles [`Option`]s /// differently, and we cannot return [`Option`] from /// `TypedValueParser::parse_ref`. #[derive(Clone, Debug)] pub enum StateDirectory { /// An absolute path. Absolute(PathBuf), /// The default path. Default, /// Explicitly disable this state. None, } impl StateDirectory { /// Returns whether this state has been disabled. #[allow(dead_code)] pub fn is_none(&self) -> bool { matches!(self, StateDirectory::None) } /// Returns the absolute path, or `None` if the default path is to /// be used. pub fn path(&self) -> Result> { match self { StateDirectory::Absolute(p) => Ok(Some(p.clone())), StateDirectory::Default => Ok(None), StateDirectory::None => Err(anyhow!("state is disabled")), } } } /// A value parser for absolute directories with explicit default. /// /// If `default` is given, this parses to `StateDirectory::Default`. /// If `none` is given, this parses to `StateDirectory::None`. If an /// empty path is given, a hint is displayed to give `default` /// instead. /// /// If a relative path is given, a hint is displayed to use an /// absolute path instead. #[derive(Clone, Default)] pub struct StateDirectoryValueParser {} impl clap::builder::TypedValueParser for StateDirectoryValueParser { type Value = StateDirectory; fn parse_ref( &self, cmd: &clap::Command, arg: Option<&clap::Arg>, value: &std::ffi::OsStr, ) -> Result { use clap::error::*; if value == "default" { return Ok(StateDirectory::Default); } if value == "none" { return Ok(StateDirectory::None); } if value.is_empty() { let mut err = Error::new(ErrorKind::InvalidValue) .with_cmd(cmd); if let Some(arg) = arg { err.insert(ContextKind::InvalidArg, ContextValue::String(arg.to_string())); } err.insert(ContextKind::InvalidValue, ContextValue::String("".into())); err.insert(ContextKind::SuggestedValue, ContextValue::String("default".into())); err.insert(ContextKind::Suggested, ContextValue::StyledStrs(vec![ "to use the default directory, use 'default'".into(), ])); return Err(err); } let p = PathBuf::from(value); // Expand `~/foo` to `/home/user/foo`. let p = expand_tilde(p)?; if ! p.is_absolute() { let mut err = Error::new(ErrorKind::InvalidValue) .with_cmd(cmd); if let Some(arg) = arg { err.insert(ContextKind::InvalidArg, ContextValue::String(arg.to_string())); } err.insert(ContextKind::InvalidValue, ContextValue::String(p.display().to_string())); err.insert(ContextKind::Suggested, ContextValue::StyledStrs(vec![ "must be an absolute path".into(), ])); return Err(err); } Ok(StateDirectory::Absolute(p)) } } /// Expands tilde in paths. /// /// There are at least two crates that do this, shellexpand and /// tilde-expand, but both operate on strings, which is the wrong data /// type. /// /// Currently, we only handle `~`, not `~user`. At least shellexpand /// doesn't either. fn expand_tilde(p: PathBuf) -> clap::error::Result { if p.components().next().map(|c| c.as_os_str() == "~").unwrap_or(false) { Ok(dirs::home_dir().ok_or_else( || { use clap::error; // Not great, but we cannot return a rich error here. eprintln!("Error: no home directory known for this platform"); error::Error::new(error::ErrorKind::Io) })? .join(p.components().skip(1).collect::())) } else { Ok(p) } } sequoia-git-0.4.0/src/commands/init.rs000064400000000000000000000210701046102023000157550ustar 00000000000000use std::{ collections::{ btree_map::Entry, BTreeMap, BTreeSet, }, time::{ Duration, SystemTime, UNIX_EPOCH, }, }; use anyhow::Context; use sequoia_openpgp as openpgp; use openpgp::{ KeyID, Packet, parse::{ PacketParser, PacketParserResult, Parse, }, }; use crate::Result; use crate::git_repo; use crate::cli::InitSubcommand; // How far in the past to look to find active contributors. const HORIZON: Duration = Duration::new(183 * 24 * 60 * 60, 0); // The minimum number of commits to examine. const MIN_COMMITS: usize = 10; pub fn dispatch(c: InitSubcommand) -> Result<()> { let git = git_repo()?; let head_id = git.head().context("Looking up HEAD")? .resolve().context("Resolving HEAD to a commit")? .target().expect("resolved to direct reference"); // We do a breath-first search and examine the commits since // CUTOFF, but at least MIN_COMMITS. let now = SystemTime::now(); let cutoff = now - HORIZON; // Set to true if there aren't enough commits after the cutoff. let mut cutoff_exceeded = false; // Whether we've already processed a commit. let mut processed: BTreeSet = Default::default(); // The last commit that we processed. let mut last_processed = None; // Commits that we still need to process. let mut pending: BTreeSet = Default::default(); pending.insert(head_id.clone()); let mut unsigned: Vec = Vec::new(); struct Committer { commit_count: usize, // Keys used by this commit and the number of commits they // signed. signing_keys: BTreeMap, } let mut committers: BTreeMap = Default::default(); while let Some(commit_id) = pending.pop_first() { processed.insert(commit_id.clone()); last_processed = Some(commit_id.clone()); let commit = git.find_commit(commit_id) .with_context(|| { format!("Getting commit data for {}", commit_id) })?; if c.verbose { println!("{}: {}", commit_id, commit.summary().unwrap_or("")); } // See who signed it. let mut signing_keys: BTreeSet = Default::default(); let mut have_sig = false; if let Ok((sig, _data)) = git.extract_signature(&commit_id, None) { // We expect signature packets. Anything else is not ok. let mut ok = true; if let Ok(mut ppr) = PacketParser::from_bytes(&sig[..]) { while let PacketParserResult::Some(pp) = ppr { match pp.next() { Ok((packet, next_ppr)) => { ppr = next_ppr; if let Packet::Signature(sig) = packet { have_sig = true; let issuers = sig.get_issuers(); if c.verbose { for issuer in issuers.iter() { println!(" Allegedly signed by {}", issuer); } } signing_keys.extend( issuers.into_iter().map(KeyID::from)); } else { ok = false; break; } } Err(err) => { eprintln!("Warning: {} contains an invalid \ signature: {}", commit_id, err); ok = false; break; } } } } if ! ok { have_sig = false; signing_keys.clear(); } } if ! have_sig { unsigned.push( commit.as_object() .short_id().ok() .and_then(|id| id.as_str().map(|id| id.to_string())) .unwrap_or_else(|| commit.id().to_string())); } let committer = commit.committer(); let committer = format!( "{}{}{}", committer.name().unwrap_or(""), if committer.name().is_some() && committer.email().is_some() { " " } else { "" }, committer .email() .map(|e| format!("<{}>", e)) .unwrap_or("".to_string())); match committers.entry(committer) { Entry::Occupied(mut oe) => { let e = oe.get_mut(); e.commit_count += 1; for signing_key in signing_keys.into_iter() { e.signing_keys.entry(signing_key) .and_modify(|e| { *e += 1; }) .or_insert(1); } } Entry::Vacant(e) => { let mut info = Committer { commit_count: 1, signing_keys: BTreeMap::new(), }; for signing_key in signing_keys.into_iter() { info.signing_keys.insert(signing_key, 1); } e.insert(info); } } for parent in commit.parents() { let parent_id = parent.id(); if processed.contains(&parent_id) || pending.contains(&parent_id) { continue; } let commit_time = parent.time(); let commit_time = UNIX_EPOCH + Duration::new(commit_time.seconds() as u64, 0); if commit_time < cutoff { if processed.len() + pending.len() > MIN_COMMITS { continue; } else { cutoff_exceeded = true; } } pending.insert(parent_id.clone()); } } if cutoff_exceeded { println!("# Examined {} recent commits.", processed.len()); } else { println!("# Examined the {} commits in the last {} days.", processed.len(), HORIZON.as_secs() / 24 / 60 / 60); } if let Some(commit_id) = last_processed { println!("# Stopped at commit {}.", commit_id); } println!(); print!("# Encountered {} unsigned commits", unsigned.len()); if ! unsigned.is_empty() { print!(" ("); for (i, id) in unsigned.iter().enumerate() { if i == 3 && ! c.verbose { print!("..."); break; } if i > 0 { print!(" "); } print!("{}", id); } print!(")"); } println!(); let mut committers: Vec<(String, Committer)> = committers.into_iter().collect(); committers.sort_by_key(|(committer, info)| { (usize::MAX - info.commit_count, committer.clone()) }); for (i, (committer, info)) in committers.iter().enumerate() { println!(); println!("\ # {} added {} commits ({}%). #", committer, info.commit_count, (100 * info.commit_count) / processed.len()); if info.signing_keys.is_empty() { println!("\ # Never signed any commits. To authorize them, you'll need their OpenPGP # certificate."); continue; } println!("\ # After checking that they really control the following OpenPGP keys: # # {} #", info .signing_keys.iter() .map(|(keyid, count)| { format!("{} ({} commits)", keyid, count) }) .collect::>() .join("# ")); if i == 0 { println!("\ # You can make them a project maintainer (someone who can add and # remove committers) by running:"); } else { println!("\ # You can make them a committer by running:"); } for (keyid, _count) in info.signing_keys.iter() { println!("sq-git policy authorize {} {:?} {}", if i == 0 { " --project-maintainer" } else { "--committer" }, committer, keyid); } } Ok(()) } sequoia-git-0.4.0/src/commands/policy.rs000064400000000000000000000445461046102023000163260ustar 00000000000000use std::{ collections::{BTreeMap, btree_map::Entry}, io, path::{Path, PathBuf}, sync::OnceLock, }; use anyhow::Context; use git2::Repository; use sequoia_openpgp as openpgp; use openpgp::{ Cert, Fingerprint, KeyHandle, armor, serialize::Marshal, }; use sequoia_cert_store as cert_store; use cert_store::Store; use crate::Config; use crate::Error; use crate::Policy; use crate::Result; use crate::cli::PolicySubcommand; use crate::git_repo; use crate::output; const TRACE: bool = false; pub fn dispatch(config: &Config, command: PolicySubcommand) -> Result<()> { let git_ = OnceLock::new(); let git = || -> Result<&Repository, Error> { if let Some(repo) = git_.get() { return Ok(repo); } let repo = git_repo()?; let _ = git_.set(repo); Ok(git_.get().unwrap()) }; let git_policy = |git: &Repository, name: &str| -> Result { let (object, reference) = git.revparse_ext(name) .with_context(|| { format!("Looking up {:?}.", name) })?; // We won't get a reference if we are passed an OID. let commit = if let Some(reference) = reference { let commit = reference.peel_to_commit() .with_context(|| { format!("{:?} is not a commit", name) })?; commit.id() } else { if let Ok(commit) = object.into_commit() { commit.id() } else { return Err(anyhow::anyhow!("{:?} is not a commit", name)); } }; match Policy::read_from_commit(git, &commit) { Ok(policy) => Ok(policy), Err(err) => { if let Error::MissingPolicy(_) = err { eprintln!("Warning {} does not have a policy file. \ Defaulting to an empty policy.", name); Ok(Policy::default()) } else { Err(err.into()) } } } }; match command { PolicySubcommand::Describe { policy_file, commit, } => { let p = if let Some(commit) = commit { git_policy(git()?, &commit)? } else { config.read_policy(&policy_file)? }; match config.output_format { output::Format::HumanReadable => { output::describe_policy(&p)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &p)?, } }, PolicySubcommand::Diff { old, old_commit, old_file, new, new_commit, new_file } => { tracer!(TRACE, "sq-git policy diff"); let r = |commit: Option<&str>, file: Option<&Path>| -> Result<_> { let mut policy = None; let mut err_commit = None; if let Some(commit) = commit { match git().and_then(|git| Ok(git_policy(git, &commit)?)) { Ok(p) => { t!("Read policy from commit {:?}", commit); policy = Some(p) }, Err(err) => { t!("Error reading policy from commit {:?}: {}", commit, err); err_commit = Some(err); } } } let mut err_file = None; if policy.is_none() { if let Some(file) = file { match Policy::read_file(&file) { Ok(p) => { t!("Read policy from file {}", file.display()); policy = Some(p); } Err(err) => { t!("Error reading policy from file {:?}: {}", file.display(), err); err_file = Some(err) } } } } match policy { Some(policy) => Ok(policy), None => { if let (Some(commit), Some(err_commit)) = (commit, err_commit) { eprintln!("Reading commit {}: {}", commit, err_commit); } if let (Some(file), Some(err_file)) = (file, err_file) { eprintln!("Reading file {}: {}", file.display(), err_file); } Err(anyhow::anyhow!("Failed to read policy")) } } }; let old_commit = old_commit.as_deref().or(old.as_deref()); let old_as_path = old.as_deref().map(|p| PathBuf::from(p)); let old_file = old_file.as_deref().or(old_as_path.as_deref()); let old_policy = if old_commit.is_some() || old_file.is_some() { r(old_commit, old_file)? } else { // Default to HEAD's policy. t!("Reading old policy from HEAD"); git_policy(git()?, "HEAD")? }; let new_commit = new_commit.as_deref().or(new.as_deref()); let new_as_path = new.as_deref().map(|p| PathBuf::from(p)); let new_file = new_file.as_deref().or(new_as_path.as_deref()); let new_policy = if new_commit.is_some() || new_file.is_some() { r(new_commit, new_file)? } else { // Default to the policy in the working tree. t!("Reading new policy from git working tree"); Policy::read_from_working_dir()? }; let diff = old_policy.diff(&new_policy)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } if ! diff.changes.is_empty() { // Don't return an error: sq-git prints it, which is // annoying. std::process::exit(1); } }, PolicySubcommand::Export { policy_file, commit, name, all, } => { let p = if let Some(commit) = commit { git_policy(git()?, &commit)? } else { config.read_policy(&policy_file)? }; let mut certs: BTreeMap = BTreeMap::new(); let mut merge = |cert: Cert| -> Result<()> { match certs.entry(cert.fingerprint()) { Entry::Occupied(oe) => { let oe = oe.into_mut(); *oe = (*oe).clone().merge_public_and_secret(cert) .context("Merging certificates")?; } Entry::Vacant(ve) => { ve.insert(cert); } } Ok(()) }; if all { // Serialize all certificates. for (entity, a) in p.authorization().iter() { for cert in a.certs()? { let cert = cert.with_context(|| { format!("Parsing {}'s keyring", entity) })?; let fpr = cert.fingerprint(); merge(Cert::try_from(cert).with_context(|| { format!("Parsing {}'s keyring: {} is corrupted", entity, fpr) })?)?; } } } else if let Some(name) = name { if let Some(auth) = p.authorization().get(&name) { // Only serialize the certificates for the specified // entity. for cert in auth.certs()? { let cert = cert.with_context(|| { format!("Parsing {}'s keyring", name) })?; let fpr = cert.fingerprint(); merge(Cert::try_from(cert).with_context(|| { format!("Parsing {}'s keyring: {} is corrupted", name, fpr) })?)?; } } else { eprintln!("Entity {:?} is not known.", name); eprintln!("Known entities"); for name in p.authorization().keys() { eprintln!(" - {}", name); } return Err(anyhow::anyhow!("Unknown entity")); } } else { unreachable!("enforced by clap"); } let stdout = std::io::stdout(); let mut output = armor::Writer::new(stdout, armor::Kind::PublicKey)?; for cert in certs.into_values() { cert.serialize(&mut output)?; } output.finalize()?; }, PolicySubcommand::Authorize { policy_file, name, cert, sign_commit, no_sign_commit, sign_tag, no_sign_tag, sign_archive, no_sign_archive, add_user, no_add_user, retire_user, no_retire_user, audit, no_audit, project_maintainer: _, release_manager: _, committer: _, } => { let cert = cert.get(&config)?; let fp = cert.fingerprint(); let old_policy = config.read_policy_or_default(&policy_file)?; let mut p = old_policy.clone(); let (new_entry, a) = match p.authorization_mut().entry(name) { Entry::Occupied(oe) => (false, oe.into_mut()), Entry::Vacant(ve) => (true, ve.insert(Default::default())), }; if new_entry && (! sign_commit && ! sign_tag && ! sign_archive && ! add_user && ! retire_user && ! audit) { eprintln!("Warning: Adding new entry with no capabilities. \ You probably want to add some capabilities by \ running the command again, and specifying \ \"--committer\", \"--release-manager\", \ or \"--project-maintainer\". Refer to the \ help for details.\""); } let mut merged = false; let mut updated = Vec::new(); for c in a.certs()? { let mut c = Cert::try_from(c?)?; if c.fingerprint() == fp { c = c.merge_public(cert.clone())?; merged = true; } updated.push(c); } if ! merged { updated.push(cert); } a.set_certs(updated)?; a.sign_commit = (a.sign_commit | sign_commit) & !no_sign_commit; a.sign_tag = (a.sign_tag | sign_tag) & !no_sign_tag; a.sign_archive = (a.sign_archive | sign_archive) & !no_sign_archive; a.add_user = (a.add_user | add_user) & !no_add_user; a.retire_user = (a.retire_user | retire_user) & !no_retire_user; a.audit = (a.audit | audit) & !no_audit; let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, PolicySubcommand::Sync { policy_file, keyserver: keyservers, disable_keyservers, } => { let old_policy = config.read_policy(&policy_file)?; let mut p = old_policy.clone(); let mut keyserver = keyservers .into_iter() .map(|keyserver| { sequoia_net::KeyServer::new(&keyserver) .map(|instance| { (keyserver, instance) }) }) .collect::>>()?; let cert_update = |cert: Cert, update: Cert| -> (Cert, bool) { if cert.fingerprint() != update.fingerprint() { eprintln!("bad server response, \ wrong certificate ({}).", update.fingerprint()); (cert, false) } else { match cert.clone().insert_packets(update.into_packets()) { Ok((cert, changed)) => { if changed { eprintln!("updated."); } else { eprintln!("unchanged."); } (cert, changed) } Err(err) => { eprintln!("{}", err); (cert, false) } } } }; // XXX: We should do this in parallel. tokio::runtime::Builder::new_multi_thread() .enable_all() .build() .unwrap() .block_on(async { let mut any_changed = false; for (id, a) in p.authorization_mut().iter_mut() { let mut changed = false; let mut updated = Vec::new(); for cert in a.certs()? { let mut cert = Cert::try_from(cert?)?; let fp = cert.fingerprint(); eprint!("Updating {} ({}) from the local \ certificate store... ", fp, id); if let Ok(c) = config.cert_store()? .lookup_by_cert_fpr(&fp) .and_then(|lc| lc.to_cert().cloned()) { let did_change; (cert, did_change) = cert_update(cert, c); changed |= did_change; } else { eprintln!("not found."); }; if ! disable_keyservers { let kh = KeyHandle::from(fp); for (uri, keyserver) in keyserver.iter_mut() { eprint!("Updating {} ({}) from {}... ", kh, id, uri); match keyserver.get(kh.clone()).await { Ok(certs) => { for c in certs { if let Ok(c) = c { let did_change; (cert, did_change) = cert_update(cert, c); changed |= did_change; } } } Err(err) => { eprintln!("{}.", err); } } } } updated.push(cert); } if changed { a.set_certs(updated)?; any_changed = true; } } if any_changed { eprintln!("Note: certificates are stripped so not \ all certificate updates may be relevant."); } Ok::<(), anyhow::Error>(()) })?; let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, PolicySubcommand::Goodlist { policy_file, commit, } => { let git = git()?; let object = git.revparse_single(&commit) .with_context(|| { format!("Looking up \"{}\"", commit) })?; let commit = object.peel_to_commit() .with_context(|| { format!("\"{}\" does not refer to a commit", commit) })?; let old_policy = config.read_policy(&policy_file)?; let mut p = old_policy.clone(); p.commit_goodlist_mut().insert(commit.id().to_string()); let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, } Ok(()) } sequoia-git-0.4.0/src/commands.rs000064400000000000000000000000361046102023000150110ustar 00000000000000pub mod init; pub mod policy; sequoia-git-0.4.0/src/git.rs000064400000000000000000000141501046102023000137750ustar 00000000000000use std::{ collections::{ BTreeSet }, }; use anyhow::Result; use git2::{ Repository, Oid, }; use crate::{ Error, }; const TRACE: bool = false; /// Returns whether `ancestor` is an ancestor of `target`. /// /// A commit is considered to be an ancestor of another commit if /// there is a path from the first commit to the target commit. Note: /// this does not authenticate the path, or even check whether the /// commits are signed. Commits are considered their own ancestors. /// /// Returns `Ok(())` if there is a path. If there is no path, returns /// `Err(Error::NoPathConnecting)`. pub fn git_is_ancestor(git: &Repository, ancestor: Oid, target: Oid) -> Result<()> { tracer!(TRACE, "is_ancestor"); t!("Looking for {}..{}", ancestor, target); if ancestor.is_zero() { return Err(Error::NoPathConnecting(ancestor, target).into()); } if ancestor == target { return Ok(()); } // Whether we've already processed a commit. let mut processed: BTreeSet = Default::default(); // Commits that we still need to process. let mut pending: BTreeSet = Default::default(); pending.insert(target.clone()); while let Some(commit_id) = pending.pop_first() { t!("Visiting commit {:?}", commit_id); processed.insert(commit_id.clone()); let commit = git.find_commit(commit_id)?; for parent in commit.parents() { let parent_id = parent.id(); if processed.contains(&parent_id) || pending.contains(&parent_id) { // There is a valid path from PARENT to TARGET, which // is not via COMMIT. There is no need to find a // second path. continue; } if parent_id == ancestor { t!("Reached ancestor!"); return Ok(()); } pending.insert(parent_id.clone()); } } Err(Error::NoPathConnecting(ancestor, target).into()) } #[cfg(test)] mod test { use super::*; use std::path::Path; use tempfile::TempDir; use git2::Commit; use git2::Repository; fn commit_file<'repo, P>(repo: &'repo Repository, filename: P, content: &[u8], commit_message: &str, parents: &[&Commit<'repo>]) -> Commit<'repo> where P: AsRef { let filename = filename.as_ref(); let filename_abs = repo.workdir().unwrap().join(&filename); std::fs::write(&filename_abs, content).unwrap(); let mut index = repo.index().unwrap(); index.add_path(&filename).unwrap(); let oid = index.write_tree().unwrap(); let tree = repo.find_tree(oid).unwrap(); let sig = repo.signature().unwrap(); let commit_oid = repo.commit( None, &sig, &sig, commit_message, &tree, parents) .unwrap(); let commit = repo.find_commit(commit_oid).unwrap(); commit } #[test] fn ancestor() -> Result<()> { let dir = TempDir::new()?; let repo = Repository::init(&dir) .expect("Initialize git repository"); let mut config = repo.config().unwrap(); config.set_str("user.name", "name").unwrap(); config.set_str("user.email", "email").unwrap(); // root // / \ // l.0 r.0 // | | // l.1 r.1 // \ / // merge // | // c.0 // | // c.1 let root = commit_file( &repo, "root", b"root", "root", &[]); let l_0 = commit_file( &repo, "l", b"0", "commit l.0", &[ &root ]); let l_1 = commit_file( &repo, "l", b"1", "commit l.1", &[ &l_0 ]); let r_0 = commit_file( &repo, "r", b"0", "commit r.0", &[ &root ]); let r_1 = commit_file( &repo, "r", b"1", "commit r.1", &[ &r_0 ]); let m = commit_file( &repo, "m", b"merge!", "commit merge", &[ &l_1, &r_1 ]); let c_0 = commit_file( &repo, "c", b"0", "commit c.0", &[ &m ]); let c_1 = commit_file( &repo, "c", b"1", "commit c.1", &[ &c_0 ]); let all_commits = &[&root, &l_0, &l_1, &r_0, &r_1, &m, &c_0, &c_1 ]; // All the commits in a topological order. let paths = &[ // Via l. &[&root, &l_0, &l_1, &m, &c_0, &c_1 ], // Via r. &[&root, &r_0, &r_1, &m, &c_0, &c_1 ], ]; let t = |ancestor: &Commit, commit: &Commit, expect: bool| { match (expect, git_is_ancestor(&repo, ancestor.id(), commit.id()).is_ok()) { (true, true) => (), (false, false) => (), (true, false) => { panic!("Expected {} ({}) to be an ancestor of {} ({})", ancestor.summary().unwrap_or(""), ancestor.id(), commit.summary().unwrap_or(""), commit.id()); } (false, true) => { panic!("Expected {} ({}) to NOT be an ancestor of {} ({})", ancestor.summary().unwrap_or(""), ancestor.id(), commit.summary().unwrap_or(""), commit.id()); } } }; // Commits are their own ancestors. for c in all_commits.iter() { t(c, c, true); } for path in paths.iter() { for i in 0..(path.len() - 1) { for j in (i + 1)..path.len() { t(&path[i], &path[j], true); t(&path[j], &path[i], false); } } } t(&l_0, &r_0, false); t(&l_0, &r_1, false); t(&l_1, &r_0, false); t(&l_1, &r_1, false); t(&r_0, &l_0, false); t(&r_0, &l_1, false); t(&r_1, &l_0, false); t(&r_1, &l_1, false); Ok(()) } } sequoia-git-0.4.0/src/lib.rs000064400000000000000000000024701046102023000137620ustar 00000000000000use git2::Oid; use sequoia_openpgp::{ self as openpgp, }; #[macro_use] mod macros; mod policy; pub use policy::*; mod verify; pub use verify::*; mod git; pub use git::*; pub mod persistent_set; pub(crate) mod utils; /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("Invalid operation: {0}")] InvalidOperation(String), #[error("Storage error: {0}")] StorageError(String), #[error("Commit {0} is not signed")] MissingSignature(Oid), #[error("{0} is not signed")] MissingDataSignature(String), #[error("Commit {0} has no policy")] MissingPolicy(Oid), #[error("The given range contains no commits")] EmptyCommitRange, #[error("There is no path from {0} to {1}")] NoPathConnecting(Oid, Oid), #[error("Key `{0}` missing")] MissingKey(openpgp::KeyHandle), #[error("Key `{0}` is bad: {1}")] BadKey(openpgp::KeyHandle, String), #[error("Bad signature: {0}")] BadSignature(String), #[error("Unauthorized: {0}")] Unauthorized(String), #[error("Io error")] Io(#[from] std::io::Error), #[error("Libgit2 error")] Git2(#[from] git2::Error), #[error("Other error: {0}")] Other(#[from] anyhow::Error), } /// Crate result specialization. pub type Result = ::std::result::Result; sequoia-git-0.4.0/src/macros.rs000064400000000000000000000142761046102023000145070ustar 00000000000000use std::cmp; #[allow(unused_macros)] macro_rules! trace { ( $TRACE:expr, $fmt:expr, $($pargs:expr),* ) => { if $TRACE { eprintln!($fmt, $($pargs),*); } }; ( $TRACE:expr, $fmt:expr ) => { trace!($TRACE, $fmt, ); }; } // Converts an indentation level to whitespace. #[allow(dead_code)] pub(crate) fn indent(i: isize) -> &'static str { let s = " "; &s[0..cmp::min(usize::try_from(i).unwrap_or(0), s.len())] } #[allow(unused_macros)] macro_rules! tracer { ( $TRACE:expr, $func:expr ) => { tracer!($TRACE, $func, 0) }; ( $TRACE:expr, $func:expr, $indent:expr ) => { // Currently, Rust doesn't support $( ... ) in a nested // macro's definition. See: // https://users.rust-lang.org/t/nested-macros-issue/8348/2 #[allow(unused_macros)] macro_rules! t { ( $fmt:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, $fmt) }; ( $fmt:expr, $a:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a)) }; ( $fmt:expr, $a:expr, $b:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr, $k:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k)) }; } } } /// A very simple profiling tool. /// /// Note: don't ever profile code that has not been compiled in /// release mode. There can be orders of magnitude difference in /// execution time between it and debug mode! /// /// This macro measures the wall time it takes to execute the block. /// If the time is at least $ms_threshold (in milli-seconds), then it /// displays the output on stderr. The output is prefixed with label, /// if it is provided. /// /// ```ignore /// let result = time_it!("Some code", 10, { /// // Some code. /// 5 /// }); /// assert_eq!(result, 5); /// ``` // Note: We cannot test the macro in doctests, because the macro is // not public. We test the cases in the test module below, instead. // If you change the examples here, propagate the changes to the // module below. #[allow(unused_macros)] macro_rules! time_it { ( $label:expr, $ms_threshold:expr, $body:expr ) => {{ use std::time::{SystemTime, Duration}; // We use drop so that code that uses non-local exits (e.g., // using break 'label) still works. struct Timer { start: SystemTime, } impl Drop for Timer { fn drop(&mut self) { let elapsed = self.start.elapsed(); if elapsed.clone().unwrap_or(Duration::from_millis($ms_threshold)) >= Duration::from_millis($ms_threshold) { if $label.len() > 0 { eprint!("{}:", $label); } eprintln!("{}:{}: {:?}", file!(), line!(), elapsed); } } } let _start = Timer { start: SystemTime::now() }; $body }}; ( $label:expr, $body:expr ) => { time_it!($label, 0, $body) }; ( $body:expr ) => { time_it!("", $body) }; } /// We cannot test the macro in doctests, because the macro is not /// public. We test the cases here, instead. If you change the /// examples here, propagate the changes to the docstring above. #[cfg(test)] mod test_time_it { /// This macro measures the wall time it takes to execute the /// block. If the time is at least $ms_threshold (in /// milli-seconds), then it displays the output on stderr. The /// output is prefixed with label, if it is provided. #[test] fn time_it() { let result = time_it!("Some code", 10, { // Some code. 5 }); assert_eq!(result, 5); } } #[allow(unused_macros)] macro_rules! platform { { unix => { $($unix:tt)* }, windows => { $($windows:tt)* }, } => { if cfg!(unix) { #[cfg(unix)] { $($unix)* } #[cfg(not(unix))] { unreachable!() } } else if cfg!(windows) { #[cfg(windows)] { $($windows)* } #[cfg(not(windows))] { unreachable!() } } else { #[cfg(not(any(unix, windows)))] compile_error!("Unsupported platform"); unreachable!() } } } sequoia-git-0.4.0/src/main.rs000064400000000000000000000651611046102023000141460ustar 00000000000000use std::{ env, io, path::{ Path, PathBuf, } }; use anyhow::{anyhow, Context, Result}; use clap::FromArgMatches; use once_cell::sync::OnceCell; use sequoia_openpgp::{ self as openpgp, Cert, KeyHandle, parse::Parse, }; use sequoia_cert_store::{ CertStore, Store, }; use sequoia_git::*; #[macro_use] mod macros; mod cli; use cli::CertArg; use cli::PolicyFileArg; use cli::paths::StateDirectory; mod commands; mod output; #[allow(dead_code)] mod utils; impl CertArg { fn get(&self, config: &Config) -> Result { let filename; let r: Result<(&Path, Vec), KeyHandle> = if let Some(value) = &self.value { // First try to open as a file. Only if the file does not // exist, interpret the value as a key handle. filename = PathBuf::from(value); match std::fs::read(&filename) { Ok(contents) => { Ok((&filename, contents)) } Err(err) => { if err.kind() == std::io::ErrorKind::NotFound { match value.parse::() { Ok(kh) => Err(kh), Err(err) => return Err( err.context( format!("File {} does not exist, \ and is not a valid fingerprint \ or Key ID", filename.display()))), } } else { return Err(anyhow::Error::from(err).context( format!("Opening {}", filename.display()))); } } } } else if let Some(kh) = &self.cert_handle { Err(kh.clone()) } else if let Some(filename) = &self.cert_file { let content = std::fs::read(&filename) .with_context(|| { format!("Opening {}", filename.display()) })?; Ok((filename, content)) } else { unreachable!("clap ensures that one argument is set") }; match r { Ok((filename, content)) => { // Parse content as a Cert and make sure content only // contains a single certificate. Cert::from_bytes(&content) .with_context(|| { format!("Parsing {}", filename.display()) }) } Err(kh) => { let certs = config.cert_store()?.lookup_by_cert_or_subkey(&kh)?; let cert = match certs.len() { 0 => return Err(anyhow!("Key {} not found", kh)), 1 => certs[0].to_cert()?.clone(), n => return Err(anyhow!( "Key {} is part of {} certs, use cert \ fingerprint to resolve", kh, n)), }; Ok(cert) } } } } pub struct Config<'a> { output_format: output::Format, home: Option, cert_store_path: Option, cert_store: OnceCell>, } impl<'a> Config<'a> { /// Returns the cert store's base directory, if it is enabled. fn cert_store_base(&self) -> Option { let default = || if let Ok(path) = std::env::var("PGP_CERT_D") { Some(PathBuf::from(path)) } else { self.home.as_ref() .map(|h| h.data_dir(sequoia_directories::Component::CertD)) }; if let Some(state) = self.cert_store_path.as_ref() { match state { StateDirectory::Absolute(p) => Some(p.clone()), StateDirectory::Default => default(), StateDirectory::None => None, } } else { default() } } // Returns the cert store. // // If it is not yet open, opens it. // // If it does not exist, issues a warning and returns an empty // cert store. fn cert_store(&self) -> Result<&CertStore<'a>> { if let Some(cert_store) = self.cert_store.get() { // The cert store is already initialized, return it. return Ok(cert_store); } let create_dirs = |path: &Path| -> Result<()> { use std::fs::DirBuilder; let mut b = DirBuilder::new(); b.recursive(true); // Create the parent with the normal umask. if let Some(parent) = path.parent() { // Note: since recursive is turned on, it is not an // error if the directory exists, which is exactly // what we want. b.create(parent) .with_context(|| { format!("Creating the directory {:?}", parent) })?; } // Create path with more restrictive permissions. platform!{ unix => { use std::os::unix::fs::DirBuilderExt; b.mode(0o700); }, windows => { }, } b.create(path) .with_context(|| { format!("Creating the directory {:?}", path) })?; Ok(()) }; // We need to initialize the cert store. // Open the cert-d. let path = self.cert_store_base() .expect("just checked that it is configured"); let cert_store = create_dirs(&path) .and_then(|_| CertStore::open(&path)) .with_context(|| { format!("While opening the certificate store at {:?}", &path) })?; let _ = self.cert_store.set(cert_store); Ok(self.cert_store.get().expect("just configured")) } fn read_policy<'f, F>(&self, policy_file: F) -> Result where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { Policy::read_file(path) .with_context(|| { format!("Reading specified policy file: {}", path.display()) }) } else { Policy::read_from_working_dir() .with_context(|| { format!("Reading default policy file") }) } } fn read_policy_or_default<'f, F>(&self, policy_file: F) -> Result where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { Policy::read_file_or_default(path) .with_context(|| { format!("Reading specified policy file: {}", path.display()) }) } else { Policy::read_from_working_dir() .with_context(|| { format!("Reading default policy file") }) } } fn write_policy<'f, F>(&self, p: &Policy, policy_file: F) -> Result<()> where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { p.write(path) .with_context(|| { format!("Updating the specified policy file: {}", path.display()) }) } else { p.write_to_working_dir() .with_context(|| { format!("Updating default policy file") }) } } } // Returns the current git repository. fn git_repo() -> Result { let cwd = env::current_dir() .context("Getting current working directory")?; let repo = git2::Repository::discover(&cwd) .with_context(|| { format!("Looking for git repository under {}", cwd.display()) })?; Ok(repo) } fn main() -> anyhow::Result<()> { let policy = openpgp::policy::StandardPolicy::new(); // XXX let mut cli = cli::build(true); let matches = cli.clone().try_get_matches(); let mut matches = match matches { Ok(matches) => matches, Err(mut err) => { // Warning: hack ahead! // // We want to hide global options in the help output for // subcommands, and we want to include values from the // configuration file in the help output. // // If we are showing the help output, we only want to // display the global options at the top-level; for // subcommands we hide the global options to not overwhelm // the user. // // Ideally, clap would provide a mechanism to only show // the help output for global options at the level they // are defined at. That's not the case. // // We can use `err` to figure out if we are showing the // help output, but it doesn't tell us what subcommand we // are showing the help for. Instead (and here's the // hack!), we compare the output. If it is the output for // the top-level `--help` or `-h`, then we are showing the // help for the top-level. If not, then we are showing // the help for a subcommand. In the former case, we // unhide the global options. use clap::error::ErrorKind; if err.kind() == ErrorKind::DisplayHelp || err.kind() == ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand { let output = err.render(); let output = if output == cli.render_long_help() { Some(cli::build(false).render_long_help()) } else if output == cli.render_help() { Some(cli::build(false).render_help()) } else { // Redo the parse so that the help message will // include any augmentations. err = cli::build(true).try_get_matches().unwrap_err(); None }; if let Some(output) = output { if err.use_stderr() { eprint!("{}", output); } else { print!("{}", output); } std::process::exit(err.exit_code()); } } // Print the error message. err.print()?; // Then, figure out if this is a usage message, and // extract the usage string. if let Some(usage) = err.context() .find_map(|(kind, value)| (kind == clap::error::ContextKind::Usage) .then_some(value)) { print_examples(&cli, usage)?; } // Finally, exit with an error code. std::process::exit(err.exit_code()); } }; let cli = cli::Cli::from_arg_matches_mut(&mut matches)?; let home = match &cli.home { Some(StateDirectory::Absolute(p)) => Some(sequoia_directories::Home::new(p.clone())?), None | Some(StateDirectory::Default) => Some(sequoia_directories::Home::default() .ok_or(anyhow::anyhow!("no default SEQUOIA_HOME \ on this platform"))? .clone()), Some(StateDirectory::None) => None, }; let config = Config { output_format: cli.output_format.parse()?, home, cert_store_path: cli.cert_store, cert_store: Default::default(), }; let commit_by_symbolic_name = |git: &git2::Repository, name: &str, trust_root: bool| -> Result { // Allow the zero oid. if let Ok(oid) = git2::Oid::from_str(name) { if oid.is_zero() { return Ok(oid); } } let (object, reference) = git.revparse_ext(name) .with_context(|| { format!("Looking up {:?}.", name) })?; // We won't get a reference if we are passed an OID. if let Some(reference) = reference { if trust_root { if reference.is_tag() { eprintln!("Warning: using a tag as the trust root \ could allow the remote repository to \ manipulate your trust root."); } else if reference.is_remote() { eprintln!("Warning: using a remote branch as the \ trust root could allow the remote repository \ to manipulate your trust root."); } } let commit = reference.peel_to_commit() .with_context(|| { format!("{:?} is not a commit", name) })?; Ok(commit.id()) } else { if let Ok(commit) = object.into_commit() { Ok(commit.id()) } else { Err(anyhow::anyhow!("{:?} is not a commit", name)) } } }; let lookup_trust_root = |git: &git2::Repository, trust_root: Option<&str>| -> Result { if let Some(trust_root) = trust_root { return commit_by_symbolic_name(git, trust_root, true); } // We only look in the repository's configuration file. let config = git.config()? .open_level(git2::ConfigLevel::Local)? .snapshot()?; let trust_root = match config.get_str("sequoia.trustRoot") { Ok(trust_root) => trust_root, Err(err) => { if err.code() == git2::ErrorCode::NotFound { eprintln!("Warning: no trust root specified. Either \ pass the '--trust-root' option, or set \ the 'sequoia.trustRoot' configuration \ key in your repository's local git config \ to reference a commit."); if config.get_str("sequoia.trust-root").is_ok() { eprintln!("Warning: you seem to have set the \ `sequoia.trust-root` key. This key \ has been deprecated."); } } return Err(anyhow::Error::from(err).context( "Reading 'sequoia.trustRoot' from the repository's \ git config.")); } }; commit_by_symbolic_name(git, trust_root, true) }; match cli.subcommand { cli::Subcommand::Init(command) => { commands::init::dispatch(command)?; } cli::Subcommand::Policy { command } => { commands::policy::dispatch(&config, command)?; } cli::Subcommand::Log { policy_file, trust_root, keep_going, prune_certs, commit_range, } => { if prune_certs && commit_range.is_some() && policy_file.path.is_none() { return Err(anyhow!("--prune-certs can only modify \ HEAD or a shadow policy")); } let git = git_repo()?; let trust_root = lookup_trust_root(&git, trust_root.as_deref())?; let shadow_p = if let Some(s) = &policy_file.path { Some(std::fs::read(s)?) } else { None }; let shadow_p = shadow_p.as_deref(); let head = git.head()?.target().unwrap(); let (start, target) = if let Some(commit_range) = commit_range { let mut s = commit_range.splitn(2, ".."); let first = s.next().expect("always one component"); if let Some(second) = s.next() { if second.is_empty() { (commit_by_symbolic_name(&git, first, false)?, head) } else { (commit_by_symbolic_name(&git, first, false)?, commit_by_symbolic_name(&git, second, false)?) } } else { (trust_root, commit_by_symbolic_name(&git, first, false)?) } } else { (trust_root, head) }; let mut cache = VerificationCache::new()?; let mut vresults = VerificationResult::default(); let result = match config.output_format { output::Format::HumanReadable => { verify(&git, trust_root, shadow_p, (start, target), &mut vresults, keep_going, |oid, parent_oid, result| { output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? .describe(&mut io::stdout())?; Ok(()) }, &mut cache, ) }, output::Format::Json => { use serde::ser::{Serializer, SerializeSeq}; let mut serializer = serde_json::ser::Serializer::pretty( std::io::stdout()); let mut seq = serializer.serialize_seq(None)?; let r = verify(&git, trust_root, shadow_p, (start, target), &mut vresults, keep_going, |oid, parent_oid, result| { seq.serialize_element( &output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? ).map_err(anyhow::Error::from)?; Ok(()) }, &mut cache, ); seq.end()?; r }, }; if prune_certs { let mut p = config.read_policy(&policy_file)?; for a in p.authorization_mut().values_mut() { let certs = a.certs()? .map(|r| r.and_then(Cert::try_from)) .collect::>>()?; a.set_certs_filter( certs, // Keep all subkeys that made a signature, and // those that are alive now. |sk| { let fp = sk.key().fingerprint(); vresults.signer_keys.contains(&fp) || { // Slightly awkward, because we // cannot use sk.with_policy. let c = sk.cert(); c.with_policy(&policy, None) .map(|vka| vka.keys().key_handle(fp) .next().is_some()) .unwrap_or(false) } }, // Keep all user IDs that were primary user // IDs when a signature was made, and the ones // that are the primary userid now. |uid| vresults.primary_uids.contains(uid.userid()) || { // Slightly awkward, because we // cannot use sk.with_policy. let c = uid.cert(); c.with_policy(&policy, None) .and_then(|vka| vka.primary_userid()) .map(|u| u.userid() == uid.userid()) .unwrap_or(false) } )?; } config.write_policy(&p, &policy_file)?; } let _ = cache.persist(); result?; }, cli::Subcommand::Verify { policy_file, trust_root, signature, archive, } => { let git = git_repo()?; let policy = if let Some(s) = policy_file.path.as_ref() { Policy::read_file(s) .with_context(|| { format!("Reading specified policy file: {}", s.display()) })? } else { let trust_root = lookup_trust_root( &git, trust_root.as_deref())?; Policy::read_from_commit(&git, &trust_root) .with_context(|| { format!("Reading policy from commit {}", trust_root) })? }; // XXX: In the future, mmap the data. let signature = std::fs::read(&signature) .with_context(|| { format!("Reading signature data from {}", signature.display()) })?; let archive = std::fs::read(&archive) .with_context(|| { format!("Reading archive data from {}", archive.display()) })?; let r = policy.verify_archive(signature, archive); let o = output::Archive::new(r)?; match config.output_format { output::Format::HumanReadable => o.describe(&mut io::stdout())?, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &o)?, } }, cli::Subcommand::UpdateHook { policy_file, trust_root, ref_name: _, old_object, new_object, } => { let git = git_repo()?; let trust_root = commit_by_symbolic_name(&git, &trust_root, true) .with_context(|| { format!("Looking up specified trust root ({})", trust_root) })?; let new_object = commit_by_symbolic_name(&git, &new_object, false) .with_context(|| { format!("Looking up new object ({})", new_object) })?; let old_object = commit_by_symbolic_name(&git, &old_object, false) .with_context(|| { format!("Looking up old object ({})", old_object) })?; // Fall back to the trust root if this is a new branch. let start = if let Err(err) = git_is_ancestor(&git, old_object, new_object) { if let Some(e) = err.downcast_ref::() { if matches!(e, Error::NoPathConnecting(_, _)) { // There's no path from old object to new // object. Use the trust root. trust_root } else { // Some other error: abort. return Err(err); } } else { // There's a path from old object to new object. old_object } } else { trust_root }; let mut cache = VerificationCache::new()?; let mut vresults = VerificationResult::default(); let result = verify(&git, trust_root, None, (start, new_object), &mut vresults, false, |oid, parent_oid, result| { output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? .describe(&mut io::stdout())?; Ok(()) }, &mut cache, ); let _ = cache.persist(); result?; }, } Ok(()) } /// Given a `clap::Command` and a usage string, try to augment the /// usage message with relevant examples. fn print_examples(cli: &clap::Command, usage: impl ToString) -> Result<()> { // First, find the invoked subcommand. let binary = "sq-git"; let usage = usage.to_string(); let prefix = usage.find(&format!("{} ", binary)); let subcommands = if let Some(i) = prefix { usage[i + binary.len() + 1..].split(" ") // Split, but only take the parts that do not denote options // or flags. .take_while(|p| p.chars().all(|c| c.is_alphabetic())) } else { // Odd... return Ok(()); }; // Now traverse the CLI tree to find the subcommand. let mut cmd = cli; for sub in subcommands { cmd = if let Some(c) = cmd.get_subcommands() .find(|c| c.get_name() == sub) { c } else { // Very odd... return Ok(()); }; } // And print the examples, if any. if let Some(examples) = cmd.get_after_help() { eprintln!("\n{}", examples); } Ok(()) } #[cfg(test)] mod test { use super::*; // Run some clap tests. #[test] fn verify_app() { let cli = cli::build(true); cli.debug_assert(); } } sequoia-git-0.4.0/src/output.rs000064400000000000000000000311561046102023000145570ustar 00000000000000use std::borrow::Cow; use std::io; use std::sync::Mutex; use git2::{Oid, Repository}; use serde::Serialize; use openpgp::{ Cert, Fingerprint, Packet, packet::Signature, }; use super::*; /// What output format to prefer, when there's an option? #[derive(Clone)] pub enum Format { /// Output that is meant to be read by humans, instead of programs. /// /// This type of output has no version, and is not meant to be /// parsed by programs. HumanReadable, /// Output as JSON. Json, } impl std::str::FromStr for Format { type Err = anyhow::Error; fn from_str(s: &str) -> Result { match s { "human-readable" => Ok(Self::HumanReadable), "json" => Ok(Self::Json), _ => Err(anyhow!("unknown output format {:?}", s)), } } } /// Emits a human-readable description of the policy to stdout. pub fn describe_policy(p: &Policy) -> Result<()> { println!("# OpenPGP policy file for git, version {}", p.version()); println!(); println!("## Commit Goodlist"); println!(); for commit in p.commit_goodlist() { println!(" - {}", commit); } println!(); println!("## Authorizations"); println!(); for (i, (name, auth)) in p.authorization().iter().enumerate() { println!("{}. {}", i, name); let ident = vec![' '; i.to_string().len() + 2] .into_iter().collect::(); if auth.sign_commit { println!("{}- may sign commits", ident); } if auth.sign_tag { println!("{}- may sign tags", ident); } if auth.sign_archive { println!("{}- may sign archives", ident); } if auth.add_user { println!("{}- may add users", ident); } if auth.retire_user { println!("{}- may retire users", ident); } if auth.audit { println!("{}- may goodlist commits", ident); } for cert in auth.certs()? { println!("{}- has OpenPGP cert: {}", ident, cert?.fingerprint()); } } Ok(()) } /// Emits a human-readable description of a difference between two /// policies to stdout. pub fn describe_diff(p: &Diff) -> Result<()> { fn quote<'a>(s: &'a str) -> Cow<'a, str> { if s.chars().any(|c| { ! (c.is_alphanumeric() || ['-', '_', '.', '+'].contains(&c)) }) { format!("{:?}", s).into() } else { s.into() } } let quote_component = |c: &Packet| -> String { match c { Packet::PublicSubkey(k) => { format!("subkey {}", k.fingerprint()) } Packet::SecretSubkey(k) => { format!("subkey (with secret key material) {}", k.fingerprint()) } Packet::UserID(u) => { format!("user ID {}", quote(&String::from_utf8_lossy(u.value()))) } c => { format!("{} ({:?})", c.tag(), c) } } }; let is_self_signed = |cert: &Fingerprint, sig: &Signature| -> bool { let cert = KeyHandle::from(cert); sig.get_issuers().into_iter().any(|kh| kh.aliases(&cert)) }; for change in &p.changes { use Change::*; match change { VersionChange { from, to } => println!(" - Version changed from {} to {}.", from, to), GoodlistCommit(oid) => println!(" - Commit {} was added to the goodlist.", oid), UngoodlistCommit(oid) => println!(" - Commit {} was removed from the goodlist.", oid), AddUser(name) => println!(" - User {} was added.", quote(name)), RetireUser(name) => println!(" - User {} was retired.", quote(name)), AddRight(name, right) => println!(" - User {} was granted the right {}.", quote(name), right), RemoveRight(name, right) => println!(" - User {}'s {} right was revoked.", quote(name), right), AddCert(name, fpr) => println!(" - User {}: new certificate {}.", quote(name), fpr), RemoveCert(name, fpr) => println!(" - User {}: removed certificate {}.", quote(name), fpr), AddPacket(name, fpr, component, sig) => println!(" - User {}'s certificate {} has a new {} signature {:02x}{:02x} on {}.", quote(name), fpr, if is_self_signed(fpr, sig) { "self-signed" } else { "third-party" }, sig.digest_prefix()[0], sig.digest_prefix()[1], quote_component(component)), RemovePacket(name, fpr, component, sig) => println!(" - User {}'s certificate {} lost the {} signature {:02x}{:02x} on {}.", quote(name), fpr, if is_self_signed(fpr, sig) { "self-signed" } else { "third-party" }, sig.digest_prefix()[0], sig.digest_prefix()[1], quote_component(component)), } } Ok(()) } // The version of the commit output. This follows semantic // versioning. static COMMIT_JSON_VERSION: &'static str = "1.0.0"; #[derive(Serialize)] pub struct Commit<'a> { version: &'static str, #[serde(serialize_with = "crate::utils::serialize_oid")] id: &'a Oid, // The commit's summary (if any). summary: Option, #[serde(serialize_with = "crate::utils::serialize_optional_oid")] parent_id: Option<&'a Oid>, results: Vec)>>, } static MISSING_SIGNATURE_HINT: Mutex = Mutex::new(false); static MISSING_KEY_HINT: Mutex = Mutex::new(false); static MALFORMED_MESSAGE_HINT: Mutex = Mutex::new(false); impl<'a> Commit<'a> { pub fn new(git: &Repository, id: &'a Oid, parent_id: Option<&'a Oid>, shadow_policy: &Option, result: &'a sequoia_git::Result>>) -> Result { let hint = |e: &Error| -> Option { match (shadow_policy, e) { (None, _) => None, (Some(p), Error::MissingSignature(commit)) => { let mut shown = MISSING_SIGNATURE_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("when using an external policy, do\n\n\ git show {1} \n\ \n and verify that the commit is good. \ If satisfied, do\n\n\ sq-git policy goodlist --policy-file {0} {1}", p.display(), commit)) } else { None } } (Some(p), Error::MissingKey(handle)) => { let mut shown = MISSING_KEY_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("when using an external policy, do\n\n\ sq keyserver get {1} \n\ \n and verify that the cert belongs to the \ committer. If satisfied, do\n\n\ sq-git policy authorize --policy-file {} \ {} --sign-commit", p.display(), handle)) } else { None } } (_, Error::Other(e)) => { if let Some(e) = e.downcast_ref::() { if let openpgp::Error::MalformedMessage(_) = e { let mut shown = MALFORMED_MESSAGE_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("\ a signature is malformed. It was probably created by GitHub, which\n\ is known to created invalid signatures. See the following discussion for\n\ more information:\n\ \n\ https://github.com/orgs/community/discussions/27607")) } else { None } } else { None } } else { None } } _ => None, } }; let mut r = Vec::new(); match result { Ok(results) => { for e in results.iter() .filter_map(|r| r.as_ref().err()) { r.push(Err((e.to_string(), hint(e)))); } for (name, _s, c, _signer_fpr) in results.iter() .filter_map(|r| r.as_ref().ok()) { r.push(Ok(format!("{} [{}]", name, c.fingerprint()))); } }, Err(e) => { r.push(Err((e.to_string(), hint(e)))); }, } let mut summary = None; match git.find_commit(id.clone()) { Ok(commit) => { summary = commit.summary().map(String::from); } Err(err) => { eprintln!("Error looking up commit: {}", err); } } Ok(Commit { version: COMMIT_JSON_VERSION, id, summary, parent_id, results: r, }) } pub fn describe(&self, sink: &mut dyn io::Write) -> Result<()> { for r in &self.results { let id = if let Some(parent_id) = self.parent_id { format!("{}..{}", parent_id, self.id) } else { self.id.to_string() }; match r { Err((e, hint)) => { writeln!(sink, "{}:\n Error: {}", id, e)?; if let Some(summary) = self.summary.as_ref() { writeln!(sink, " {}", summary)?; } if let Some(h) = hint { writeln!(sink, "\n Hint: {}", h)?; } }, Ok(fp) => { writeln!(sink, "{}:\n Signer: {}", id, fp)?; if let Some(summary) = self.summary.as_ref() { writeln!(sink, " {}", summary)?; } }, } } Ok(()) } } // The version of the commit output. This follows semantic // versioning. static ARCHIVE_JSON_VERSION: &'static str = "1.0.0"; #[derive(Serialize)] pub struct Archive { version: &'static str, results: Vec>, } impl Archive { pub fn new(result: sequoia_git::Result>>) -> Result { let mut r = Vec::new(); match result { Ok(results) => { for e in results.iter() .filter_map(|r| r.as_ref().err()) { r.push(Err(e.to_string())); } for (name, _s, c, _signer_fpr) in results.iter() .filter_map(|r| r.as_ref().ok()) { r.push(Ok(format!("{} [{}]", name, c.fingerprint()))); } }, Err(e) => { r.push(Err(e.to_string())); }, } Ok(Self { version: ARCHIVE_JSON_VERSION, results: r, }) } pub fn describe(&self, sink: &mut dyn io::Write) -> Result<()> { for r in &self.results { match r { Err(e) => { writeln!(sink, "{}", e)?; }, Ok(fp) => { writeln!(sink, "{}", fp)?; }, } } Ok(()) } } sequoia-git-0.4.0/src/persistent_set.rs000064400000000000000000000175171046102023000162770ustar 00000000000000//! A set of uniformly distributed 32-byte values that can be //! persisted. //! //! The version 0 file format is: //! //! | Offset | Description | //! | -----: | ----------- | //! | | Header //! | 0 | 15-byte magic value `b"StoredSortedSet"` //! | 15 | Version (`0`) //! | 16 | Context, 12 bytes of application-specific, opaque data //! | | Content //! | 28 | Entry count - big endian 32-bit unsigned integer //! | 32 | Entry 0 - big endian 32-byte unsigned integer //! | 48 | Entry 1 //! | ... | ... //! //! The entries are sorted, which allows doing an in-place binary //! search. They are interpreted as big endian 32-byte unsigned //! integers. use std::{ collections::BTreeSet, io::{ Seek, SeekFrom, Write, }, path::Path, }; use buffered_reader::{BufferedReader}; const VALUE_BYTES: usize = 32; pub type Value = [u8; VALUE_BYTES]; type File = buffered_reader::File<'static, ()>; pub struct Set { header: Header, store: File, scratch: BTreeSet, } /// A set data type with 32-byte keys, which can be easily persisted. /// /// The entire data structure is `mmap`ed or read into memory. /// /// Currently, there is no way to remove entries. impl Set { /// Returns the number of entries. #[allow(dead_code)] fn len(&self) -> usize { usize::try_from(self.header.entries).expect("representable") + self.scratch.len() // XXX: overestimate b/c of how insert is implemented } /// Returns `true` if the set contains an element equal to the value. pub fn contains(&mut self, value: &Value) -> Result { Ok(self.stored_values()?.binary_search(value).is_ok() || self.scratch.contains(value)) } /// Adds a value to the set. pub fn insert(&mut self, value: Value) { // We insert it into our overlay without checking whether it // exists in the stored set to avoid the lookup overhead. We // sort this out when persisting any changes to disk. self.scratch.insert(value); } fn stored_values(&mut self) -> Result<&[Value]> { let entries = self.header.entries as usize; let bytes = self.store.data_hard(entries * VALUE_BYTES)?; unsafe { Ok(std::slice::from_raw_parts(bytes.as_ptr() as *const Value, entries)) } } pub fn read>(path: P, context: &str) -> Result { // We are going to read an array of values into memory, and // use them as is. Check that layout matches (i.e., that Rust // doesn't expect any padding). assert_eq!(VALUE_BYTES, std::mem::size_of::()); assert_eq!(std::mem::size_of::<[Value; 2]>(), 2 * VALUE_BYTES, "values are unpadded"); let context: [u8; CONTEXT_BYTES] = context.as_bytes() .try_into() .map_err(|_| Error::BadContext)?; let (header, reader) = match File::open(path) { Ok(mut f) => { let header = Header::read(&mut f, context)?; (header, f) }, Err(e) if e.kind() == std::io::ErrorKind::NotFound => { let t = tempfile::NamedTempFile::new()?; // XXX: Rather, we should be using t.reopen() here and // constructing a File from that: let f = File::open(t.path())?; (Header::new(context), f) }, Err(e) => return Err(e.into()), }; // XXX: check here if the number of entries is plausible by // looking at the file metadata. This is currently not // possible to do in a race free manner. Ok(Set { header, store: reader, scratch: Default::default(), }) } pub fn write>(&mut self, path: P) -> Result<()> { // If we didn't change anything, we're done. if self.scratch.is_empty() { return Ok(()); } let mut sink = tempfile::NamedTempFile::new_in( path.as_ref().parent().ok_or(Error::BadPath)?)?; // First update and write the header. let mut h = self.header.clone(); h.entries = 0; // Fill be fixed later. h.write(&mut sink)?; // Then, merge the two sets while writing them out. let mut entries = 0; let scratch = std::mem::replace(&mut self.scratch, Default::default()); let mut stored = self.stored_values()?; for new in scratch.iter() { let p = stored.partition_point(|v| v < new); let before = &stored[..p]; let before_bytes = unsafe { std::slice::from_raw_parts(before.as_ptr() as *const u8, before.len() * VALUE_BYTES) }; sink.write_all(before_bytes)?; entries += p; // See if this is actually new. if before.is_empty() || &before[p - 1] != new { sink.write_all(new)?; entries += 1; } // Now advance the stored "iterator". stored = &stored[p..]; } // Now write out the final chunk. { let stored_bytes = unsafe { std::slice::from_raw_parts(stored.as_ptr() as *const u8, stored.len() * VALUE_BYTES) }; sink.write_all(stored_bytes)?; entries += stored.len(); } // And put scratch back. self.scratch = scratch; // Finally, write the header again, this time with the correct // number of values. sink.as_file_mut().seek(SeekFrom::Start(0))?; h.entries = entries.try_into().map_err(|_| Error::TooManyEntries)?; h.write(&mut sink)?; sink.flush()?; sink.persist(path).map_err(|pe| pe.error)?; Ok(()) } } const CONTEXT_BYTES: usize = 12; #[derive(Debug, Clone)] struct Header { version: u8, context: [u8; CONTEXT_BYTES], entries: u32, } impl Header { const MAGIC: &'static [u8; 15] = b"StoredSortedSet"; fn new(context: [u8; CONTEXT_BYTES]) -> Self { Header { version: 1, context, entries: 0, } } fn read(reader: &mut File, context: [u8; CONTEXT_BYTES]) -> Result { let m = reader.data_consume_hard(Self::MAGIC.len())?; if &m[..Self::MAGIC.len()] != &Self::MAGIC[..] { return Err(Error::BadMagic); } let v = reader.data_consume_hard(1)?; let version = v[0]; if version != 1 { return Err(Error::UnsupportedVersion(version)); } let c = &reader.data_consume_hard(context.len())?[..context.len()]; if &c[..] != &context[..] { return Err(Error::BadContext); } let e = &reader.data_consume_hard(4)?[..4]; let entries = u32::from_be_bytes(e.try_into().expect("we read 4 bytes")); Ok(Header { version, context, entries, }) } fn write(&self, sink: &mut dyn Write) -> Result<()> { sink.write_all(Self::MAGIC)?; sink.write_all(&[self.version])?; sink.write_all(&self.context)?; sink.write_all(&self.entries.to_be_bytes())?; Ok(()) } } /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("Bad magic read from file")] BadMagic, #[error("Unsupported version: {0}")] UnsupportedVersion(u8), #[error("Bad context read from file")] BadContext, #[error("Too many entries")] TooManyEntries, #[error("Bad path")] BadPath, #[error("Io error")] Io(#[from] std::io::Error), } /// Result specialization. pub type Result = ::std::result::Result; sequoia-git-0.4.0/src/policy.rs000064400000000000000000001156331046102023000145210ustar 00000000000000use std::{ collections::{BTreeMap, BTreeSet, btree_map::Entry, HashSet}, env, fmt, fs, io::{self, Read, Write}, path::{Path, PathBuf}, time::SystemTime, }; use git2::{ Repository, Oid, }; use serde::{Deserialize, Serialize}; use sequoia_openpgp::{ self as openpgp, Cert, Fingerprint, KeyHandle, Packet, cert::{ amalgamation::ValidAmalgamation, prelude::{SubordinateKeyAmalgamation, UserIDAmalgamation}, raw::{RawCert, RawCertParser}, }, packet::{ Signature, UserID, key::PublicParts, }, parse::Parse, parse::{stream::*}, policy::StandardPolicy, serialize::Serialize as _, types::SignatureType, }; use crate::{ Error, Result, utils::prune_cert, utils::serialize_packet, utils::serialize_signature, }; /// Whether to trace execution by default (on stderr). const TRACE: bool = false; /// A policy for OpenPGP signatures in git. /// /// A `Policy` governs state changes in git repositories. A state /// change is a change from one git commit with a policy embedded into /// it to the next commit, which may change the policy, the source, or /// both. #[derive(Default, Clone, Deserialize, Serialize, PartialEq, Eq)] pub struct Policy { /// Policy version. /// /// We provide backwards-compatibility but not /// forward-compatibility, so that we can evolve the policy /// language. #[serde(default)] version: usize, /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. #[serde(default)] commit_goodlist: BTreeSet, /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. #[serde(default)] authorization: BTreeMap, } impl Policy { /// Returns the path to the policy file in the current git /// repository. fn working_dir_policy_file() -> Result { let git = git2::Repository::discover(env::current_dir()?)?; if let Some(wd) = git.workdir() { Ok(wd.join("openpgp-policy.toml")) } else { Err(Error::InvalidOperation("doesn't work on bare repos".into())) } } pub fn parse_bytes>(bytes: D) -> Result { let bytes = bytes.as_ref(); let s = std::str::from_utf8(bytes) .map_err(|e| Error::StorageError(e.to_string()))?; let policy = toml::from_str(s) .map_err(|e| Error::StorageError(e.to_string()))?; Ok(policy) } /// Reads the policy from the given path. pub fn read_file>(path: P) -> Result { let path = path.as_ref(); let mut f = fs::File::open(path)?; let mut s = String::new(); f.read_to_string(&mut s)?; let p: Policy = toml::from_str(&s).map_err(|e| Error::StorageError(e.to_string()))?; Ok(p) } /// Reads the policy from the given path. pub fn read_file_or_default>(path: P) -> Result { let path = path.as_ref(); let mut f = match fs::File::open(path) { Ok(f) => f, Err(e) => if e.kind() == io::ErrorKind::NotFound { return Ok(Policy::default()); } else { return Err(e.into()); }, }; let mut s = String::new(); f.read_to_string(&mut s)?; let p: Policy = toml::from_str(&s).map_err(|e| Error::StorageError(e.to_string()))?; Ok(p) } /// Reads the policy from the current git working directory. /// /// Default to the empty policy if the work directory doesn't /// contain a policy. pub fn read_from_working_dir() -> Result { Self::read_file_or_default(&Self::working_dir_policy_file()?) } /// Reads the policy from the given git commit. pub fn read_bytes_from_commit(git: &Repository, commit: &Oid) -> Result> { tracer!(TRACE, "Policy::read_bytes_from_commit"); t!("(_, {})", commit); let commit = git.find_commit(commit.clone())?; let tree = commit.tree()?; let result = if let Some(entry) = tree.get_name("openpgp-policy.toml") { Ok(entry.to_object(&git)?.peel_to_blob()?.content().to_vec()) } else { Err(Error::MissingPolicy(commit.id())) }; result } /// Reads the policy from the given git commit. pub fn read_from_commit(git: &Repository, commit: &Oid) -> Result { Self::parse_bytes(Self::read_bytes_from_commit(git, commit)?) } /// Writes the policy into a file with the given path. pub fn write>(&self, path: P) -> Result<()> { let path = path.as_ref(); let mut new = tempfile::NamedTempFile::new_in(path.parent().unwrap())?; new.write_all(toml::to_string_pretty(&self) .map_err(|e| Error::StorageError(e.to_string()))? .as_bytes())?; new.persist(path).map_err(|e| Error::StorageError(e.to_string()))?; Ok(()) } /// Writes the policy to the current git working directory. pub fn write_to_working_dir(&self) -> Result<()> { self.write(&Self::working_dir_policy_file()?) } /// The policy version. pub fn version(&self) -> usize { self.version } /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. pub fn commit_goodlist(&self) -> &BTreeSet { &self.commit_goodlist } /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. pub fn commit_goodlist_mut(&mut self) -> &mut BTreeSet { &mut self.commit_goodlist } /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. pub fn authorization(&self) -> &BTreeMap { &self.authorization } /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. pub fn authorization_mut(&mut self) -> &mut BTreeMap { &mut self.authorization } /// Computes the difference between this policy and `other`. pub fn diff<'f, 't>(&'f self, other: &'t Policy) -> Result> { let mut changes = Vec::new(); // First, the version. if self.version != other.version { changes.push(Change::VersionChange { from: self.version, to: other.version, }); } // Then, the commit goodlist. for c in self.commit_goodlist.difference(&other.commit_goodlist) { changes.push(Change::UngoodlistCommit(c.parse()?)); } for c in other.commit_goodlist.difference(&self.commit_goodlist) { changes.push(Change::GoodlistCommit(c.parse()?)); } // This null authorization comes in handy when introducing // new users and removing users. let null_auth = Authorization::default(); // Now for the authorizations. First, see if some vanished. for (k, from) in self.authorization.iter() .filter(|(k, _)| ! other.authorization.contains_key(k.as_str())) { // First, remove all the rights and certs. from.diff(&null_auth, k.into(), &mut changes); // Finally, remove the user. changes.push(Change::RetireUser(k.into())); } // Then, compare the common ones. for (k, from, to) in self.authorization.iter() .filter_map(|(k, from)| other.authorization.get(k) .map(|to| (k, from, to))) { from.diff(to, k.into(), &mut changes); } // See if new users were introduced. for (k, to) in other.authorization.iter() .filter(|(k, _)| ! self.authorization.contains_key(k.as_str())) { // First introduce the new user. changes.push(Change::AddUser(k.into())); // Then, all the new rights and certs. null_auth.diff(to, k.into(), &mut changes); } Ok(Diff { version: DIFF_JSON_VERSION, from: self, changes, to: other, }) } /// Verifies that the given commit adheres to this policy. /// /// During verification, the key(s) used are stored in /// `signer_keys`, and the primary user id of the issuing cert at /// the time of the signing is stored in `primary_uids`. This /// information can be used to prune certs in a policy. /// /// If the commit is goodlisted, this function returns Ok with an /// empty vector of verification results. pub fn verify(&self, git: &Repository, commit_id: &Oid, commit_policy: &Policy, signer_keys: &mut BTreeSet, primary_uids: &mut BTreeSet) -> Result>> { tracer!(TRACE, "Policy::verify"); t!("verify(_, {})", commit_id); if self.commit_goodlist.contains(&commit_id.to_string()) { Ok(vec![]) } else { let Ok((sig, data)) = git.extract_signature(commit_id, None) else { return Ok(vec![Err(Error::MissingSignature(commit_id.clone()))]); }; t!("{} bytes of signature", sig.len()); //let commit = git.find_commit(commit_id.clone())?; //let commit_time = commit.time(); //let commit_time = std::time::UNIX_EPOCH // + std::time::Duration::new(commit_time.seconds() as u64, 0); // Note the commit time and the signature time will often // diverge. This is because the signature is created // after the commit is made (the signature is over the // commit, including the creation time). If we use the // commit's time as the reference time, then the signature // will appear to have been made in the future. Note: it // is not enough to allow a few seconds of divergence, // because commits can be resigned without changing the // commit's time. self.verify_(&sig[..], &data[..], commit_policy, None, signer_keys, primary_uids, Error::MissingSignature(commit_id.clone()), Right::SignCommit) } } pub fn verify_archive(&self, signature: S, archive: T) -> Result>> where T: AsRef<[u8]>, S: AsRef<[u8]>, { let mut signer_keys = Default::default(); let mut primary_uids = Default::default(); self.verify_(signature.as_ref(), archive.as_ref(), self, None, &mut signer_keys, &mut primary_uids, Error::MissingDataSignature("Tarball".into()), Right::SignArchive) } fn verify_(&self, signature: &[u8], data: &[u8], commit_policy: &Policy, commit_time: Option, signer_keys: &mut BTreeSet, primary_uids: &mut BTreeSet, missing_signature_error: Error, require_right: Right) -> Result>> { tracer!(TRACE, "Policy::verify_"); t!("verify_({} bytes, {} bytes, _, {:?}, _, _, {}, {})", signature.len(), data.len(), commit_time, missing_signature_error, require_right); let p = &StandardPolicy::new(); let h = Helper { parent_policy: self, child_policy: commit_policy, signer_keys, primary_uids, results: Default::default(), }; let mut v = DetachedVerifierBuilder::from_bytes(signature)? .with_policy(p, commit_time, h)?; v.verify_bytes(data)?; let h = v.into_helper(); let signature_results = h.results; if signature_results.is_empty() { t!("no signatures found!"); return Ok(vec![Err(missing_signature_error)]); } if signature_results.iter().all(|r| r.is_err()) { let e = signature_results.into_iter().find(|r| r.is_err()) .expect("not empty and not all were ok"); return Err(e.unwrap_err()); } // If we are here, there is at least one valid OpenPGP // signature. Compute the diff between the policies, and // check whether the authorization invariant is intact. let diff = self.diff(commit_policy)?; let mut results: Vec> = Vec::new(); for r in signature_results { match r { Ok((sig, cert, signer_fpr)) => { // Find all authorizations that contain a // certificate that did issue a valid signature. let cert_fp = cert.fingerprint(); for (name, a) in self.authorization.iter() .filter(|(_, a)| a.certs().into_iter() .flat_map(|r| r.into_iter()) .flat_map(|r| r.into_iter()) .any(|c| c.fingerprint() == cert_fp)) { t!("{}: valid signature", name); let r = a.rights(); t!("{}: {:?}", name, r); if let Err(e) = r.assert(require_right) .and_then(|_| diff.assert(&r)) { results.push(Err(e)); } else { results.push( Ok((name.into(), sig.clone(), cert.clone(), signer_fpr.clone()))); } } }, Err(e) => results.push(Err(e)), } } Ok(results) } } // This fetches keys and computes the validity of the verification. struct Helper<'p> { parent_policy: &'p Policy, child_policy: &'p Policy, //signer_userids: &'p mut BTreeSet, signer_keys: &'p mut BTreeSet, primary_uids: &'p mut BTreeSet, results: Vec>, } impl Helper<'_> { fn handle_result(&mut self, r: VerificationResult) { tracer!(TRACE, "VerificationHelper::handle_result"); match r { Ok(sig) => { self.signer_keys.insert(sig.ka.key().fingerprint()); if let Ok(userid) = sig.ka.valid_cert().primary_userid() { let u = userid.userid(); if ! self.primary_uids.contains(u) { self.primary_uids.insert(u.clone()); } } self.results.push( Ok((sig.sig.clone(), sig.ka.cert().clone(), sig.ka.key().fingerprint().clone()))); }, Err(e) => { t!("Signature verification failed: {}", e); use VerificationError::*; self.results.push(Err(match e { MalformedSignature { error, .. } => Error::BadSignature(error.to_string()), MissingKey { sig } => { let mut issuers = sig.get_issuers(); if issuers.is_empty() { Error::BadSignature( "No issuer information".into()) } else { Error::MissingKey(issuers.remove(0)) } }, UnboundKey { cert, error, .. } => Error::BadKey(cert.key_handle(), error.to_string()), BadKey { ka, error, .. } => Error::BadKey(ka.cert().key_handle(), error.to_string()), BadSignature { error, .. } => Error::BadSignature(error.to_string()), UnknownSignature { sig, .. } => Error::BadSignature(sig.error().to_string()), u => Error::BadSignature(u.to_string()), })); }, } } } impl VerificationHelper for Helper<'_> { fn get_certs(&mut self, ids: &[KeyHandle]) -> openpgp::Result> { tracer!(TRACE, "VerificationHelper::get_certs"); t!("get_certs({:?})", ids); let mut matches: BTreeMap = BTreeMap::new(); let mut parent: BTreeMap> = BTreeMap::new(); for (name, auth) in self.parent_policy.authorization.iter() { for cert in auth.certs()? { let cert = cert?; // parent contains all of the certificates. let entry = parent.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { oe.get_mut().push(cert.clone()); } Entry::Vacant(ve) => { ve.insert(vec![ cert.clone() ]); } } if cert.keys().any( |k| ids.iter().any(|i| i.aliases(&k.key_handle()))) { t!("Signature could be from {}", name); let cert = Cert::try_from(cert)?; let entry = matches.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { let c: &mut Cert = oe.get_mut(); *c = c.clone().merge_public(cert)?; } Entry::Vacant(ve) => { ve.insert(cert); } } } } } // We now merge in certificate updates from the child. That // is, we *don't* add new certificates. // Optimize the typical case: the policies are the same and // thus the child has no updates. if self.parent_policy != self.child_policy { // Merge child into parent stripping any revocation // certificates from the child. let merge = |parent: Cert, child: Cert| -> Result { let child = child.into_packets().filter(|p| { if let Packet::Signature(sig) = p { ! matches!(sig.typ(), SignatureType::KeyRevocation | SignatureType::SubkeyRevocation | SignatureType::CertificationRevocation) } else { true } }); Ok(parent.insert_packets(child)?.0) }; for (name, auth) in self.child_policy.authorization.iter() { let child_certs = if let Ok(certs) = auth.certs() { certs } else { // Silently ignore any parse errors. continue; }; for child_cert in child_certs { let child_cert = if let Ok(cert) = child_cert { cert } else { // Silently ignore any parse errors. continue; }; let fpr = child_cert.fingerprint(); if let Some(cert) = matches.get_mut(&fpr) { t!("Updating {}", fpr); let child_cert = if let Ok(cert) = Cert::try_from(child_cert) { cert } else { // Silently ignore any parse errors. continue; }; if let Ok(merged) = merge(cert.clone(), child_cert) { *cert = merged; } } else { if child_cert.keys().any( |k| ids.iter().any(|i| i.aliases(&k.key_handle()))) { t!("Signature could be from {}", name); // cert is not in matches, but it is // present in the parent policy. This // happens if the certificate gains a // subkey in the child policy, and the // commit is signed by that subkey. if let Some(certs) = parent.get(&child_cert.fingerprint()) { if let Ok(child_cert) = Cert::try_from(child_cert) { let mut parent: Option = None; for c in certs.into_iter() { let c = if let Ok(c) = Cert::try_from(c) { c } else { continue; }; if let Some(parent) = parent.as_mut() { if let Ok(merged) = parent.clone().merge_public(c) { *parent = merged; } } else { parent = Some(c); } } let parent = if let Some(parent) = parent { parent } else { continue; }; // Merge in the child. if let Ok(merged) = merge(parent, child_cert) { matches.insert( merged.fingerprint(), merged); } } } } } } } } Ok(matches.into_values().collect()) } fn check(&mut self, structure: MessageStructure) -> openpgp::Result<()> { tracer!(TRACE, "VerificationHelper::get_certs"); if false { t!("check({:?})", structure); } for (i, layer) in structure.into_iter().enumerate() { match layer { MessageLayer::SignatureGroup { results } if i == 0 => { for r in results { self.handle_result(r); } }, _ => return Err(Error::BadSignature( "Unexpected signature structure".into()).into()), } } Ok(()) } } #[derive(Default, Clone, Deserialize, Serialize, PartialEq, Eq)] pub struct Authorization { #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_commit: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_tag: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_archive: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub add_user: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub retire_user: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub audit: bool, pub keyring: String, } fn bool_is_false(b: &bool) -> bool { *b == false } impl Authorization { pub fn rights(&self) -> Rights { use Right::*; let mut r = BTreeSet::default(); if self.sign_commit { r.insert(SignCommit); } if self.sign_tag { r.insert(SignTag); } if self.sign_archive { r.insert(SignArchive); } if self.add_user { r.insert(AddUser); } if self.retire_user { r.insert(RetireUser); } if self.audit { r.insert(Audit); } Rights(r) } pub fn certs(&self) -> Result>> { Ok(RawCertParser::from_bytes(self.keyring.as_bytes())?) } pub fn set_certs(&mut self, certs: Vec) -> Result<()> { self.set_certs_filter(certs, |_| true, |_| true) } pub fn set_certs_filter(&mut self, certs: Vec, mut subkeys: S, mut userids: U) -> Result<()> where S: FnMut(&SubordinateKeyAmalgamation) -> bool, U: FnMut(&UserIDAmalgamation) -> bool, { let mut keyring = Vec::new(); for c in certs { let c = prune_cert(c, &mut subkeys, &mut userids)?; c.armored().export(&mut keyring)?; } self.keyring = String::from_utf8(keyring) .map_err(|e| Error::StorageError(e.to_string()))?; Ok(()) } /// Computes the difference between this authorization and `other` /// recording the changes in `changes`. fn diff(&self, other: &Authorization, name: String, changes: &mut Vec) { let (from, to) = (self, other); // First, see if rights were removed. if from.sign_commit && ! to.sign_commit { changes.push(Change::RemoveRight(name.clone(), Right::SignCommit)); } if from.sign_tag && ! to.sign_tag { changes.push(Change::RemoveRight(name.clone(), Right::SignTag)); } if from.sign_archive && ! to.sign_archive { changes.push(Change::RemoveRight(name.clone(), Right::SignArchive)); } if from.add_user && ! to.add_user { changes.push(Change::RemoveRight(name.clone(), Right::AddUser)); } if from.retire_user && ! to.retire_user { changes.push(Change::RemoveRight(name.clone(), Right::RetireUser)); } if from.audit && ! to.audit { changes.push(Change::RemoveRight(name.clone(), Right::Audit)); } // Then, see if rights were added. if ! from.sign_commit && to.sign_commit { changes.push(Change::AddRight(name.clone(), Right::SignCommit)); } if ! from.sign_tag && to.sign_tag { changes.push(Change::AddRight(name.clone(), Right::SignTag)); } if ! from.sign_archive && to.sign_archive { changes.push(Change::AddRight(name.clone(), Right::SignArchive)); } if ! from.add_user && to.add_user { changes.push(Change::AddRight(name.clone(), Right::AddUser)); } if ! from.retire_user && to.retire_user { changes.push(Change::AddRight(name.clone(), Right::RetireUser)); } if ! from.audit && to.audit { changes.push(Change::AddRight(name.clone(), Right::Audit)); } // Check for changes to the certificates. if self.keyring != other.keyring { // Parse the keyring. // // XXX: We silently ignore certificates that we are unable // to parse. We should perhaps reject any changes that we // don't understand. fn parse_keyring<'a>(name: &str, keyring: &'a str) -> BTreeMap>> { match RawCertParser::from_bytes(keyring) { Err(err) => { eprintln!("Parsing {}'s keyring: {}", name, err); Default::default() } Ok(certs) => { let certs = certs.into_iter() .filter_map(|cert| { match cert { Err(err) => { eprintln!("Parsing certificate from {}'s keyring: {}", name, err); None } Ok(cert) => Some(cert), } }); let mut map: BTreeMap> = BTreeMap::new(); for cert in certs { let entry = map.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { let oe: &mut Vec = oe.get_mut(); oe.push(cert); } Entry::Vacant(ve) => { ve.insert(vec![ cert ]); } } } map } } } let old = parse_keyring(&name, &self.keyring); let new = parse_keyring(&name, &other.keyring); // Identify certificates have been added or removed. let old_certs: BTreeSet<&Fingerprint> = old.keys().collect(); let new_certs: BTreeSet<&Fingerprint> = new.keys().collect(); for &removed in old_certs.difference(&new_certs) { changes.push(Change::RemoveCert(name.clone(), removed.clone())); } for &added in new_certs.difference(&old_certs) { changes.push(Change::AddCert(name.clone(), added.clone())); } // For certificates that the two keyrings have in common, // identify the packets that have been added or removed. for &fpr in old_certs.intersection(&new_certs) { let old = old.get(fpr).expect("have it"); let new = new.get(fpr).expect("have it"); if old == new { continue; } // Convert each signature into a tuple consisting of a // signature and its associated component. let into_packets = |certs: Vec| -> HashSet<(Packet, Signature)> { let mut pairs: HashSet<(Packet, Signature)> = HashSet::new(); for cert in certs.into_iter() { let mut packets = cert.packets(); let primary_key = packets.next().expect("have a primary key"); let primary_key = match Packet::try_from(primary_key) { Ok(p) => p, Err(err) => { eprintln!( "Warning: {} has a corrupted primary key \ packet (skipped): {}", cert.fingerprint(), err); continue; } }; packets.fold( primary_key, |component, packet| { let packet = match Packet::try_from(packet) { Ok(p) => p, Err(err) => { eprintln!( "Warning: {} has a corrupted packet \ (skipped): {}", cert.fingerprint(), err); return component; } }; match packet { Packet::Signature(sig) => { pairs.insert( (component.clone(), sig.clone())); component } Packet::Marker(_) => { // Silently skip marker packets. component } _ => { // New component. packet.clone() } } }); } pairs }; let old_packets = into_packets(old.clone()); let new_packets = into_packets(new.clone()); for (component, sig) in old_packets.difference(&new_packets) { changes.push(Change::RemovePacket(name.clone(), fpr.clone(), component.clone(), sig.clone())); } for (component, sig) in new_packets.difference(&old_packets) { changes.push(Change::AddPacket(name.clone(), fpr.clone(), component.clone(), sig.clone())); } } } } } // The version of the commit output. This follows semantic // versioning. static DIFF_JSON_VERSION: &'static str = "1.0.0"; /// The difference between two [`Policy`]s. #[derive(Serialize)] pub struct Diff<'f, 't> { version: &'static str, pub from: &'f Policy, pub changes: Vec, pub to: &'t Policy, } impl Diff<'_, '_> { fn assert(&self, r: &Rights) -> Result<()> { for c in &self.changes { c.assert(r)?; } Ok(()) } } use crate::utils::{serialize_fp, serialize_oid}; #[derive(Clone, Serialize)] pub enum Change { VersionChange { from: usize, to: usize, }, GoodlistCommit( #[serde(serialize_with = "serialize_oid")] Oid), UngoodlistCommit( #[serde(serialize_with = "serialize_oid")] Oid), AddUser(String), RetireUser(String), AddRight(String, Right), RemoveRight(String, Right), AddCert(String, #[serde(serialize_with = "serialize_fp")] Fingerprint), RemoveCert(String, #[serde(serialize_with = "serialize_fp")] Fingerprint), AddPacket(String, // The certificate. #[serde(serialize_with = "serialize_fp")] Fingerprint, // The component that the packet is associated with. #[serde(serialize_with = "serialize_packet")] Packet, // The signature that was added. #[serde(serialize_with = "serialize_signature")] Signature), RemovePacket(String, // The certificate. #[serde(serialize_with = "serialize_fp")] Fingerprint, // The component that the packet is associated with. #[serde(serialize_with = "serialize_packet")] Packet, // The signature that was removed. #[serde(serialize_with = "serialize_signature")] Signature), } impl Change { fn assert(&self, r: &Rights) -> Result<()> { use Change::*; match self { VersionChange { .. } => r.assert(Right::Audit), GoodlistCommit(_) => r.assert(Right::Audit), UngoodlistCommit(_) => r.assert(Right::Audit), // Rights management. AddUser(_) => r.assert(Right::AddUser), RetireUser(_) => r.assert(Right::RetireUser), AddRight(_, right) => r.assert(Right::AddUser).and_then(|_| r.assert(*right)), RemoveRight(_, right) => r.assert(Right::RetireUser).and_then(|_| r.assert(*right)), // Cert management. AddCert(_, _) => r.assert(Right::AddUser), RemoveCert(_, _) => r.assert(Right::RetireUser), // Lenient cert updates. AddPacket(_, _, _, _) => Ok(()), // Strict cert trimmings. RemovePacket(_, fpr, _component, sig) => { if sig.get_issuers().into_iter() .any(|kh| kh.aliases(KeyHandle::from(fpr))) { // First party signatures can only be removed by // authorized users. r.assert(Right::RetireUser) } else { Ok(()) } } } } } #[derive(Debug)] pub struct Rights(BTreeSet); impl Rights { fn assert(&self, r: Right) -> Result<()> { if ! self.0.contains(&r) { Err(Error::Unauthorized(format!("Right {} is missing", r))) } else { Ok(()) } } } #[derive(Debug, Clone, Copy, Serialize, PartialEq, Eq, PartialOrd, Ord)] pub enum Right { SignCommit, SignTag, SignArchive, AddUser, RetireUser, Audit, } impl fmt::Display for Right { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use Right::*; match self { SignCommit => f.write_str("sign-commit"), SignTag => f.write_str("sign-tag"), SignArchive => f.write_str("sign-archive"), AddUser => f.write_str("add-user"), RetireUser => f.write_str("retire-user"), Audit => f.write_str("audit"), } } } sequoia-git-0.4.0/src/utils.rs000064400000000000000000000070711046102023000143560ustar 00000000000000use git2::Oid; use serde::ser::Error; use sequoia_openpgp::{ Cert, Fingerprint, Packet, armor::{ Kind, Writer, }, cert::{ prelude::{SubordinateKeyAmalgamation, UserIDAmalgamation}, }, packet::{ key::PublicParts, Signature, }, serialize::Serialize, }; use crate::{ Result, }; pub fn prune_cert(c: Cert, subkeys: S, userids: U) -> Result where S: FnMut(&SubordinateKeyAmalgamation) -> bool, U: FnMut(&UserIDAmalgamation) -> bool, { // Remove all user attributes, keep only the subkeys that // are plausible signing subkeys. let c = c.retain_user_attributes(|_| false) .retain_subkeys(|s| s.self_signatures().any( |s| s.key_flags().map(|f| f.for_signing()) .unwrap_or(false))); // Filter out any third-party certifications. let mut acc = Vec::new(); // The primary key and related signatures. let pk_bundle = c.primary_key().bundle(); acc.push(pk_bundle.key().clone().into()); for s in pk_bundle.self_signatures() { acc.push(s.clone().into()) } for s in pk_bundle.self_revocations() { acc.push(s.clone().into()) } // The subkeys and related signatures. for skb in c.keys().subkeys().filter(subkeys) { acc.push(skb.key().clone().into()); for s in skb.self_signatures() { acc.push(s.clone().into()) } for s in skb.self_revocations() { acc.push(s.clone().into()) } } // The UserIDs. for uidb in c.userids().filter(userids) { acc.push(uidb.userid().clone().into()); for s in uidb.self_signatures() { acc.push(s.clone().into()) } for s in uidb.self_revocations() { acc.push(s.clone().into()) } } Ok(Cert::from_packets(acc.into_iter())?) } #[allow(dead_code)] pub fn deserialize_oid<'de, D>(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { use serde::de::{Deserialize, Error}; String::deserialize(deserializer) .and_then(|s| s.parse().map_err(|e| Error::custom(e))) } pub fn serialize_oid(v: &Oid, serializer: S) -> std::result::Result where S: serde::Serializer, { serializer.serialize_str(&v.to_string()) } #[allow(dead_code)] pub fn serialize_optional_oid(v: &Option<&Oid>, serializer: S) -> std::result::Result where S: serde::Serializer, { if let Some(v) = v { serializer.serialize_str(&v.to_string()) } else { serializer.serialize_none() } } pub fn serialize_fp(v: &Fingerprint, serializer: S) -> std::result::Result where S: serde::Serializer, { serializer.serialize_str(&format!("{}", v)) } pub fn serialize_packet(p: &Packet, serializer: S) -> std::result::Result where S: serde::Serializer, { let mut writer = Writer::new(Vec::new(), Kind::File).map_err(Error::custom)?; p.serialize(&mut writer).map_err(Error::custom)?; let buffer = writer.finalize().map_err(Error::custom)?; serializer.serialize_str(&String::from_utf8_lossy(&buffer)) } pub fn serialize_signature(s: &Signature, serializer: S) -> std::result::Result where S: serde::Serializer, { serialize_packet(&Packet::from(s.clone()), serializer) } sequoia-git-0.4.0/src/verify.rs000064400000000000000000000660341046102023000145260ustar 00000000000000//! Commit-tree traversal and verification. use std::{ path::{Path, PathBuf}, collections::{ BTreeMap, BTreeSet, }, }; use anyhow::{anyhow, Context, Result}; use git2::{ Repository, Oid, }; use sequoia_openpgp::{ self as openpgp, Cert, cert::{ amalgamation::ValidAmalgamation, CertParser, }, Fingerprint, packet::{Signature, UserID}, parse::Parse, policy::StandardPolicy, types::{ HashAlgorithm, RevocationStatus, RevocationType, }, }; use crate::{ Policy, persistent_set, }; /// Whether to trace execution by default (on stderr). const TRACE: bool = false; #[derive(Default, Debug)] pub struct VerificationResult { pub signer_keys: BTreeSet, pub primary_uids: BTreeSet, } pub fn verify(git: &Repository, trust_root: Oid, shadow_policy: Option<&[u8]>, commit_range: (Oid, Oid), results: &mut VerificationResult, keep_going: bool, mut verify_cb: impl FnMut(&Oid, Option<&Oid>, &crate::Result>>) -> crate::Result<()>, cache: &mut VerificationCache) -> Result<()> { tracer!(TRACE, "verify"); t!("verify(_, {}, {}..{})", trust_root, commit_range.0, commit_range.1); if shadow_policy.is_some() { t!("Using a shadow policy to verify commits."); } else { t!("Using in-band policies to verify commits."); } // XXX: These should be passed in as arguments. let p: &StandardPolicy = &StandardPolicy::new(); let now = std::time::SystemTime::now(); // STRATEGY // // We want to determine if we can authenticate the target commit // starting from the trust root. A simple approach is to try each // possible path. Unfortunately, this is exponential in the // number of merges. Consider a project where development is done // on feature branches, and then merged using a merge commit. The // commit graph will look like: // // ``` // o <- Merge commit // | \ // | o <- Feature branch // | / // o <- Merge commit // | \ // | o <- Feature branch // | / // o <- Merge commit // | \ // ... // ``` // // After 100 such merges, there are 2**100 different paths. // That's intractable. // // Happily, we can do better. We can determine if there is an // authenticated path as a byproduct of a topological walk. This // approach limits both the work we have to do, and the space we // require to O(N), where N is the number of commits preceding the // target commit in the commit graph. (If the trust root is a // dominator, which is usually the case, then N is the number of // commits that precede target, and follow the trust root, which // is often very small.) // // Recall the following facts: // // - A commit is authenticated if it is the trust root, or at // least one parent's policy authenticates the commit. // - Unless the signer's certificate is hard revoked. // - Unless there is an authenticated suffix that // immediately follows the commit, and a commit on that // authenticated suffix goodlists commit. // // In order to check the last condition, we need to know the // goodlists of all the following, authenticated commits when we // process the commit. When we do a topological walk, we know // that when we visit a commit, we've already visited all of its // ancestors. This means that we can easily collect the goodlists // of all of the commits on authenticated paths from the commit to // the target during the walk by propagating good lists from // authenticated commits to their parents. Then, when we are // examining a commit, and we discover that it has been revoked, // we can immediately check if it is on a relevant goodlist. // // To do the topological walk, we first have to do a bit of // preparation. Since we don't know a commit's children by // looking at the commit (and not all children lead to the // target), we have to extract that information from the graph. // We do this by visiting all commits on paths from the target to // the trust root, which we can do in O(N) space and time by doing // a breath first search. When we visit a commit, we increment // the number of children each of its parents has. We also use // this opportunity to discover any certificates that have been // hard revoked. // // Then we do the topological walk. For each commit, we consider // the number of unprocessed children to be the number of recorded // children. We then visit commits that have no unprocessed // children. // // When we visit a commit, and there is an authenticated path from // it to the target, we try to authenticate the commit. That is, // for each parent, we check if the parent can authenticate the // commit. If a parent authenticates the commit, but the signer's // certificate has been revoked, we can immediately check whether // the commit is on a goodlist. For each parent that // authenticated the commit, we merge the commit's *aggregate* // goodlist into the parent's goodlist. Finally, for each parent, // we decrement the number of unprocessed children. If there are // no unprocessed children left, it is added to a pending queue, // so that it can be processed. // Return the policy associated with the commit. let read_policy = |commit: &Oid| -> Result> { if let Some(p) = &shadow_policy { Ok(p.to_vec()) } else { Ok(Policy::read_bytes_from_commit(git, commit)?) } }; // Whether we've seen the policy file before. The key is the // SHA512 digest of the policy file. let mut policy_files: BTreeSet> = Default::default(); // Any hard revoked certificates. let mut hard_revoked: BTreeSet = Default::default(); // Scans the specified commit's policy for hard revocations, and // adds them to hard_revoked. let mut scan_policy = |commit_id| -> Result<()> { let policy_bytes = read_policy(&commit_id)?; let policy_hash = sha512sum(&policy_bytes)?; if policy_files.contains(&policy_hash) { t!("Already scanned an identical copy of {}'s policy, skipping.", commit_id); return Ok(()); } t!("Scanning {}'s policy for hard revocations", commit_id); let policy = Policy::parse_bytes(&policy_bytes)?; policy_files.insert(policy_hash); // Scan for revoked certificates. for authorization in policy.authorization().values() { for cert in CertParser::from_bytes(&authorization.keyring)? { let cert = if let Ok(cert) = cert { cert } else { continue; }; let vc = if let Ok(vc) = cert.with_policy(p, Some(now)) { vc } else { continue; }; let is_hard_revoked = |rs| { if let RevocationStatus::Revoked(revs) = rs { revs.iter().any(|rev| { if let Some((reason, _)) = rev.reason_for_revocation() { reason.revocation_type() == RevocationType::Hard } else { true } }) } else { false } }; // Check if the certificate is hard revoked. if is_hard_revoked(vc.revocation_status()) { t!("Certificate {} is hard revoked, bad listing", cert.fingerprint()); hard_revoked.insert(vc.fingerprint()); for k in vc.keys().subkeys().for_signing() { hard_revoked.insert(k.key().fingerprint()); t!(" Badlisting signing key {}", k.key().fingerprint()); } continue; } // Check if any of the signing keys are hard revoked. for k in vc.keys().subkeys().for_signing() { if is_hard_revoked(k.revocation_status()) { hard_revoked.insert(k.key().fingerprint()); t!(" Signing key {} hard revoked, bad listing", k.key().fingerprint()); } } } } Ok(()) }; let middle = if trust_root == commit_range.0 { None } else { Some(commit_range.0) }; struct Commit { // Number of children (commits derived from this one). children: usize, // Whether there is an authenticated path from this node to // the target. authenticated_suffix: bool, // Whether we still need to go via MIDDLE. traversed_middle: bool, } impl Default for Commit { fn default() -> Self { Commit { children: 0, authenticated_suffix: false, traversed_middle: false, } } } let mut commits: BTreeMap = Default::default(); if trust_root != commit_range.1 { commits.insert( commit_range.1.clone(), Commit { children: 0, authenticated_suffix: true, traversed_middle: middle.is_none(), }); } // We walk the tree from the target to the trust root (using a // breath first search, but it doesn't matter), and fill in // COMMITS.CHILDREN. { // Commits that we haven't processed yet. let mut pending: BTreeSet = Default::default(); pending.insert(commit_range.1.clone()); // Commits that we've processed. let mut processed: BTreeSet = Default::default(); while let Some(commit_id) = pending.pop_first() { processed.insert(commit_id); let commit = git.find_commit(commit_id)?; // Don't fail if we can't parse the policy file. let _ = scan_policy(commit_id); if commit_id == trust_root { // This is the trust root. There is no need to go // further. continue; } for parent in commit.parents() { let parent_id = parent.id(); let info = commits.entry(parent_id).or_default(); info.children += 1; if ! processed.contains(&parent_id) && ! pending.contains(&parent_id) { pending.insert(parent_id); } } } } // The union of the commit goodlists of commits on an // authenticated suffix (not including this commit). We build // this up as we authenticate commits. Since we do a topological // walk, this will be complete for a given commit when we process // that commit. let mut descendant_goodlist: BTreeMap> = Default::default(); let mut errors = Vec::new(); let mut unauthenticated_commits: BTreeSet = Default::default(); let mut authenticated_commits: BTreeSet = Default::default(); // Authenticate the commit using the specified parent. // // NOTE: This must only be called on a commit, if the commit is on // an authenticated suffix!!! let mut authenticate_commit = |commit_id, parent_id| -> Result { let parent_policy = read_policy(&parent_id)?; let parent_id = if commit_id == parent_id { // This is only the case when verifying the trust root // using the shadow policy. assert_eq!(commit_id, trust_root); assert!(shadow_policy.is_some()); None } else { Some(&parent_id) }; // The current commit's good list. let mut commit_goodlist = BTreeSet::new(); // XXX: If we have some certificates that are hard revoked, // then we can't use the cache. This is because the cache // doesn't tell us what certificate was used to sign the // commit, which means we can't figure out if the signer's // certificate was revoked when the result is cached. let (vresult, cache_hit) = if hard_revoked.is_empty() && cache.contains(&parent_policy, commit_id)? { (Ok(vec![]), true) } else { let parent_policy = Policy::parse_bytes(&parent_policy)?; let commit_policy = Policy::parse_bytes(read_policy(&commit_id)?)?; commit_goodlist = commit_policy.commit_goodlist().clone(); (parent_policy.verify(git, &commit_id, &commit_policy, &mut results.signer_keys, &mut results.primary_uids), false) }; if let Err(err) = verify_cb(&commit_id, parent_id, &vresult) { t!("verify_cb -> {}", err); return Err(err.into()); } if cache_hit { // XXX: communicate this to the caller // instead of eprintln. let id = if let Some(parent_id) = parent_id { format!("{}..{}", parent_id, commit_id) } else { commit_id.to_string() }; eprintln!("{}:\n Cached positive verification", id); } match vresult { Ok(results) => { // Whether the parent authenticated the commit. let mut good = false; // Whether the commit was goodlisted by a later // commit. let mut goodlisted = false; // Whether the commit was goodlisted by the parent's // policy. (Because commits form a Merkle tree, this // is only possible when we are using a shadow // policy.) if ! cache_hit && results.is_empty() { // XXX: communicate this to the caller // instead of eprintln. eprintln!("{}: Explicitly goodlisted", commit_id); good = true; } for r in results { match r { Ok((_, _sig, cert, signer_fpr)) => { // It looks good, but make sure the // certificate was not revoked. if hard_revoked.contains(&signer_fpr) { t!("Cert {}{} used to sign {} is revoked.", cert.fingerprint(), if cert.fingerprint() != signer_fpr { format!(", key {}", signer_fpr) } else { "".to_string() }, commit_id); // It was revoked, but perhaps the // commit was goodlisted. if descendant_goodlist.get(&commit_id) .map(|goodlist| { t!(" Goodlist contains: {}", goodlist .iter().cloned() .collect::>() .join(", ")); goodlist.contains(&commit_id.to_string()) }) .unwrap_or(false) { t!("But the commit was goodlisted, \ so all is good."); goodlisted = true; } } else { t!("{} has a good signature from {}", commit_id, cert.fingerprint()); good = true; } } Err(e) => errors.push( anyhow::Error::from(e).context( format!("While verifying commit {}", commit_id))), } } // We do NOT insert into the cache if the commit was // goodlisted. The cache is a function of the parent // policy and the children policy; goodlisting is a // function of commit range. if ! cache_hit && good && ! goodlisted { cache.insert(&parent_policy, commit_id)?; } if cache_hit || good || goodlisted { // Merge the commit's goodlist into the parent's // goodlist. if let Some(descendant_goodlist) = descendant_goodlist.get(&commit_id) { commit_goodlist.extend(descendant_goodlist.iter().cloned()); }; if let Some(parent_id) = parent_id { if let Some(p_goodlist) = descendant_goodlist.get_mut(&parent_id) { p_goodlist.extend(commit_goodlist.into_iter()); } else if ! commit_goodlist.is_empty() { descendant_goodlist.insert( parent_id.clone(), commit_goodlist); } } } let authenticated = cache_hit || good || goodlisted; if authenticated { authenticated_commits.insert(commit_id); } else { unauthenticated_commits.insert(commit_id); } Ok(authenticated) }, Err(e) => { unauthenticated_commits.insert(commit_id); errors.push(anyhow::Error::from(e).context( format!("While verifying commit {}", commit_id))); Ok(false) }, } }; // We now do a topological walk from the target to the trust root. // Assume there is no path until we prove otherwise. (A // zero-length path is already valid.) let mut valid_path = trust_root == commit_range.0 && commit_range.0 == commit_range.1; // Commits that we haven't processed yet. let mut pending: BTreeSet = Default::default(); if trust_root != commit_range.1 { pending.insert(commit_range.1.clone()); } 'authentication: while let Some(commit_id) = pending.pop_first() { let commit = git.find_commit(commit_id)?; t!("Processing {}: {}", commit_id, commit.summary().unwrap_or("")); let commit_info = commits.get(&commit_id).expect("added"); assert_eq!(commit_info.children, 0); let authenticated_suffix = commit_info.authenticated_suffix; let traversed_middle = commit_info.traversed_middle; for (parent_i, parent) in commit.parents().enumerate() { let parent_id = parent.id(); t!("Considering {} -> {} (parent #{})", commit_id, parent_id, parent_i); let parent_info = commits.get_mut(&parent_id).expect("added"); t!(" Parent has {} unprocessed children", parent_info.children); assert!(parent_info.children > 0); parent_info.children -= 1; if authenticated_suffix { t!(" Child IS on an authenticated suffix"); } else { t!(" Child IS NOT on an authenticated suffix."); } let authenticated = if keep_going || authenticated_suffix { authenticate_commit(commit_id, parent_id) .with_context(|| { format!("Authenticating {} with {}", commit_id, parent_id) })? } else { false }; if authenticated_suffix && authenticated { t!(" Parent authenticates child"); parent_info.authenticated_suffix = true; if traversed_middle { parent_info.traversed_middle = true; } else if middle == Some(commit_id) { t!(" Traversed {} on way to trust root.", commit_id); parent_info.traversed_middle = true; } if parent_id == trust_root { t!(" Parent is the trust root."); // This is the trust root. There is no need to go // further. if ! parent_info.traversed_middle { t!(" but path was not via {}", middle.unwrap()); } else { valid_path = true; } if ! keep_going { break 'authentication; } } } if parent_info.children == 0 { t!(" No other unprocessed children."); if parent_id == trust_root { t!(" Parent is the start of the commit range, \ so it doesn't need to be processed."); } else if ! keep_going && ! parent_info.authenticated_suffix { t!(" Parent does not authenticate any child, \ so it doesn't need to be processed."); } else { t!(" Adding parent to pending."); pending.insert(parent_id); } } } } // When using a shadow policy, we also authenticate the trust // root with it. if (keep_going || valid_path) && shadow_policy.is_some() { t!("Verifying trust root ({}) using the shadow policy", trust_root); // We verify the trust root using itself? Not quite. We know // that authenticate_commit prefers the shadow policy, and we // know that a shadow policy is set. So this will actually // check that the shadow policy verifies the trust root. if ! authenticate_commit(trust_root, trust_root)? { valid_path = false; if let Some(e) = errors.pop() { errors.push( e.context(format!("Could not verify trust root {} \ using the specified policy", trust_root))); } } } if valid_path { if trust_root == commit_range.0 { eprintln!( "Verified that there is an authenticated path from the trust root\n\ {} to {}.", trust_root, commit_range.1); } else { eprintln!( "Verified that there is an authenticated path from the trust root\n\ {} via {}\n\ to {}.", trust_root, commit_range.0, commit_range.1); } Ok(()) } else { if errors.is_empty() { Err(anyhow!("Could not verify commits {}..{}{}", trust_root, if let Some(middle) = middle { format!("{}..", middle) } else { "".to_string() }, commit_range.1)) } else { let mut e = errors.swap_remove(0) .context(format!("Could not verify commits {}..{}{}", commit_range.0, if let Some(middle) = middle { format!("{}..", middle) } else { "".to_string() }, commit_range.1)); if ! errors.is_empty() { e = e.context( format!("{} errors occurred while verifying the commits. \ {} commits couldn't be authenticated. \ Note: not all errors are fatal. \ The first error is shown:", errors.len() + 1, unauthenticated_commits.difference( &authenticated_commits).count())); } Err(e) } } } // Returns the SHA512 digest of the provided bytes. fn sha512sum(bytes: &[u8]) -> Result> { let mut digest = HashAlgorithm::SHA512.context()?.for_digest(); digest.update(bytes); let mut key = Vec::with_capacity(32); digest.digest(&mut key)?; Ok(key) } pub struct VerificationCache { path: PathBuf, set: persistent_set::Set, } impl VerificationCache { const CONTEXT: &'static str = "SqGitVerify0"; pub fn new() -> Result { let p = dirs::cache_dir().ok_or(anyhow::anyhow!("No cache dir"))? .join("sq-git.verification.cache"); Self::open(p) } pub fn open>(path: P) -> Result { let path = path.as_ref(); Ok(VerificationCache { path: path.into(), set: persistent_set::Set::read(&path, Self::CONTEXT)?, }) } fn key(&self, policy: &[u8], commit: Oid) -> Result { let mut digest = HashAlgorithm::SHA512.context()?.for_digest(); digest.update(policy); digest.update(commit.as_bytes()); let mut key = [0; 32]; digest.digest(&mut key)?; Ok(key) } /// Returns whether (policy, commit id) is in the cache. /// /// If (policy, commit id) is in the cache, then it was previously /// determined that the policy authenticated the commit. pub fn contains(&mut self, policy: &[u8], commit: Oid) -> Result { Ok(self.set.contains(&self.key(policy, commit)?)?) } /// Add (policy, commit id) to the cache. /// /// If (policy, commit id) is in the cache, this means that the /// policy considers the commit to be authenticated. Normally, /// the policy comes from the parent commit, but it may be a /// shadow policy. pub fn insert(&mut self, policy: &[u8], commit: Oid) -> Result<()> { self.set.insert(self.key(policy, commit)?); Ok(()) } pub fn persist(&mut self) -> Result<()> { self.set.write(&self.path)?; Ok(()) } } sequoia-git-0.4.0/tests/basics.rs000064400000000000000000000054461046102023000150410ustar 00000000000000use std::fs; mod common; use common::Environment; #[test] fn create_environment() -> anyhow::Result<()> { let e = Environment::new()?; assert!(e.gnupg_state().exists()); assert!(e.git_state().exists()); Ok(()) } #[test] fn make_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", ])?; Ok(()) } #[test] fn sign_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; Ok(()) } #[test] fn verify_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); e.sq_git(&[ "policy", "authorize", e.willow.petname, &e.willow.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; let root = e.git_current_commit()?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "Und es bleibt schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Second change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; Ok(()) } #[test] fn shadow_verify_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); e.sq_git(&[ "policy", "authorize", "--policy-file", "shadow-policy.toml", e.willow.petname, &e.willow.fingerprint.to_string(), "--sign-commit" ])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; let root = e.git_current_commit()?; e.sq_git(&[ "log", "--trust-root", &root, "--policy-file", "shadow-policy.toml", ])?; fs::write(p.join("a"), "Und es bleibt schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Second change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&[ "log", "--trust-root", &root, "--policy-file", "shadow-policy.toml", ])?; Ok(()) } sequoia-git-0.4.0/tests/common.rs000064400000000000000000000616121046102023000150620ustar 00000000000000#![allow(unused)] use std::{ collections::{BTreeMap, BTreeSet}, ffi::OsString, fs::File, io::Write, process::{Child, Command, Output, Stdio}, path::Path, path::PathBuf, sync::{Arc, OnceLock}, time::{Duration, SystemTime}, }; use anyhow::anyhow; use sequoia_openpgp::{ Fingerprint, Packet, cert::{ Cert, CertBuilder, CertParser, CertRevocationBuilder, KeyBuilder, SubkeyRevocationBuilder, amalgamation::ValidAmalgamation, }, packet::Signature, parse::Parse, policy::StandardPolicy, serialize::Serialize, types::{ KeyFlags, ReasonForRevocation, RevocationStatus, } }; use sequoia_cert_store::{ StoreUpdate, store::certd::CertD, }; pub type Result = std::result::Result; const P: &StandardPolicy = &StandardPolicy::new(); pub struct Identity { pub email: &'static str, pub petname: &'static str, pub fingerprint: Fingerprint, pub cert: Cert, pub rev: Signature, } impl Identity { fn new(email: &'static str, petname: &'static str) -> Result { let (cert, rev) = CertBuilder::general_purpose(Some(format!("<{}>", email))) .set_creation_time(SystemTime::now() - Duration::new(24 * 3600, 0)) .generate()?; Ok(Identity { email, petname, fingerprint: cert.fingerprint(), cert, rev, }) } /// Returns the certificate with the pregenerated hard revocation. #[allow(dead_code)] pub fn hard_revoke(&self) -> Cert { self.cert.clone().insert_packets(self.rev.clone()) .expect("ok").0 } } /// Rotate a certificate's signing subkey. /// /// Retires all of the certificate's signing capable subkeys. /// Adds a new signing-capable subkey. pub fn rotate_subkeys(cert: &Cert) -> Cert { let vc = cert.with_policy(P, None).expect("valid cert"); // Revoke the old subkeys. let mut signer = cert.primary_key().key().clone() .parts_into_secret().unwrap() .into_keypair().unwrap(); let mut packets = Vec::new(); for sk in vc.keys().subkeys().for_signing() { if let RevocationStatus::Revoked(_) = sk.revocation_status() { // Already revoked. continue; } let sig = SubkeyRevocationBuilder::new() .set_reason_for_revocation(ReasonForRevocation::KeyRetired, b"Retired").unwrap() .build(&mut signer, &cert, sk.key(), None).unwrap(); packets.push(Packet::from(sk.key().clone())); packets.push(Packet::from(sig)); } // Add a new signing subkey. let cert2 = KeyBuilder::new(KeyFlags::signing()) .subkey(vc.clone()).unwrap() .attach_cert().unwrap(); // Merge everything if packets.is_empty() { cert2 } else { cert2.insert_packets(packets).expect("can insert packets").0 } } /// Revokes the certificate. pub fn revoke_cert(cert: &Cert, reason: ReasonForRevocation) -> Cert { let vc = cert.with_policy(P, None).expect("valid cert"); // Revoke the old subkeys. let mut signer = cert.primary_key().key().clone() .parts_into_secret().unwrap() .into_keypair().unwrap(); let sig = CertRevocationBuilder::new() .set_reason_for_revocation(reason, b"revoked").unwrap() .build(&mut signer, &cert, None).unwrap(); let cert = cert.clone().insert_packets(sig.clone()) .expect("can insert revocation certificate").0; // Now it's revoked. assert_eq!(RevocationStatus::Revoked(vec![&sig]), cert.revocation_status(P, None)); cert } pub enum TempDir { TempDir(tempfile::TempDir), PathBuf(PathBuf), } impl TempDir { fn new() -> Result { Ok(TempDir::TempDir(tempfile::TempDir::new()?)) } fn path(&self) -> &Path { match self { TempDir::TempDir(d) => d.path(), TempDir::PathBuf(p) => p.as_path(), } } fn persist(&mut self) { let d = std::mem::replace(self, TempDir::PathBuf(PathBuf::new())); match d { TempDir::TempDir(d) => *self = TempDir::PathBuf(d.into_path()), TempDir::PathBuf(p) => *self = TempDir::PathBuf(p), } } } pub struct Environment { // If not None, then faketime is used. pub time: Option, pub wd: TempDir, pub willow: Identity, pub willow_release: Identity, pub buffy: Identity, pub xander: Identity, pub riley: Identity, } // Whether we have faketime. // // Ok(true): yes // Ok(false): skip faketime tests // Err(err): no static HAVE_FAKETIME: OnceLock> = OnceLock::new(); impl Environment { /// Before using `at`, `time`, or `tick`, we need to check for /// faketime. /// /// If this returns `Ok(false)`, the test should be silently /// skipped. pub fn check_for_faketime() -> std::result::Result { let r = HAVE_FAKETIME.get_or_init(|| { if let Ok(val) = std::env::var("NO_FAKETIME") { return Ok(false); } let mut cmd = Command::new("faketime"); cmd.env("TZ", "UTC"); let t = chrono::DateTime::::from(SystemTime::now()) .format("%Y-%m-%d %H:%M:%S") .to_string(); cmd.arg("-f").arg(t); // We rely on being able to run git. cmd.arg("git").arg("--version"); let output = cmd .stdout(Stdio::piped()) .stderr(Stdio::piped()) .spawn().map_err(anyhow::Error::from)? .wait_with_output().map_err(anyhow::Error::from)?; eprintln!("stdout:{}\nstderr:{}\n", String::from_utf8_lossy(&output.stdout), String::from_utf8_lossy(&output.stderr)); if output.status.success() { Ok(true) } else { Err(Error::NoFaketime(output)) } }); // Convert &Result to Result. match r { Ok(b) => Ok(*b), Err(err) => Err(err) } } /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn at(t: T) -> Result where T: Into> { let t = t.into(); if t.is_some() { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::at"); eprintln!("Using faketime."); } else { eprintln!("Using wall clock."); } let e = Environment { time: t, wd: TempDir::new()?, willow: Identity::new("willow@scoobies.example", "Willow Rosenberg Code Signing")?, willow_release: Identity::new("willow@scoobies.example", "Willow Rosenberg Release Signing")?, buffy: Identity::new("buffy@scoobies.example", "Buffy Summers")?, xander: Identity::new("xander@scoobies.example", "Xander Harris")?, riley: Identity::new("riley@scoobies.example", "Riley Finn")?, }; let create_dir = |path: &Path| { eprintln!("Creating {}", path.display()); std::fs::create_dir(path) }; create_dir(&e.gnupg_state())?; create_dir(&e.git_state())?; create_dir(&e.certd_state())?; create_dir(&e.xdg_cache_home())?; create_dir(&e.scratch_state())?; let mut c = e.command("gpg"); c.arg("--version"); e.run(c); e.import(&e.willow.cert)?; e.import(&e.willow_release.cert)?; e.import(&e.buffy.cert)?; e.import(&e.xander.cert)?; e.import(&e.riley.cert)?; e.git(&["version"]); e.git(&["init", &e.git_state().display().to_string()])?; e.git(&["config", "--local", "user.email", "you@example.org"])?; e.git(&["config", "--local", "user.name", "Your Name"])?; // git's default is to not sign. But, the user might have // overridden this in their ~/.gitconfig, and be using an old // version of git (<2.32). In that case, GIT_CONFIG_GLOBAL // won't suppress this setting. Setting it unconditionally in // the local configuration file is a sufficient workaround. e.git(&["config", "--local", "user.signingkey", "0xDEADBEEF"])?; e.git(&["config", "--local", "commit.gpgsign", "false"])?; Ok(e) } pub fn new() -> Result { Self::at(None) } /// Persists the directory so that it can be examined after this run. #[allow(dead_code)] pub fn persist(&mut self) { self.wd.persist(); eprintln!("Persisting temporary directory: {}", self.wd.path().display()); } /// Returns the environment and the root commit. #[allow(dead_code)] pub fn scooby_gang_bootstrap() -> Result<(Environment, String)> { let e = Environment::new()?; // Willow has a code-signing key. e.sq_git(&[ "policy", "authorize", e.willow.petname, &e.willow.fingerprint.to_string(), "--sign-commit" ])?; // Additionally, Willow also has a release key on her security // token. e.sq_git(&[ "policy", "authorize", e.willow_release.petname, &e.willow_release.fingerprint.to_string(), "--sign-commit", "--sign-tag", "--sign-archive", "--add-user", "--retire-user", "--audit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow_release.fingerprint), ])?; let root = e.git_current_commit()?; Ok((e, root)) } pub fn gnupg_state(&self) -> PathBuf { self.wd.path().join("gnupg") } pub fn git_state(&self) -> PathBuf { self.wd.path().join("git") } pub fn certd_state(&self) -> PathBuf { self.wd.path().join("certd") } pub fn xdg_cache_home(&self) -> PathBuf { self.wd.path().join("xdg_cache_home") } #[allow(dead_code)] pub fn scratch_state(&self) -> PathBuf { self.wd.path().join("scratch") } pub fn import(&self, cert: &Cert) -> Result<()> { let certd = CertD::open(self.certd_state())?; certd.update(Arc::new(cert.clone().into()))?; let mut c = self.command("gpg"); c.arg("--status-fd=2"); c.arg("--import").stdin(Stdio::piped()); eprintln!("$ {:?} {}", c, cert.fingerprint()); let mut child = self.spawn(c)?; // Write in a separate thread to avoid deadlocks. let mut stdin = child.stdin.take().expect("failed to get stdin"); let cert = cert.clone(); let thread_handle = std::thread::spawn(move || -> Result<()> { cert.as_tsk().serialize(&mut stdin)?; Ok(stdin.flush()?) }); let output = child.wait_with_output()?; thread_handle.join().unwrap()?; if output.status.success() { eprintln!(" -> success"); Ok(()) } else { eprintln!(" -> failure"); eprintln!("stdout:\n{}", String::from_utf8_lossy(&output.stdout)); eprintln!("stderr:\n{}", String::from_utf8_lossy(&output.stderr)); Err(Error::CliError("gpg --import".into(), output)) } } /// Sets the time for subsequent commands. /// /// This causes commands to be run with `faketime`. /// /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn time(&mut self, t: SystemTime) { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::time"); self.time = Some(t); } /// Advance the time. /// /// If you haven't called `time`, then this sets time to the /// current time plus `secs` seconds. /// /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn tick(&mut self, secs: u64) { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::tick"); if let Some(t) = self.time { self.time = Some(t + Duration::new(secs, 0)); } else { self.time = Some(SystemTime::now() + Duration::new(secs, 0)); } } /// Returns a command. /// /// If `self.time` is `Some`, uses `faketime` to set the time. fn command

(&self, cmd: P) -> Command where P: Into { let cmd = cmd.into(); if let Some(t) = self.time.as_ref() { // Freeze clock at absolute timestamp: "YYYY-MM-DD hh:mm:ss" // // Note: we need to set the timezone to UTC. This is // critical as faketime interprets the timestamp in the // current time zone. We set TZ=UTC when calling spawn. let mut c = Command::new("faketime"); c.env("TZ", "UTC"); let t = chrono::DateTime::::from(t.clone()) .format("%Y-%m-%d %H:%M:%S") .to_string(); c.arg("-f").arg(&t); c.arg(&cmd); c } else { Command::new(&cmd) } } pub fn git>(&self, args: &[A]) -> Result { let mut c = self.command("git"); for a in args { c.arg(a.as_ref()); } self.run(c) } // A convenience function to optionally modify and commit a few // files. // // Returns the new commit id. #[allow(dead_code)] pub fn git_commit(&self, files: &[(&str, Option<&[u8]>)], commit_msg: &str, signer: Option<&Identity>) -> Result { let p = self.git_state(); for (filename, content) in files.iter() { if let Some(content) = content { std::fs::write(p.join(filename), content).unwrap(); } self.git(&["add", filename])?; } let mut git_args = vec!["commit", "-m", commit_msg]; let signer_; if let Some(signer) = signer { signer_ = format!("-S{}", signer.fingerprint); git_args.push(&signer_); } self.git(&git_args)?; Ok(self.git_current_commit()?) } pub fn git_current_commit(&self) -> Result { Ok(String::from_utf8(self.git(&["rev-parse", "HEAD"])?.stdout)? .trim().to_string()) } pub fn sq_git_path() -> Result { use std::sync::Once; static BUILD: Once = Once::new(); BUILD.call_once(|| { let o = Command::new("cargo") .arg("build").arg("--quiet") .arg("--bin").arg("sq-git") .output() .expect("running cargo failed"); if ! o.status.success() { panic!("build failed:\n\nstdout:\n{}\n\n stderr:\n{}", String::from_utf8_lossy(&o.stdout), String::from_utf8_lossy(&o.stderr)); } }); Ok(if let Ok(target) = std::env::var("CARGO_TARGET_DIR") { PathBuf::from(target).canonicalize()? } else { std::env::current_dir()?.join("target") }.join("debug/sq-git")) } pub fn sq_git>(&self, args: &[A]) -> std::result::Result { let mut c = self.command(Self::sq_git_path()?); // We are a machine, request machine-readable output. c.arg("--output-format=json"); for a in args { c.arg(a.as_ref()); } self.run(c) } pub fn spawn(&self, mut c: Command) -> Result { // Preserve any environment variables the caller explicitly // set (env_clear clears those and prevents the process from // inheriting any environment variables, but we only want the // latter). let env: Vec<_> = c.get_envs() .filter_map(|(k, v)| { if let Some(v) = v { Some((k.to_os_string(), v.to_os_string())) } else { None } }) .collect::>(); let c = c.current_dir(self.git_state()) .env_clear() // Filter out all git-related environment variables. .envs(std::env::vars() .filter(|(k, _)| ! k.starts_with("GIT_")) .collect::>()) .env("SEQUOIA_CERT_STORE", self.certd_state()) .env("GNUPGHOME", self.gnupg_state()) .env("GIT_CONFIG_GLOBAL", "/dev/null") .env("GIT_CONFIG_NOSYSTEM", "1") .env("XDG_CACHE_HOME", self.xdg_cache_home()) .envs(env); Ok(c .stdout(Stdio::piped()) .stderr(Stdio::piped()) .spawn()?) } pub fn run(&self, c: Command) -> Result { let cmd = format!("{:?}", c); eprintln!("$ {}", cmd); let output = self.spawn(c)?.wait_with_output()?; if output.status.success() { eprintln!(" -> success"); } else { eprintln!(" -> failure"); } eprintln!("stdout:\n{}", String::from_utf8_lossy(&output.stdout)); eprintln!("stderr:\n{}", String::from_utf8_lossy(&output.stderr)); if output.status.success() { Ok(output) } else { Err(Error::CliError(cmd, output)) } } /// Serializes a certificate to a file. pub fn serialize_cert(&self, name: &str, cert: &Cert) -> String { let mut bytes = Vec::new(); cert.as_tsk().serialize(&mut bytes) .expect("serializing to a vec is infallible"); let cert_pgp = self.scratch_state().join(format!("{}.pgp", name)); let mut f = File::create_new(&cert_pgp).expect("can create file"); f.write_all(&bytes).expect("can write"); drop(f); format!("{}", cert_pgp.display()) } /// Generates a certificate with the user ID /// . Writes it into the scratch /// directory, and imports it into the certificate stores. /// /// Returns the certificate and the path to a file containing it. pub fn gen(&self, localpart: &str, creation_time: C, validity: V) -> (Cert, String) where C: Into>, V: Into>, { // Be careful to create a certificate that won't be stripped on // import. let mut builder = CertBuilder::new() .add_userid(&format!("<{}@example.org>", localpart)[..]) .add_signing_subkey(); if let Some(t) = creation_time.into() { builder = builder.set_creation_time(t); } if let Some(v) = validity.into() { builder = builder.set_validity_period(v); } let (cert, _rev) = builder .generate() .expect("can generate a key"); let filename = self.serialize_cert(localpart, &cert); self.import(&cert).expect("can import"); (cert, filename) } /// Export the given entity's keyring, and make sure that it /// contains the specified certificates. The certificates must /// match exactly. Recall that adding a certificates prunes some /// components. /// /// It's okay if the entity does not exist. pub fn check_export<'a, E, C>(&self, entity: E, commit: C, expected: &[ &Cert ]) where E: Into>, C: Into>, { let entity = entity.into(); let commit = commit.into(); let mut args = vec![ "policy", "export" ]; if let Some(entity) = entity { args.push("--name"); args.push(entity); } else { args.push("--all"); } if let Some(commit) = commit { args.extend(&[ "--commit", commit]); } let got = if let Ok(output) = self.sq_git(&args[..]) { CertParser::from_bytes(&output.stdout) .expect("can parse keyring") .map(|r| r.map_err(Into::into)) .collect::>>() .expect("can parse all certificates") } else { // entity does not exist. eprintln!("Warning: sq-git policy export failed: entity \ appears to not exist"); Vec::new() }; let got: BTreeMap = BTreeMap::from_iter(got.into_iter().map(|c| (c.fingerprint(), c))); let got_fprs = BTreeSet::from_iter(got.keys()); let expected: BTreeMap = BTreeMap::from_iter(expected.iter().map(|&c| { (c.fingerprint(), c.clone().strip_secret_key_material()) })); let expected_fprs = BTreeSet::from_iter(expected.keys()); let mut die = false; for unexpected in got_fprs.difference(&expected_fprs) { let c = got.get(unexpected).unwrap(); eprintln!("Unexpectedly got {} ({})", unexpected, c.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); die = true; } for missing in expected_fprs.difference(&got_fprs) { let c = expected.get(missing).unwrap(); eprintln!("Missing {} ({})", missing, c.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); die = true; } for fpr in expected_fprs.intersection(&got_fprs) { let expected = expected.get(fpr).unwrap(); let got = got.get(fpr).unwrap(); if expected != got { // Is this failing unexpectedly? Perhaps you created a // certificate with encryption or authentication capable // subkeys. Recall: sq-git strips those on import. eprintln!("{} ({}) differs", fpr, expected.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); eprintln!("Got ({} packets):", got.clone().into_packets().count()); let mut bytes = Vec::new(); got.as_tsk().armored().serialize(&mut bytes) .expect("serializing to a vec is infallible"); eprintln!("{}", String::from_utf8_lossy(&bytes)); eprintln!("Expected ({} packets):", expected.clone().into_packets().count()); let mut bytes = Vec::new(); expected.as_tsk().armored().serialize(&mut bytes) .expect("serializing to a vec is infallible"); eprintln!("{}", String::from_utf8_lossy(&bytes)); die = true; } } if die { panic!("{}'s certificates are unexpected", entity.unwrap_or("--all")); } } } /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("command failed\n$ {}\nstdout:\n{}\n\nstderr:\n{}", .0, String::from_utf8_lossy(&.1.stdout), String::from_utf8_lossy(&.1.stderr))] CliError(String, std::process::Output), #[error("`faketime` not available (to skip tests that need `faketime`, \ set the NO_FAKETIME environment variable)\n\ \nstdout:\n{}\n\ \nstderr:\n{}", String::from_utf8_lossy(&.0.stdout), String::from_utf8_lossy(&.0.stderr))] NoFaketime(std::process::Output), #[error(transparent)] Other(#[from] anyhow::Error), #[error(transparent)] Io(#[from] std::io::Error), #[error(transparent)] Utf8(#[from] std::string::FromUtf8Error), } fn sh_quote<'s, S: AsRef + 's>(s: S) -> String { let s = s.as_ref(); if s.contains(char::is_whitespace) { format!("{:?}", s) } else { s.to_string() } } sequoia-git-0.4.0/tests/diff.rs000064400000000000000000000234521046102023000145020ustar 00000000000000use std::fs; mod common; use common::Environment; use common::Error; #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd)] enum Change<'a> { AddUser(&'a str), RetireUser(&'a str), } fn assert_changes<'a>(json: &[u8], expected: &[Change]) { let json = String::from_utf8_lossy(json); let output: serde_json::Value = serde_json::from_str(&json) .expect(&format!("valid json: got {} bytes:\n{}", json.len(), json)); // At the top-level we have a map that contains an entry // "changes". let changes = &output["changes"]; let changes = if let serde_json::Value::Array(changes) = changes { changes } else { panic!("Expected an array of changes, got: {:?}", changes); }; // The changes entry is an array of maps. let mut got = Vec::new(); for change in changes { // A map is corresponds to a single change, and looks looks // like this: // // { // "AddUser": "alice" // }, let change = if let serde_json::Value::Object(change) = change { change } else { panic!("Expected a map, got: {:?}", change); }; if let Some(user) = change.get("AddUser") { if let serde_json::Value::String(user) = user { got.push(Change::AddUser(user)); } else { panic!("Unknown change: {:?}", change); } } else if let Some(user) = change.get("RetireUser") { if let serde_json::Value::String(user) = user { got.push(Change::RetireUser(user)); } else { panic!("Unknown change: {:?}", change); } } else if let Some(_) = change.get("AddRight") { // We don't check for this yet. } else if let Some(_) = change.get("RemoveRight") { // We don't check for this yet. } else if let Some(_) = change.get("AddCert") { // We don't check for this yet. } else if let Some(_) = change.get("RemoveCert") { // We don't check for this yet. } else { panic!("Unknown change: {:?}", change); } } got.sort(); let mut expected = expected.to_vec(); expected.sort(); eprintln!("Expected changes: {:?}", expected); eprintln!(" Got changes: {:?}", got); assert_eq!(expected, got); } #[test] fn policy_diff() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let alice_fpr = &alice.fingerprint().to_string(); let (bob, bob_pgp) = e.gen("bob", None, None); let bob_fpr = &bob.fingerprint().to_string(); let (_carol, carol_pgp) = e.gen("carol", None, None); let (_dave, dave_pgp) = e.gen("dave", None, None); // Add an initial commit without a policy. fs::write(p.join("0"), "0.")?; e.git(&["add", "0"])?; e.git(&[ "commit", "-m", "Initial commit. No policy yet" ])?; let c0 = e.git_current_commit()?; // Alice adds herself as the project maintainer. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Alice to the policy file.", &format!("-S{}", alice_fpr), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that she can add commits. fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice authorizes Bob. e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice authorizes Bob.", &format!("-S{}", alice_fpr), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that he can add commits. fs::write(p.join("4"), "4.")?; e.git(&["add", "4"])?; e.git(&[ "commit", "-m", "Bob adds a commit.", &format!("-S{}", bob_fpr), ])?; let c4 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; let check = |args: &[&str], expected: &[Change]| { let mut a = vec!["policy", "diff"]; a.extend(args); let output = match e.sq_git(&a) { Ok(output) => { assert!(expected.is_empty()); output } Err(err) => { match err { Error::CliError(_, output) => { output } err => { panic!("Unexpected failure: {}", err); } } } }; assert_changes(&output.stdout, expected) }; // The status quo: // // c0: No policy. // root: Alice added to policy // c2: Policy unchanged. // c3: Bob added to policy. // c4 / HEAD: Policy unchanged. // HEAD -> working directory check(&[], &[]); // Commit with itself. check(&[&root, &root], &[]); // Commits without a policy check(&[&c0, &c0], &[]); // The commit where Alice is added. check(&[&c0, &root], &[ Change::AddUser("alice") ]); check(&[&root, &c0], &[ Change::RetireUser("alice") ]); check(&[&root, &c2], &[]); check(&[&c2, &root], &[]); // The commit where Bob is added. check(&[&c2, &c3], &[ Change::AddUser("bob") ]); check(&[&c3, &c2], &[ Change::RetireUser("bob") ]); // Two commits, no policy change. check(&[&c3, &c4], &[]); check(&[&c4, &c3], &[]); check(&["--old-commit", &c0, "--new-commit", &c4], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&["--new-commit", &c4, "--old-commit", &c0], &[Change::AddUser("alice"), Change::AddUser("bob")]); // From the first commit without a policy to HEAD. check(&[&c0, &c4], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&[&c4, &c0], &[Change::RetireUser("alice"), Change::RetireUser("bob")]); // With a symbolic name. check(&[&c0, "HEAD"], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&["HEAD", &c0], &[Change::RetireUser("alice"), Change::RetireUser("bob")]); // Replace the policy file, but don't check it in. let policy_toml = p.join("openpgp-policy.toml"); std::fs::remove_file(&policy_toml).expect("can remove"); let policy_toml = &policy_toml.display().to_string()[..]; e.sq_git(&[ "policy", "authorize", "carol", "--cert-file", &carol_pgp, "--project-maintainer" // All capabilities. ])?; check(&[&c4, policy_toml], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // If the second argument is not provided we use the policy in the // working directory. check(&[&c4], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // If no argumens are provided we compare HEAD, i.e., c4 to the // current file. check(&[], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // Relative to itself. check(&[policy_toml, policy_toml], &[]); // If the second argument is not provided we use the policy in the // working directory. check(&[policy_toml], &[]); // Don't use the DWIM interface. check(&["--old-commit", &c4, "--new-file", policy_toml], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); check(&["--new-file", policy_toml, "--old-commit", &c4], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // Create a second policy file. let carol_policy_toml = p.join("carol-policy.toml"); std::fs::rename(&policy_toml, &carol_policy_toml).expect("can rename"); let carol_policy_toml = &carol_policy_toml.display().to_string()[..]; e.sq_git(&[ "policy", "authorize", "dave", "--cert-file", &dave_pgp, "--project-maintainer" // All capabilities. ])?; check(&["--old-file", policy_toml, "--new-file", carol_policy_toml], &[ Change::RetireUser("dave"), Change::AddUser("carol") ]); check(&["--new-file", policy_toml, "--old-file", carol_policy_toml], &[ Change::AddUser("dave"), Change::RetireUser("carol") ]); Ok(()) } #[test] fn non_existant() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); // Check that accessing a non-existant file returns in an error. let non_existent = p.join("non_existent"); assert!(! non_existent.exists()); let non_existent = &non_existent.display().to_string(); assert!(e.sq_git(&[ non_existent, non_existent ]).is_err()); assert!(e.sq_git(&[ "--old-commit", non_existent, "--new-commit", non_existent ]).is_err()); assert!(e.sq_git(&[ "--old-file", non_existent, "--new-file", non_existent ]).is_err()); Ok(()) } sequoia-git-0.4.0/tests/expired-cert.rs000064400000000000000000000120731046102023000161620ustar 00000000000000use std::fs; use std::time::Duration; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::Packet; use openpgp::policy::StandardPolicy; const P: &StandardPolicy = &StandardPolicy::new(); mod common; use common::Environment; #[test] fn expired_certificate() -> anyhow::Result<()> { if ! Environment::check_for_faketime()? { // faketime tests are disabled. return Ok(()); } // Consider: // // Alice is authorized to add commits at time t0. let t0 = SystemTime::now() - Duration::new(80 * 60, 0); // // At t1, she adds a commit (c1). let t1 = t0 + Duration::new(30 * 60, 0); // At t2, her certificate expires. // // Note: This corresponds to the current time, because // set_expiration_time doesn't let us override the signature // creation time. See: // // https://gitlab.com/sequoia-pgp/sequoia/-/issues/1154 let t2 = t1 + Duration::new(50 * 60, 0); // // At t3, she adds a commit (c2) that updates her certificate. let t3 = t2 + Duration::new(70 * 60, 0); let future = t3 + Duration::new(110 * 60, 0); // // The policy in c1 is used to authenticate c2, but the // certificate in c1's policy is expired. In this case, the // certificates from c2's policy should be used to update the // certificates in c1's policy. let mut e = Environment::at(t0.clone())?; let p = e.git_state(); let (alice, alice_pgp) = e.gen( "alice", t0.clone(), t2.duration_since(t1.clone()).expect("valid")); let alice_fpr = &alice.fingerprint().to_string()[..]; e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit (@ t0).", ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Add another commit at t1. e.time(t1); fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "@ t1", &format!("-S{}", alice_fpr), ])?; let c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root, &c2])?; // Try adding a commit after her certificate expires. This should fail. e.time(t3); fs::write(p.join("3"), "3.")?; e.git(&["add", "3"])?; assert!(e.git(&[ "commit", "-m", "@ t3.", &format!("-S{}", alice_fpr), ]).is_err()); // Extend Alice's expiration. let (alice2, _) = { let vc = alice.with_policy(P, e.time.clone()).expect("valid cert"); let mut primary_signer = alice.primary_key().key().clone() .parts_into_secret()?.into_keypair()?; // We really want to set the new signatures' creation time to t2 let mut packets = Vec::new(); for ka in vc.keys() { let mut subkey_signer = if ka.for_signing() { Some(ka.key().clone().parts_into_secret()?.into_keypair()?) } else { None }; let sigs = ka.set_expiration_time( &mut primary_signer, if let Some(subkey_signer) = subkey_signer.as_mut() { Some(subkey_signer) } else { None }, Some(future.clone())) .expect(&format!("can update expiration of {}", ka.key().fingerprint())); if ka.key().fingerprint() == alice.fingerprint() { packets.push(Packet::from(alice.primary_key().key().clone())); } else { packets.push(Packet::from(ka.key().clone().role_into_subordinate())); } packets.extend(sigs.into_iter().map(|sig| Packet::from(sig))); } alice.clone().insert_packets(packets).expect("can insert packets") }; e.import(&alice2).expect("can import"); // Now we should be able to create the commit. assert!(e.git(&[ "commit", "-m", "@ t3.", &format!("-S{}", alice_fpr), ]).is_ok()); let c3_1 = e.git_current_commit()?; // But we can't verify it, because the certificate in the policy // is expired! e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root, &c3_1]).is_err()); // Reset to c2. e.git(&["reset", "--hard", &c2])?; assert_eq!(c2, e.git_current_commit()?); // Update the policy (by looking in the local certificate store). assert!(e.sq_git(&["policy", "sync", "--disable-keyservers"]).is_ok()); e.git(&["add", "openpgp-policy.toml"])?; // Now we should be able to create the commit. assert!(e.git(&[ "commit", "-m", "@ t3 (try two).", &format!("-S{}", alice_fpr), ]).is_ok()); let c3_2 = e.git_current_commit()?; // And we can verify it, because the updated certificate is in the // new commit's policy file. e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root, &c3_2]).is_ok()); Ok(()) } sequoia-git-0.4.0/tests/export.rs000064400000000000000000000030131046102023000151020ustar 00000000000000mod common; use common::Environment; #[test] fn export() -> anyhow::Result<()> { let e = Environment::new()?; let (alice, _alice_pgp) = e.gen("alice", None, None); let (bob, _bob_pgp) = e.gen("bob", None, None); // Add alice. e.sq_git(&[ "policy", "authorize", "alice", &alice.fingerprint().to_string(), "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice ]); e.check_export(None, None, &[ &alice ]); e.check_export("bob", None, &[ ]); // Add alice. e.sq_git(&[ "policy", "authorize", "bob", &bob.fingerprint().to_string(), "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Bob as co-maintainer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice ]); e.check_export(None, None, &[ &alice, &bob ]); e.check_export("bob", None, &[ &bob ]); // Make sure using a commit works. e.check_export("alice", &root[..], &[ &alice ]); e.check_export(None, &root[..], &[ &alice ]); e.check_export("bob", &root[..], &[ ]); Ok(()) } sequoia-git-0.4.0/tests/git-update-hook.rs000064400000000000000000000103511046102023000165650ustar 00000000000000use std::fs; use std::io::Write; mod common; use common::Environment; fn create_environment() -> anyhow::Result<(Environment, String)> { let (e, root) = Environment::scooby_gang_bootstrap()?; // Create a bare repository at our scratch location. let scratch = e.scratch_state().display().to_string(); e.git(&["init", "--bare", &scratch])?; // Set us as update hook. let update_hook = e.scratch_state().join("hooks").join("update"); let mut update = fs::File::create(&update_hook)?; writeln!(update, "#!/bin/sh")?; writeln!(update)?; writeln!(update, "{} update-hook --trust-root={} \"$@\"", Environment::sq_git_path()?.display(), root)?; #[cfg(unix)] { // Make file executable. use std::os::unix::fs::PermissionsExt; let metadata = update.metadata()?; let mut permissions = metadata.permissions(); permissions.set_mode(0o755); update.set_permissions(permissions)?; } // Add as origin. e.git(&["remote", "add", "origin", &scratch])?; Ok((e, root)) } #[test] fn update_hook() -> anyhow::Result<()> { let (e, _root) = create_environment()?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, as she // has the sign-commit right. e.git(&["checkout", "-b", "test-willow"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "test-willow"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Her release key also has that right, because she needs it in // order to give it to new users. e.git(&["checkout", "-b", "test-willow-release"])?; fs::write(p.join("a"), "Aller Anfang ist schwer. -- Schiller")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Someone is not quite correct on the internet.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.git(&["push", "origin", "test-willow-release"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Buffy's cert was not yet added, so she may not sign commits. e.git(&["checkout", "-b", "test-buffy"])?; fs::write(p.join("a"), "Aller Anfang ist schwer, unless you are super strong!1")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Well, actually...", &format!("-S{}", e.buffy.fingerprint), ])?; if let Ok(output) = e.git(&["push", "origin", "test-buffy"]) { eprintln!("stderr: {}", String::from_utf8_lossy(&output.stderr)); } assert!(e.git(&["push", "origin", "test-buffy"]).is_err()); Ok(()) } #[test] fn rebase() -> anyhow::Result<()> { let (e, _root) = create_environment()?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // There are two threads of development. Let's start the first // one. e.git(&["checkout", "-b", "feature-one"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change of the first feature.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "feature-one"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // There are two threads of development. Let's start the second // one. e.git(&["checkout", "-b", "feature-two"])?; fs::write(p.join("b"), "And now for something completely different.")?; e.git(&["add", "b"])?; e.git(&[ "commit", "-m", "First change of the second feature.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "feature-two"])?; // Now we rebase feature-two on top of feature-one and push it to // update the remote feature-two branch. e.git(&[ "rebase", "feature-one", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "--force", "feature-two"])?; Ok(()) } sequoia-git-0.4.0/tests/keyring-update.rs000064400000000000000000000323051046102023000165170ustar 00000000000000use std::fs; use sequoia_openpgp as openpgp; use openpgp::cert::KeyBuilder; use openpgp::policy::StandardPolicy; use openpgp::types::KeyFlags; mod common; use common::Environment; use common::rotate_subkeys; const P: &StandardPolicy = &StandardPolicy::new(); #[test] fn keyring_update_add_certificate() -> anyhow::Result<()> { // Consider: Alice is the project maintainer. She gives Bob // commit rights. Bob modifies Alice's keyring to include another // certificate that he presumably controls. That's not allowed. // Make sure we reject it. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); let (alice_bob, alice_bob_pgp) = e.gen("alice-bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob tries to add a certificate to Alice's keyring. This should // fail. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_bob_pgp, "--project-maintainer" // Committer ])?; e.check_export("alice", None, &[ &alice, &alice_bob ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob adds a certificate to Alice's keyring.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure Alice can add a certificate to an // existing entity. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice, &alice_bob ]); e.check_export("bob", None, &[ &bob ]); assert_eq!(c3, e.git_current_commit()?); e.git(&[ "commit", "-m", "Alice adds the certificate to her keyring.", &format!("-S{}", alice.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // And make sure the new certificate can add commits. fs::write(p.join("b"), "bbb.")?; e.git(&["add", "b"])?; e.git(&[ "commit", "-m", "Alice makes a commit signed with the new certificate.", &format!("-S{}", alice_bob.fingerprint()), ])?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; Ok(()) } #[test] fn keyring_update_remove_certificate() -> anyhow::Result<()> { // Consider: // // Alice is the project maintainer. She gives Bob commit rights. // Bob modifies Alice's keyring to remove her certificate. // That's not allowed. Make sure we catch it. let e = Environment::new()?; let p = e.git_state(); let (alice1, alice1_pgp) = e.gen("alice1", None, None); let (alice2, alice2_pgp) = e.gen("alice2", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice1_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice1 ]); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice2_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice1, &alice2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice1.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice1, &alice2 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice2.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; std::fs::remove_file(p.join("openpgp-policy.toml")).expect("can remove"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice1_pgp, "--project-maintainer" // All capabilities. ])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice1 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob removes one of Alice's certificates.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure alice can remove the certificate. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice1 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice removes one of her certificates.", &format!("-S{}", alice2.fingerprint()), ])?; Ok(()) } #[test] fn keyring_update_add_packet() -> anyhow::Result<()> { // It's always safe to add to an existing certificate. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let _c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob updates his certificate. let bob2 = rotate_subkeys(&bob); assert!(bob.keys().count() < bob2.keys().count()); let bob2_pgp = e.serialize_cert("bob2", &bob2); e.import(&bob2).expect("can import"); e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob2_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob updates his certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // Bob updates Alice's certificate. let alice_vc = alice.with_policy(P, None).expect("valid cert"); let alice2 = KeyBuilder::new(KeyFlags::signing()) .subkey(alice_vc).unwrap() .attach_cert().unwrap(); assert!(alice.keys().count() < alice2.keys().count()); let alice2_pgp = e.serialize_cert("alice2", &alice2); e.import(&alice2).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice2_pgp, ])?; e.check_export("alice", None, &[ &alice2 ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob updates Alice's certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); Ok(()) } #[test] fn keyring_update_remove_packet() -> anyhow::Result<()> { // Removing a packet requires authorization. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); let bob_vc = bob.with_policy(P, None).expect("valid cert"); let bob2 = KeyBuilder::new(KeyFlags::signing()) .subkey(bob_vc).unwrap() .attach_cert().unwrap(); assert!(bob.keys().count() < bob2.keys().count()); let bob2_pgp = e.serialize_cert("bob2", &bob2); e.import(&bob2).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob2_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob tries to strip a User ID from his certificate. This should // fail. std::fs::remove_file(p.join("openpgp-policy.toml")).expect("can remove"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob strips a user ID from his certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure alice can remove the user ID. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice strips a user ID from Bob's certificate.", &format!("-S{}", alice.fingerprint()), ])?; Ok(()) } sequoia-git-0.4.0/tests/policy-authorize.rs000064400000000000000000000113251046102023000170750ustar 00000000000000use std::collections::BTreeSet; mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap() } // The keys for the different authorizations in the JSON file. const SIGN_COMMIT: &str = "sign_commit"; const SIGN_TAG: &str = "sign_tag"; const SIGN_ARCHIVE: &str = "sign_archive"; const ADD_USER: &str = "add_user"; const RETIRE_USER: &str = "retire_user"; const AUDIT: &str = "audit"; const CAPS: &[&str] = &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]; fn check(e: &Environment, args: &[&str], expected_caps: &[&str]) { let petname = e.buffy.petname; let fpr = e.buffy.fingerprint.to_string(); let openpgp_policy_toml = e.git_state().join("openpgp-policy.toml"); if let Err(err) = std::fs::remove_file(&openpgp_policy_toml) { if std::io::ErrorKind::NotFound != err.kind() { panic!("Removing {}", openpgp_policy_toml.display()); } } let mut sq_git: Vec<&str> = [ "policy", "authorize", &petname, &fpr, ].to_vec(); sq_git.extend(args); eprintln!("Running: sq-git {}", sq_git.join(" ")); e.sq_git(&sq_git).unwrap(); let output = e.sq_git(&[ "policy", "describe", "--output-format", "json" ]).unwrap(); eprintln!("Output:\n{}", String::from_utf8_lossy(&output.stdout)); let status: serde_json::Value = serde_json::from_slice(&output.stdout) .expect("\"sq policy describe\" emits valid json output"); // eprintln!("JSON:\n{:?}", status); let auths = &status["authorization"]; // eprintln!("JSON[\"authorization\"]:\n{:?}", auths); let user = &auths[petname]; eprintln!("JSON[\"authorization\"][\"{}\"]:\n{:?}", petname, user); let caps = BTreeSet::from_iter(CAPS.iter()); let expected_caps_present = BTreeSet::from_iter(expected_caps.iter()); for cap in expected_caps_present.iter() { eprintln!("Checking that {} is true", cap); match &user[cap] { serde_json::Value::Bool(true) => (), v => { panic!("expected {} to be true, but it is: {:?}", cap, v); } } } let expected_caps_missing = caps.difference(&expected_caps_present); for cap in expected_caps_missing { eprintln!("Checking that {} is not set or false", cap); match &user[cap] { serde_json::Value::Null => (), serde_json::Value::Bool(false) => (), v => { panic!("expected {} to be false, but it is: {:?}", cap, v); } } } } #[test] fn check_flags() -> anyhow::Result<()> { let (e, _root) = create_environment()?; // One at a time. check(&e, &["--sign-commit"], &[ SIGN_COMMIT ]); check(&e, &["--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--sign-tag"], &[ SIGN_TAG ]); check(&e, &["--add-user"], &[ ADD_USER ]); check(&e, &["--retire-user"], &[ RETIRE_USER ]); check(&e, &["--audit"], &[ AUDIT ]); // Mix and match. check(&e, &["--sign-commit", "--sign-archive"], &[ SIGN_COMMIT, SIGN_ARCHIVE ]); check(&e, &["--sign-tag", "--add-user", "--retire-user"], &[ SIGN_TAG, ADD_USER, RETIRE_USER ]); // Add some negatives. The last positive or negative wins. check(&e, &["--no-sign-commit", "--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--sign-commit", "--no-sign-commit", "--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--no-sign-commit", "--sign-commit", "--sign-archive"], &[ SIGN_COMMIT, SIGN_ARCHIVE ]); // The meta-capabilities. check(&e, &["--committer"], &[ SIGN_COMMIT ]); check(&e, &["--release-manager"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE ]); check(&e, &["--project-maintainer"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]); // Union. check(&e, &["--project-maintainer", "--committer"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]); check(&e, &["--project-maintainer", "--no-sign-archive"], &[ SIGN_COMMIT, SIGN_TAG, ADD_USER, RETIRE_USER, AUDIT ]); // A meta-capability does not trump a negative capability. check(&e, &["--no-sign-archive", "--project-maintainer"], &[ SIGN_COMMIT, SIGN_TAG, ADD_USER, RETIRE_USER, AUDIT ]); Ok(()) } sequoia-git-0.4.0/tests/policy.rs000064400000000000000000001161371046102023000150740ustar 00000000000000use std::fs; use sequoia_openpgp as openpgp; use openpgp::serialize::Serialize; mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap() } #[test] fn sign_commit() -> anyhow::Result<()> { let (e, root) = create_environment()?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, as she // has the sign-commit right. e.git(&["checkout", "-b", "test-willow"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Her release key also has that right, because she needs it in // order to give it to new users. e.git(&["checkout", "-b", "test-willow-release"])?; fs::write(p.join("a"), "Aller Anfang ist schwer. -- Schiller")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Someone is not quite correct on the internet.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Buffy's cert was not yet added, so she may not sign commits. e.git(&["checkout", "-b", "test-buffy"])?; fs::write(p.join("a"), "Aller Anfang ist schwer, unless you are super strong!1")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Well, actually...", &format!("-S{}", e.buffy.fingerprint), ])?; let commit_2 = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); let commit_3 = e.git_commit(&[("workwork.txt", Some(b"Hiho, hiho"))], "Off to work we go...", Some(&e.willow_release)).unwrap(); // commit 2 is still bad. assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // But if we use the bad commit as the trust root, it should work, // because we don't check that the trust root is authenticated by // its parent, and commit 2 authenticates commit 3. assert!(e.sq_git(&["log", "--trust-root", &commit_2]).is_ok()); // Let's check the range commit_2..commit_3, but use the root as // our trust root instead of commit_2. This should again fail. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_2, commit_3)]).is_err()); // commit_2..commit_2 is empty. But, we should still check for a // path from the trust root to commit_2. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_2, commit_2)]).is_err()); // commit_3..commit_3 is empty. But, we should still check for a // path from the commit_2 to commit_3. assert!(e.sq_git(&["log", "--trust-root", &commit_2, &format!("{}..{}", commit_3, commit_3)]).is_ok()); Ok(()) } #[test] fn add_user() -> anyhow::Result<()> { let (e, root) = create_environment()?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, but she // can not add users. e.git(&["checkout", "-b", "test-willow"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // However, her release key does have that right. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not add // users either. e.git(&["checkout", "-b", "test-xander"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) } #[test] fn retire_user() -> anyhow::Result<()> { let (e, root) = create_environment()?; // Add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code signing key may not retire Buffy. e.git(&["checkout", "-b", "test-willow"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // However, her release key does have that right. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not // retire users either. e.git(&["checkout", "-b", "test-xander"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) } #[test] fn audit() -> anyhow::Result<()> { // Introduce some bad commits, and try to recover. // // When we use in-band policies, then only a certificate with the // audit capability can goodlist commits, and can it can only // recover from hard revocations. // // When we use an external policy (using --policy-file), we can't // see who added a goodlist entry. But that doesn't matter // because the policy is fully trusted. An external policy can // recover from any type of veritifcation failure include the // complete absence of a signature. let (e, root) = create_environment()?; let p = e.git_state(); // Add a commit from Willow, which is allowed. This makes sure // the trust root's policy is not applied to the first dodgy commit. fs::write(p.join("superpowers"), "Willow can break encryption.")?; e.git(&["add", "superpowers"])?; e.git(&[ "commit", "-m", "Willow data commit.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // Add a commit signed by Xander, who is not authorized to do // that. fs::write(p.join("a"), "Aller Anfang ist schwer, I'll go fetch the hammer!")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "No problem, we'll get you up and running in no time.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_err()); let bad_commit = e.git_current_commit()?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Now we try to recover by good-listing the bad commit. // Willow's code signing key may not goodlist commits. e.git(&["checkout", "-b", "test-willow"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_ok()); // But, if we look further back, the commit is now goodlisted, but // the signer that got the commit goodlisted does not have the // audit right. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)]).is_ok()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Willow's release key may goodlist commits. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.willow_release.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_ok()); // But, if we look further back, the commit is now goodlisted, but // it is still considered bad, because in-band goodlisting can // only be used to recover from signing keys that have been hard // revoked. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Goodlisting this commit from an external policy is enough. e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not // goodlist his own commit. e.git(&["checkout", "-b", "test-xander"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_err()); // But, if we look further back, the commit is now goodlisted, but // the signer that got the commit goodlisted does not have the // audit right. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Goodlisting this commit from an external policy is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_1() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // | // F <- Good list B // | // E // | // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: willow good lists riley's commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_2() -> anyhow::Result<()> { let (e, root) = create_environment()?; // K <- target // / \ // | I <- Good list B // | | // | H // | | // J G // | | // | F // | | // | E // \ / // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // // By inspection, we see that there is an authenticated path from // A to K via I, because I goodlists B. That path is longer than // the path via J. If we do a breath-first walk from K to A, then // we'll visit the nodes in the following order: K, J, I, D, H, C, // G, B... We'll reject B, because the good list hasn't // propagated to B. And the goodlist will never propagate to B, // because we'd have to visit D, C, and B a second time. // // We avoid this problem by doing a topographical walk. That is, // we don't visit D until we've visit all of its children (J and // E). Then, all good lists have propagated to D and when we // visit B, B is on the goodlist. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_f = e.git_commit(&[("workwork.txt", Some(b"f"))], "F: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_h = e.git_commit(&[("workwork.txt", Some(b"h"))], "H: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_i = e.git_commit(&[("openpgp-policy.toml", None)], "I: willow good lists riley's commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to d. e.git(&["checkout", &commit_d])?; e.git(&["clean", "-fdx"])?; let commit_j = e.git_commit(&[("workwork.md", Some(b"1"))], "J: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge I and J. e.git(&[ "merge", "-m", "K: Merge I and J", &format!("-S{}", e.willow_release.fingerprint), &commit_j, &commit_i])?; let commit_k = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_3() -> anyhow::Result<()> { let (e, root) = create_environment()?; // F <- target // / \ // | D // | | // E | <- Add revocation for Riley // | | // | C // \ / // B <- Signature by Riley // | // A <- Trust root. // // // We shouldn't be able to verify F, because even though A - B - C // - D - F taken alone is an authentic path, we should notice the // revocation certificate added in E and reject B. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"c"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_d = e.git_commit(&[("workwork.txt", Some(b"d"))], "D: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to b. e.git(&["checkout", &commit_b])?; e.git(&["clean", "-fdx"])?; // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_e = e.git_commit(&[("openpgp-policy.toml", None)], "E: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", root, commit_d)]).is_ok()); // Merge D and E. e.git(&[ "merge", "-m", "F: Merge D and E", &format!("-S{}", e.willow_release.fingerprint), &commit_d, &commit_e])?; let commit_k = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_4() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // / \ // F | <- Good list C // | | // | E <- Good list B // \ / // D <- Add revocation for Riley. // | // C <- Signature by Riley // | // B <- Signature by Riley // | // A <- Trust root. // // // Along, neither A-B-C-D-E-G or A-B-C-D-F-G is valid. But taken // together, when visiting C, there is an authenticated suffix // that goodlists C, and when visiting B, there is also an // authenticates suffix that authenticates B. So, G is // authenticated! // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("riley.txt", Some(b"riley was here, again"))], "C: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_e = e.git_commit(&[("openpgp-policy.toml", None)], "E: willow good lists riley's commit (B)", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Reset to d. e.git(&["checkout", &commit_d])?; e.git(&["clean", "-fdx"])?; e.sq_git(&[ "policy", "goodlist", &commit_c, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: willow good lists riley's commit (C)", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge E and F. // // This is a bit complicated, because the two good list entries // are going to conflict. Create a merge commit (but don't commit // it) using the content of F. Then manually merge in E (which // goodlisted B). e.git(&[ "merge", "-m", "G: Merge E and F", "-s", "ours", "--no-commit", &commit_e, &commit_f])?; e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "G: Merge E and F", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_5() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // | // F <- Xander goodlists B, but that's not allowed // | // E // | // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // // Make sure that goodlisting that is not allowed is, in fact, // ignored. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: xander good lists riley's commit", Some(&e.xander)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn via() -> anyhow::Result<()> { let (e, root) = create_environment()?; // F <- target // / \ // E D <- unauthorized // | | // | C // \ / // B // | // A // // When we do: sq-git log --trust-root A E..F, this means we want // a valid path from A to F via E. Since E is unauthorized, this // should fail. let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"3"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_d = e.git_commit(&[("workwork.txt", Some(b"4"))], "D: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to b. e.git(&["checkout", &commit_b])?; e.git(&["clean", "-fdx"])?; // Unauthorized. let commit_e = e.git_commit(&[("busybusy.txt", Some(b"1"))], "E: xander signs a commit", Some(&e.xander)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge D and E. e.git(&[ "merge", "-m", "F: Merge D and E", &format!("-S{}", e.willow_release.fingerprint), &commit_d, &commit_e])?; let commit_f = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Make sure that we can go via D. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_d, commit_f)]).is_ok()); // But not via E. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_e, commit_f)]).is_err()); // We can't authenticate E via F, as F comes later. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_f, commit_e)]).is_err()); Ok(()) } #[test] fn external_policy_authenticates_trust_root() -> anyhow::Result<()> { // Normally the trust root is implicitly trusted. When we use an // external policy, we also use it to check the trust root. Make // sure that works. let (e, root) = create_environment()?; // Xander is not allowed to sign a commit. let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: xander signs a commit", Some(&e.xander)).unwrap(); // Willow is. let _commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow)).unwrap(); // A is bad: Xander is not allowed to make a commit. assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When A is the trust root, it is implicitly trusted, and the // rest of the commits are good. assert!(e.sq_git(&["log", "--trust-root", &commit_a]).is_ok()); // But when we use an external policy, we also use the policy to // check A. So, it is bad again. assert!(e.sq_git(&["log", "--trust-root", &commit_a, "--policy-file", "openpgp-policy.toml"]).is_err()); // Authorize Xander. e.sq_git(&[ "policy", "authorize", e.xander.petname, &e.xander.fingerprint.to_string(), "--sign-commit", ])?; // When we use an external policy that says that Xander is // authorized, we're good again. assert!(e.sq_git(&["log", "--trust-root", &commit_a, "--policy-file", "openpgp-policy.toml"]).is_ok()); Ok(()) } #[test] fn symbolic_names() -> anyhow::Result<()> { // Make sure that symbolic names resolve. let (e, root) = create_environment()?; // Willow signs a commit. e.git(&["checkout", "-b", "commit-a"])?; let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: willow signs a commit", Some(&e.willow)).unwrap(); e.git(&["checkout", "-b", "commit-b"])?; let commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow)).unwrap(); e.git(&["checkout", "-b", "commit-c"])?; let commit_c = e.git_commit(&[("workwork.txt", Some(b"3"))], "C: willow signs a commit", Some(&e.willow)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", &commit_a]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a"]).is_ok()); // Name doesn't exist... assert!(e.sq_git(&["log", "--trust-root", "commit_a"]).is_err()); // Symbolic names in different places. assert!(e.sq_git(&["log", "--trust-root", "commit-a", &commit_b]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("{}..{}", commit_b, commit_c)]).is_ok()); // Mix of hashes and symbolic names. assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("commit-b..{}", commit_c)]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("{}..commit-c", commit_b)]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", "commit-b..commit-c"]).is_ok()); Ok(()) } sequoia-git-0.4.0/tests/refs.rs000064400000000000000000000116231046102023000145260ustar 00000000000000mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap() } #[test] #[allow(unused)] fn git_refs() -> anyhow::Result<()> { // The commits: // // commit-2-1 commit-3-1 // | good | good // commit-2-0 commit-3-0 // bad \ / good // commit-2 // | good // commit-1 // | good // commit-0 let (e, commit_0) = create_environment()?; let p = e.git_state(); e.git(&["branch", "commit-0"])?; let commit_1 = e.git_commit(&[("a", Some(b"1"))], "1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_2 = e.git_commit(&[("a", Some(b"2"))], "2", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-2"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); // The bad commit. let commit_2_0 = e.git_commit(&[("a", Some(b"2-0"))], "2-0", Some(&e.xander)).unwrap(); e.git(&["branch", "commit-2-0"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_err()); let commit_2_1 = e.git_commit(&[("a", Some(b"2-1"))], "2-1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-2-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_err()); // Move back to commit-2. e.git(&["checkout", "commit-2"])?; e.git(&["clean", "-fdx"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_3_0 = e.git_commit(&[("a", Some(b"3-0"))], "3-0", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-3-0"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_3_1 = e.git_commit(&[("a", Some(b"3-1"))], "3-1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-3-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); // Debugging. let output = e.git( &["log", "--pretty=oneline", "--graph", "commit-2-1", "commit-3-1"]) .unwrap(); eprintln!("{}", String::from_utf8_lossy(&output.stdout)); assert!(e.git(&["tag", "v1", "commit-1"]).is_ok()); assert!(e.git(&["tag", "v2", "commit-2"]).is_ok()); assert!(e.git(&["tag", "v2.1", "commit-2-1"]).is_ok()); let paths = &[ // Trust root / commit to check / ok / ok with trust root's parent. (&commit_1[..], "commit-1", &commit_2[..], "commit-2", true, true), (&commit_1[..], "commit-1", &commit_3_1[..], "commit-3-0", true, true), (&commit_1[..], "commit-1", &commit_3_1[..], "commit-3-1", true, true), (&commit_1[..], "commit-1", &commit_2_1[..], "commit-2-1", false, false), (&commit_2_0[..], "commit-2-0", &commit_2_1[..], "commit-2-1", true, false), // Use tags instead of branches. (&commit_1[..], "v1", &commit_2[..], "v2", true, true), (&commit_1[..], "v1", &commit_2_1[..], "v2.1", false, false), ]; for (trust_root_hash, trust_root, commit_hash, commit, good, p_good) in paths.iter() { eprintln!("Testing: {} ({}) .. {} ({}) ({}, {})", trust_root_hash, trust_root, commit_hash, commit, good, p_good); // Commit id. assert_eq!( e.sq_git(&["log", "--trust-root", trust_root_hash, commit_hash]) .is_ok(), *good); // Short commit id. assert_eq!( e.sq_git(&["log", "--trust-root", &trust_root_hash[0..7], &commit_hash[..]]) .is_ok(), *good); // Using branches. assert_eq!( e.sq_git(&["log", "--trust-root", trust_root, commit]) .is_ok(), *good); // Trust root's parent. assert_eq!( e.sq_git(&["log", "--trust-root", &format!("{}^", trust_root_hash), commit_hash]) .is_ok(), *p_good); // Trust root's parent, with branches assert_eq!( e.sq_git(&["log", "--trust-root", &format!("{}^", trust_root), commit]) .is_ok(), *p_good); // Make sure we can use the configuration file to set a trust // root. assert!(e.git(&["config", "sequoia.trustRoot", trust_root_hash]).is_ok()); assert_eq!( e.sq_git(&["log", commit_hash]) .is_ok(), *good); assert!(e.git(&["config", "sequoia.trustRoot", trust_root]).is_ok()); assert_eq!( e.sq_git(&["log", commit_hash]) .is_ok(), *good); } Ok(()) } sequoia-git-0.4.0/tests/revoked-cert.rs000064400000000000000000000064701046102023000161650ustar 00000000000000use std::fs; use sequoia_openpgp::types::ReasonForRevocation; mod common; use common::Environment; use common::rotate_subkeys; use common::revoke_cert; #[test] fn revoked_certificate() -> anyhow::Result<()> { // Consider: // // Alice is authorized to add commits at time t0. Then she // rotates her signing subkey. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let alice_fpr = &alice.fingerprint().to_string(); // Alice adds herself as the project maintainer. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that she can add commits. fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice rotates her signing subkey. let alice_rotated = rotate_subkeys(&alice); assert!(alice_rotated.keys().count() > alice.keys().count()); e.import(&alice_rotated).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert", &alice.fingerprint().to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Adding rotated key.", &format!("-S{}", alice_fpr), ])?; let _c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice_rotated ]); // Check that she can still add commits. fs::write(p.join("4"), "4.")?; e.git(&["add", "4"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let _c4 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice revokes her certificate. let alice_revoked = revoke_cert(&alice_rotated, ReasonForRevocation::KeyRetired); let alice_revoked_pgp = e.serialize_cert("alice-revoked", &alice_revoked); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_revoked_pgp, "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Adding revoked key.", &format!("-S{}", alice_fpr), ])?; let _c5 = e.git_current_commit()?; e.check_export("alice", None, &[ &alice_revoked ]); e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice shouldn't be able to add any more commits. fs::write(p.join("6"), "6.")?; e.git(&["add", "6"])?; e.git(&[ "commit", "-m", "Alice adds a commit with her revoked key.", &format!("-S{}", alice_fpr), ])?; let _c6 = e.git_current_commit()?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) }