diff --git a/.drone.yml b/.drone.yml deleted file mode 100755 index 0b8625d2aa..0000000000 --- a/.drone.yml +++ /dev/null @@ -1,14 +0,0 @@ -image: dockercore/docker -env: - - AUTO_GOPATH=1 - - DOCKER_GRAPHDRIVER=vfs - - DOCKER_EXECDRIVER=native -script: -# Setup the DockerInDocker environment. - - hack/dind -# Tests relying on StartWithBusybox make Drone time out. - - rm integration-cli/docker_cli_daemon_test.go - - rm integration-cli/docker_cli_exec_test.go -# Validate and test. - - hack/make.sh validate-dco validate-gofmt validate-toml - - hack/make.sh binary cross test-unit test-integration-cli test-integration test-docker-py diff --git a/.gitignore b/.gitignore index 49fa58a946..9696b9a30e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ docs/GIT_BRANCH docs/VERSION docs/GITCOMMIT docs/changed-files +autogen/ +.bashrc diff --git a/.mailmap b/.mailmap index 00b698bba0..8a4500c76d 100644 --- a/.mailmap +++ b/.mailmap @@ -1,4 +1,4 @@ -# Generate AUTHORS: project/generate-authors.sh +# Generate AUTHORS: hack/generate-authors.sh # Tip for finding duplicates (besides scanning the output of AUTHORS for name # duplicates that aren't also email duplicates): scan the output of: diff --git a/AUTHORS b/AUTHORS index e6ec5d00f7..88fff3aa0a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,5 +1,5 @@ # This file lists all individuals having contributed content to the repository. -# For how it is generated, see `project/generate-authors.sh`. +# For how it is generated, see `hack/generate-authors.sh`. Aanand Prasad Aaron Feng diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 038dcefcda..e6bf6ad5f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,70 +1,60 @@ # Contributing to Docker -Want to hack on Docker? Awesome! Here are instructions to get you -started. They are probably not perfect, please let us know if anything -feels wrong or incomplete. +Want to hack on Docker? Awesome! We have a contributor's guide that explains +[setting up a Docker development environment and the contribution +process](https://docs.docker.com/project/who-written-for/). + +![Contributors guide](docs/sources/static_files/contributors.png) + +This page contains information about reporting issues as well as some tips and +guidelines useful to experienced open source contributors. Finally, make sure +you read our [community guidelines](#docker-community-guidelines) before you +start participating. ## Topics * [Reporting Security Issues](#reporting-security-issues) * [Design and Cleanup Proposals](#design-and-cleanup-proposals) -* [Reporting Issues](#reporting-issues) -* [Build Environment](#build-environment) -* [Contribution Guidelines](#contribution-guidelines) +* [Reporting Issues](#reporting-other-issues) +* [Quick Contribution Tips and Guidelines](#quick-contribution-tips-and-guidelines) * [Community Guidelines](#docker-community-guidelines) -## Reporting Security Issues +## Reporting security issues -The Docker maintainers take security very seriously. If you discover a security issue, -please bring it to their attention right away! +The Docker maintainers take security seriously. If you discover a security +issue, please bring it to their attention right away! -Please send your report privately to [security@docker.com](mailto:security@docker.com), -please **DO NOT** file a public issue. +Please **DO NOT** file a public issue, instead send your report privately to +[security@docker.com](mailto:security@docker.com), -Security reports are greatly appreciated and we will publicly thank you for it. We also -like to send gifts - if you're into Docker shwag make sure to let us know :) -We currently do not offer a paid security bounty program, but are not ruling it out in -the future. +Security reports are greatly appreciated and we will publicly thank you for it. +We also like to send gifts—if you're into Docker schwag make sure to let +us know We currently do not offer a paid security bounty program, but are not +ruling it out in the future. -## Design and Cleanup Proposals -When considering a design proposal, we are looking for: - -* A description of the problem this design proposal solves -* A pull request, not an issue, that modifies the documentation describing - the feature you are proposing, adding new documentation if necessary. - * Please prefix your issue with `Proposal:` in the title -* Please review [the existing Proposals](https://github.com/docker/docker/pulls?q=is%3Aopen+is%3Apr+label%3AProposal) - before reporting a new one. You can always pair with someone if you both - have the same idea. - -When considering a cleanup task, we are looking for: - -* A description of the refactors made - * Please note any logic changes if necessary -* A pull request with the code - * Please prefix your PR's title with `Cleanup:` so we can quickly address it. - * Your pull request must remain up to date with master, so rebase as necessary. - -## Reporting Issues +## Reporting other issues A great way to contribute to the project is to send a detailed report when you encounter an issue. We always appreciate a well-written, thorough bug report, and will thank you for it! -When reporting [issues](https://github.com/docker/docker/issues) on -GitHub please include your host OS (Ubuntu 12.04, Fedora 19, etc). -Please include: +Check that [our issue database](https://github.com/docker/docker/issues) +doesn't already include that problem or suggestion before submitting an issue. +If you find a match, add a quick "+1" or "I have this problem too." Doing this +helps prioritize the most common problems and requests. + +When reporting issues, please include your host OS (Ubuntu 12.04, Fedora 19, +etc). Please include: * The output of `uname -a`. * The output of `docker version`. * The output of `docker -D info`. -Please also include the steps required to reproduce the problem if -possible and applicable. This information will help us review and fix -your issue faster. +Please also include the steps required to reproduce the problem if possible and +applicable. This information will help us review and fix your issue faster. -### Template +**Issue Report Template**: ``` Description of problem: @@ -103,123 +93,165 @@ Additional info: ``` -## Build Environment -For instructions on setting up your development environment, please -see our dedicated [dev environment setup -docs](http://docs.docker.com/contributing/devenvironment/). +##Quick contribution tips and guidelines -## Contribution guidelines +This section gives the experienced contributor some tips and guidelines. -### Pull requests are always welcome +###Pull requests are always welcome -We are always thrilled to receive pull requests, and do our best to -process them as quickly as possible. Not sure if that typo is worth a pull -request? Do it! We will appreciate it. +Not sure if that typo is worth a pull request? Found a bug and know how to fix +it? Do it! We will appreciate it. Any significant improvement should be +documented as [a GitHub issue](https://github.com/docker/docker/issues) before +anybody starts working on it. -If your pull request is not accepted on the first try, don't be -discouraged! If there's a problem with the implementation, hopefully you -received feedback on what to improve. +We are always thrilled to receive pull requests. We do our best to process them +quickly. If your pull request is not accepted on the first try, +don't get discouraged! Our contributor's guide explains [the review process we +use for simple changes](https://docs.docker.com/project/make-a-contribution/). -We're trying very hard to keep Docker lean and focused. We don't want it -to do everything for everybody. This means that we might decide against -incorporating a new feature. However, there might be a way to implement -that feature *on top of* Docker. +### Design and cleanup proposals -### Discuss your design on the mailing list +You can propose new designs for existing Docker features. You can also design +entirely new features. We really appreciate contributors who want to refactor or +otherwise cleanup our project. For information on making these types of +contributions, see [the advanced contribution +section](https://docs.docker.com/project/advanced-contributing/) in the +contributors guide. -We recommend discussing your plans [on the mailing -list](https://groups.google.com/forum/?fromgroups#!forum/docker-dev) -before starting to code - especially for more ambitious contributions. -This gives other contributors a chance to point you in the right -direction, give feedback on your design, and maybe point out if someone -else is working on the same thing. +We try hard to keep Docker lean and focused. Docker can't do everything for +everybody. This means that we might decide against incorporating a new feature. +However, there might be a way to implement that feature *on top of* Docker. -### Create issues... +### Talking to other Docker users and contributors -Any significant improvement should be documented as [a GitHub -issue](https://github.com/docker/docker/issues) before anybody -starts working on it. + + + + + + + + + + + + + + + + + + +
Internet Relay Chat (IRC) + +

+ IRC a direct line to our most knowledgeable Docker users; we have + both the #docker and #docker-dev group on + irc.freenode.net. + IRC is a rich chat protocol but it can overwhelm new users. You can search + our chat archives. +

+ Read our IRC quickstart guide for an easy way to get started. +
Google Groups + There are two groups. + Docker-user + is for people using Docker containers. + The docker-dev + group is for contributors and other people contributing to the Docker + project. +
Twitter + You can follow Docker's Twitter feed + to get updates on our products. You can also tweet us questions or just + share blogs or stories. +
Stack Overflow + Stack Overflow has over 7000K Docker questions listed. We regularly + monitor Docker questions + and so do many other knowledgeable Docker users. +
-### ...but check for existing issues first! - -Please take a moment to check that an issue doesn't already exist -documenting your bug report or improvement proposal. If it does, it -never hurts to add a quick "+1" or "I have this problem too". This will -help prioritize the most common problems and requests. ### Conventions Fork the repository and make changes on your fork in a feature branch: -- If it's a bug fix branch, name it XXXX-something where XXXX is the number of the - issue. -- If it's a feature branch, create an enhancement issue to announce your - intentions, and name it XXXX-something where XXXX is the number of the issue. +- If it's a bug fix branch, name it XXXX-something where XXXX is the number of + the issue. +- If it's a feature branch, create an enhancement issue to announce + your intentions, and name it XXXX-something where XXXX is the number of the + issue. -Submit unit tests for your changes. Go has a great test framework built in; use -it! Take a look at existing tests for inspiration. Run the full test suite on -your branch before submitting a pull request. +Submit unit tests for your changes. Go has a great test framework built in; use +it! Take a look at existing tests for inspiration. [Run the full test +suite](https://docs.docker.com/project/test-and-docs/) on your branch before +submitting a pull request. -Update the documentation when creating or modifying features. Test -your documentation changes for clarity, concision, and correctness, as -well as a clean documentation build. See `docs/README.md` for more -information on building the docs and how they get released. +Update the documentation when creating or modifying features. Test your +documentation changes for clarity, concision, and correctness, as well as a +clean documentation build. See our contributors guide for [our style +guide](https://docs.docker.com/project/doc-style) and instructions on [building +the documentation](https://docs.docker.com/project/test-and-docs/#build-and-test-the-documentation). Write clean code. Universally formatted code promotes ease of writing, reading, and maintenance. Always run `gofmt -s -w file.go` on each changed file before committing your changes. Most editors have plug-ins that do this automatically. -Pull requests descriptions should be as clear as possible and include a -reference to all the issues that they address. +Pull request descriptions should be as clear as possible and include a reference +to all the issues that they address. -Commit messages must start with a capitalized and short summary (max. 50 -chars) written in the imperative, followed by an optional, more detailed -explanatory text which is separated from the summary by an empty line. +Commit messages must start with a capitalized and short summary (max. 50 chars) +written in the imperative, followed by an optional, more detailed explanatory +text which is separated from the summary by an empty line. Code review comments may be added to your pull request. Discuss, then make the -suggested modifications and push additional commits to your feature branch. Be -sure to post a comment after pushing. The new commits will show up in the pull -request automatically, but the reviewers will not be notified unless you -comment. +suggested modifications and push additional commits to your feature branch. Post +a comment after pushing. New commits show up in the pull request automatically, +but the reviewers are notified only when you comment. -Pull requests must be cleanly rebased ontop of master without multiple branches +Pull requests must be cleanly rebased on top of master without multiple branches mixed into the PR. **Git tip**: If your PR no longer merges cleanly, use `rebase master` in your feature branch to update your pull request rather than `merge master`. -Before the pull request is merged, make sure that you squash your commits into -logical units of work using `git rebase -i` and `git push -f`. After every -commit the test suite should be passing. Include documentation changes in the -same commit so that a revert would remove all traces of the feature or fix. +Before you make a pull request, squash your commits into logical units of work +using `git rebase -i` and `git push -f`. A logical unit of work is a consistent +set of patches that should be reviewed together: for example, upgrading the +version of a vendored dependency and taking advantage of its now available new +feature constitute two separate units of work. Implementing a new function and +calling it in another file constitute a single logical unit of work. The very +high majory of submissions should have a single commit, so if in doubt: squash +down to one. -Commits that fix or close an issue should include a reference like -`Closes #XXXX` or `Fixes #XXXX`, which will automatically close the -issue when merged. +After every commit, [make sure the test suite passes] +((https://docs.docker.com/project/test-and-docs/)). Include documentation +changes in the same pull request so that a revert would remove all traces of +the feature or fix. -Please do not add yourself to the `AUTHORS` file, as it is regenerated -regularly from the Git history. +Include an issue reference like `Closes #XXXX` or `Fixes #XXXX` in commits that +close an issue. Including references automatically closes the issue on a merge. + +Please do not add yourself to the `AUTHORS` file, as it is regenerated regularly +from the Git history. ### Merge approval -Docker maintainers use LGTM (Looks Good To Me) in comments on the code review -to indicate acceptance. +Docker maintainers use LGTM (Looks Good To Me) in comments on the code review to +indicate acceptance. A change requires LGTMs from an absolute majority of the maintainers of each component affected. For example, if a change affects `docs/` and `registry/`, it needs an absolute majority from the maintainers of `docs/` AND, separately, an absolute majority of the maintainers of `registry/`. -For more details see [MAINTAINERS](MAINTAINERS) +For more details, see the [MAINTAINERS](MAINTAINERS) page. ### Sign your work -The sign-off is a simple line at the end of the explanation for the -patch, which certifies that you wrote it or otherwise have the right to -pass it on as an open-source patch. The rules are pretty simple: if you -can certify the below (from -[developercertificate.org](http://developercertificate.org/)): +The sign-off is a simple line at the end of the explanation for the patch. Your +signature certifies that you wrote the patch or otherwise have the right to pass +it on as an open-source patch. The rules are pretty simple: if you can certify +the below (from [developercertificate.org](http://developercertificate.org/)): ``` Developer Certificate of Origin @@ -263,7 +295,7 @@ Then you just add a line to every git commit message: Signed-off-by: Joe Smith -Using your real name (sorry, no pseudonyms or anonymous contributions.) +Use your real name (sorry, no pseudonyms or anonymous contributions.) If you set your `user.name` and `user.email` git configs, you can sign your commit automatically with `git commit -s`. @@ -280,45 +312,45 @@ format right away, but please do adjust your processes for future contributions. * Step 4: Propose yourself at a scheduled docker meeting in #docker-dev Don't forget: being a maintainer is a time investment. Make sure you -will have time to make yourself available. You don't have to be a +will have time to make yourself available. You don't have to be a maintainer to make a difference on the project! -### IRC Meetings +### IRC meetings -There are two monthly meetings taking place on #docker-dev IRC to accomodate all timezones. -Anybody can ask for a topic to be discussed prior to the meeting. +There are two monthly meetings taking place on #docker-dev IRC to accomodate all +timezones. Anybody can propose a topic for discussion prior to the meeting. If you feel the conversation is going off-topic, feel free to point it out. -For the exact dates and times, have a look at [the irc-minutes repo](https://github.com/docker/irc-minutes). -They also contain all the notes from previous meetings. +For the exact dates and times, have a look at [the irc-minutes +repo](https://github.com/docker/irc-minutes). The minutes also contain all the +notes from previous meetings. -## Docker Community Guidelines +## Docker community guidelines -We want to keep the Docker community awesome, growing and collaborative. We -need your help to keep it that way. To help with this we've come up with some -general guidelines for the community as a whole: +We want to keep the Docker community awesome, growing and collaborative. We need +your help to keep it that way. To help with this we've come up with some general +guidelines for the community as a whole: -* Be nice: Be courteous, respectful and polite to fellow community members: no - regional, racial, gender, or other abuse will be tolerated. We like nice people - way better than mean ones! +* Be nice: Be courteous, respectful and polite to fellow community members: + no regional, racial, gender, or other abuse will be tolerated. We like + nice people way better than mean ones! -* Encourage diversity and participation: Make everyone in our community - feel welcome, regardless of their background and the extent of their +* Encourage diversity and participation: Make everyone in our community feel + welcome, regardless of their background and the extent of their contributions, and do everything possible to encourage participation in our community. * Keep it legal: Basically, don't get us in trouble. Share only content that - you own, do not share private or sensitive information, and don't break the - law. + you own, do not share private or sensitive information, and don't break + the law. -* Stay on topic: Make sure that you are posting to the correct channel - and avoid off-topic discussions. Remember when you update an issue or - respond to an email you are potentially sending to a large number of - people. Please consider this before you update. Also remember that - nobody likes spam. +* Stay on topic: Make sure that you are posting to the correct channel and + avoid off-topic discussions. Remember when you update an issue or respond + to an email you are potentially sending to a large number of people. Please + consider this before you update. Also remember that nobody likes spam. -### Guideline Violations — 3 Strikes Method +### Guideline violations — 3 strikes method The point of this section is not to find opportunities to punish people, but we do need a fair way to deal with people who are making our community suck. @@ -337,20 +369,19 @@ do need a fair way to deal with people who are making our community suck. * Obvious spammers are banned on first occurrence. If we don't do this, we'll have spam all over the place. -* Violations are forgiven after 6 months of good behavior, and we won't - hold a grudge. +* Violations are forgiven after 6 months of good behavior, and we won't hold a + grudge. -* People who commit minor infractions will get some education, - rather than hammering them in the 3 strikes process. +* People who commit minor infractions will get some education, rather than + hammering them in the 3 strikes process. -* The rules apply equally to everyone in the community, no matter how - much you've contributed. +* The rules apply equally to everyone in the community, no matter how much + you've contributed. * Extreme violations of a threatening, abusive, destructive or illegal nature - will be addressed immediately and are not subject to 3 strikes or - forgiveness. + will be addressed immediately and are not subject to 3 strikes or forgiveness. * Contact abuse@docker.com to report abuse or appeal violations. In the case of - appeals, we know that mistakes happen, and we'll work with you to come up with - a fair solution if there has been a misunderstanding. + appeals, we know that mistakes happen, and we'll work with you to come up with a + fair solution if there has been a misunderstanding. diff --git a/Dockerfile b/Dockerfile index fdf35227fc..b064076137 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,7 +73,7 @@ RUN cd /usr/src/lxc \ && ldconfig # Install Go -ENV GO_VERSION 1.4.1 +ENV GO_VERSION 1.4.2 RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.src.tar.gz | tar -v -C /usr/local -xz \ && mkdir -p /go/bin ENV PATH /go/bin:/usr/local/go/bin:$PATH @@ -84,10 +84,8 @@ RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1 ENV DOCKER_CROSSPLATFORMS \ linux/386 linux/arm \ darwin/amd64 darwin/386 \ - freebsd/amd64 freebsd/386 freebsd/arm - -# TODO when https://jenkins.dockerproject.com/job/Windows/ is green, add windows back to the list above -# windows/amd64 windows/386 + freebsd/amd64 freebsd/386 freebsd/arm \ + windows/amd64 windows/386 # (set an explicit GOARM of 5 for maximum compatibility) ENV GOARM 5 @@ -109,14 +107,8 @@ RUN go get golang.org/x/tools/cmd/cover # TODO replace FPM with some very minimal debhelper stuff RUN gem install --no-rdoc --no-ri fpm --version 1.3.2 -# Get the "busybox" image source so we can build locally instead of pulling -RUN git clone -b buildroot-2014.02 https://github.com/jpetazzo/docker-busybox.git /docker-busybox - -# Get the "cirros" image source so we can import it instead of fetching it during tests -RUN curl -sSL -o /cirros.tar.gz https://github.com/ewindisch/docker-cirros/raw/1cded459668e8b9dbf4ef976c94c05add9bbd8e9/cirros-0.3.0-x86_64-lxc.tar.gz - # Install registry -ENV REGISTRY_COMMIT c448e0416925a9876d5576e412703c9b8b865e19 +ENV REGISTRY_COMMIT d957768537c5af40e4f4cd96871f7b2bde9e2923 RUN set -x \ && git clone https://github.com/docker/distribution.git /go/src/github.com/docker/distribution \ && (cd /go/src/github.com/docker/distribution && git checkout -q $REGISTRY_COMMIT) \ @@ -124,7 +116,7 @@ RUN set -x \ go build -o /go/bin/registry-v2 github.com/docker/distribution/cmd/registry # Get the "docker-py" source so we can run their integration tests -ENV DOCKER_PY_COMMIT aa19d7b6609c6676e8258f6b900dea2eda1dbe95 +ENV DOCKER_PY_COMMIT 91985b239764fe54714fa0a93d52aa362357d251 RUN git clone https://github.com/docker/docker-py.git /docker-py \ && cd /docker-py \ && git checkout -q $DOCKER_PY_COMMIT @@ -147,6 +139,16 @@ VOLUME /var/lib/docker WORKDIR /go/src/github.com/docker/docker ENV DOCKER_BUILDTAGS apparmor selinux btrfs_noversion +# Let us use a .bashrc file +RUN ln -sfv $PWD/.bashrc ~/.bashrc + +# Get useful and necessary Hub images so we can "docker load" locally instead of pulling +COPY contrib/download-frozen-image.sh /go/src/github.com/docker/docker/contrib/ +RUN ./contrib/download-frozen-image.sh /docker-frozen-images \ + busybox:latest@4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125 \ + hello-world:frozen@e45a5af57b00862e5ef5782a9925979a02ba2b12dff832fd0991335f4a11e5c5 +# see also "hack/make/.ensure-frozen-images" (which needs to be updated any time this list is) + # Install man page generator COPY vendor /go/src/github.com/docker/docker/vendor # (copy vendor/ because go-md2man needs golang.org/x/net) @@ -156,8 +158,11 @@ RUN set -x \ && go install -v github.com/cpuguy83/go-md2man # install toml validator -RUN git clone -b v0.1.0 https://github.com/BurntSushi/toml.git /go/src/github.com/BurntSushi/toml \ - && go install -v github.com/BurntSushi/toml/cmd/tomlv +ENV TOMLV_COMMIT 9baf8a8a9f2ed20a8e54160840c492f937eeaf9a +RUN set -x \ + && git clone https://github.com/BurntSushi/toml.git /go/src/github.com/BurntSushi/toml \ + && (cd /go/src/github.com/BurntSushi/toml && git checkout -q $TOMLV_COMMIT) \ + && go install -v github.com/BurntSushi/toml/cmd/tomlv # Wrap all commands in the "docker-in-docker" script to allow nested containers ENTRYPOINT ["hack/dind"] diff --git a/Dockerfile.simple b/Dockerfile.simple new file mode 100644 index 0000000000..12ee7dde30 --- /dev/null +++ b/Dockerfile.simple @@ -0,0 +1,34 @@ +# docker build -t docker:simple -f Dockerfile.simple . +# docker run --rm docker:simple hack/make.sh dynbinary +# docker run --rm --privileged docker:simple hack/dind hack/make.sh test-unit +# docker run --rm --privileged -v /var/lib/docker docker:simple hack/dind hack/make.sh dynbinary test-integration-cli + +# This represents the bare minimum required to build and test Docker. + +FROM debian:jessie + +# compile and runtime deps +# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#build-dependencies +# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + btrfs-tools \ + curl \ + gcc \ + git \ + golang \ + libdevmapper-dev \ + libsqlite3-dev \ + \ + ca-certificates \ + e2fsprogs \ + iptables \ + procps \ + xz-utils \ + \ + aufs-tools \ + lxc \ + && rm -rf /var/lib/apt/lists/* + +ENV AUTO_GOPATH 1 +WORKDIR /usr/src/docker +COPY . /usr/src/docker diff --git a/MAINTAINERS b/MAINTAINERS index ecad160303..04951bf459 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12,9 +12,9 @@ [Rules.maintainers] - title = "What is a maintainer?" + title = "What is a maintainer?" - text = """ + text = """ There are different types of maintainers, with different responsibilities, but all maintainers have 3 things in common: @@ -193,13 +193,18 @@ for each. # They should ask for any editorial change that makes the documentation more # consistent and easier to understand. # - # Once documentation is approved, a maintainer should make sure to remove this + # Once documentation is approved (see below), a maintainer should make sure to remove this # label and add the next one. close = "" 2-code-review = "requires more code changes" 1-design-review = "raises design concerns" 4-merge = "general case" + + # Docs approval + [Rules.review.docs-approval] + # Changes and additions to docs must be reviewed and approved (LGTM'd) by a minimum of two docs sub-project maintainers. + # If the docs change originates with a docs maintainer, only one additional LGTM is required (since we assume a docs maintainer approves of their own PR). # Merge [Rules.review.states.4-merge] @@ -337,13 +342,14 @@ made through a pull request. "unclejack", "crosbymichael", "erikh", + "estesp", "icecrime", "jfrazelle", "lk4d4", "tibor", "vbatts", "vieux", - "vish" + "vishh" ] @@ -403,6 +409,8 @@ made through a pull request. "fredlf", "james", "sven", + "spf13", + "mary" ] [Org.Subsystems.libcontainer] @@ -421,7 +429,10 @@ made through a pull request. "dmp42", "vbatts", "joffrey", - "samalba" + "samalba", + "sday", + "jlhawn", + "dmcg" ] [Org.Subsystems."build tools"] @@ -499,6 +510,16 @@ made through a pull request. Email = "dug@us.ibm.com" GitHub = "duglin" + [people.dmcg] + Name = "Derek McGowan" + Email = "derek@docker.com" + Github = "dmcgowan" + + [people.dmp42] + Name = "Olivier Gambier" + Email = "olivier@docker.com" + Github = "dmp42" + [people.ehazlett] Name = "Evan Hazlett" Email = "ejhazlett@gmail.com" @@ -514,6 +535,16 @@ made through a pull request. Email = "eric@windisch.us" GitHub = "ewindisch" + [people.estesp] + Name = "Phil Estes" + Email = "estesp@linux.vnet.ibm.com" + GitHub = "estesp" + + [people.fredlf] + Name = "Fred Lifton" + Email = "fred.lifton@docker.com" + GitHub = "fredlf" + [people.icecrime] Name = "Arnaud Porterie" Email = "arnaud@docker.com" @@ -524,11 +555,31 @@ made through a pull request. Email = "jess@docker.com" GitHub = "jfrazelle" + [people.jlhawn] + Name = "Josh Hawn" + Email = "josh.hawn@docker.com" + Github = "jlhawn" + + [people.joffrey] + Name = "Joffrey Fuhrer" + Email = "joffrey@docker.com" + Github = "shin-" + [people.lk4d4] Name = "Alexander Morozov" Email = "lk4d4@docker.com" GitHub = "lk4d4" + [people.mary] + Name = "Mary Anthony" + Email = "mary.anthony@docker.com" + GitHub = "moxiegirl" + + [people.sday] + Name = "Stephen Day" + Email = "stephen.day@docker.com" + Github = "stevvooe" + [people.shykes] Name = "Solomon Hykes" Email = "solomon@docker.com" @@ -584,7 +635,7 @@ made through a pull request. Email = "cristian.staretu@gmail.com" GitHub = "unclejack" - [people.vish] + [people.vishh] Name = "Vishnu Kannan" Email = "vishnuk@google.com" GitHub = "vishh" diff --git a/Makefile b/Makefile index 266fa2a9a4..9bf1b16c94 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,11 @@ DOCKER_ENVS := \ -e TIMEOUT # note: we _cannot_ add "-e DOCKER_BUILDTAGS" here because even if it's unset in the shell, that would shadow the "ENV DOCKER_BUILDTAGS" set in our Dockerfile, which is very important for our official builds -# to allow `make BINDDIR=. shell` or `make BINDDIR= test` +# to allow `make BIND_DIR=. shell` or `make BIND_DIR= test` # (default to no bind mount if DOCKER_HOST is set) -BINDDIR := $(if $(DOCKER_HOST),,bundles) -DOCKER_MOUNT := $(if $(BINDDIR),-v "$(CURDIR)/$(BINDDIR):/go/src/github.com/docker/docker/$(BINDDIR)") +# note: BINDDIR is supported for backwards-compatibility here +BIND_DIR := $(if $(BINDDIR),$(BINDDIR),$(if $(DOCKER_HOST),,bundles)) +DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)") # to allow `make DOCSDIR=docs docs-shell` (to create a bind mount in docs) DOCS_MOUNT := $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR)) @@ -53,7 +54,9 @@ docs-shell: docs-build $(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" bash docs-release: docs-build - $(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT -e DISTRIBUTION_ID "$(DOCKER_DOCS_IMAGE)" ./release.sh + $(DOCKER_RUN_DOCS) -e OPTIONS -e BUILD_ROOT -e DISTRIBUTION_ID \ + -v $(CURDIR)/docs/awsconfig:/docs/awsconfig \ + "$(DOCKER_DOCS_IMAGE)" ./release.sh docs-test: docs-build $(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)" ./test.sh @@ -83,11 +86,11 @@ build: bundles docker build -t "$(DOCKER_IMAGE)" . docs-build: - ( git remote | grep -v upstream ) || git diff --name-status upstream/release..upstream/docs docs/ > docs/changed-files cp ./VERSION docs/VERSION echo "$(GIT_BRANCH)" > docs/GIT_BRANCH - echo "$(AWS_S3_BUCKET)" > docs/AWS_S3_BUCKET +# echo "$(AWS_S3_BUCKET)" > docs/AWS_S3_BUCKET echo "$(GITCOMMIT)" > docs/GITCOMMIT + docker pull docs/base docker build -t "$(DOCKER_DOCS_IMAGE)" docs bundles: diff --git a/NOTICE b/NOTICE index d0e0639a5a..435ace7f01 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ Docker -Copyright 2012-2014 Docker, Inc. +Copyright 2012-2015 Docker, Inc. This product includes software developed at Docker, Inc. (http://www.docker.com). diff --git a/README.md b/README.md index 2ef78b78ce..079713ced9 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ It benefits directly from the experience accumulated over several years of large-scale operation and support of hundreds of thousands of applications and databases. -![Docker L](docs/theme/mkdocs/images/docker-logo-compressed.png "Docker") +![Docker L](docs/sources/static_files/docker-logo-compressed.png "Docker") ## Security Disclosure @@ -173,6 +173,8 @@ Under the hood, Docker is built on the following components: [namespacing](http://blog.dotcloud.com/under-the-hood-linux-kernels-on-dotcloud-part) capabilities of the Linux kernel; * The [Go](http://golang.org) programming language. +* The [Docker Image Specification] (https://github.com/docker/docker/blob/master/image/spec/v1.md) +* The [Libcontainer Specification] (https://github.com/docker/libcontainer/blob/master/SPEC.md) Contributing to Docker ====================== @@ -181,12 +183,14 @@ Contributing to Docker [![Jenkins Build Status](https://jenkins.dockerproject.com/job/Docker%20Master/badge/icon)](https://jenkins.dockerproject.com/job/Docker%20Master/) Want to hack on Docker? Awesome! We have [instructions to help you get -started](CONTRIBUTING.md). If you'd like to contribute to the -documentation, please take a look at this [README.md](https://github.com/docker/docker/blob/master/docs/README.md). +started contributing code or documentation.](https://docs.docker.com/project/who-written-for/). These instructions are probably not perfect, please let us know if anything feels wrong or incomplete. Better yet, submit a PR and improve them yourself. +Getting the development builds +============================== + Want to run Docker from a master build? You can download master builds at [master.dockerproject.com](https://master.dockerproject.com). They are updated with each commit merged into the master branch. @@ -231,12 +235,12 @@ Docker platform to broaden its application and utility. If you know of another project underway that should be listed here, please help us keep this list up-to-date by submitting a PR. -* [Docker Registry](https://github.com/docker/docker-registry): Registry -server for Docker (hosting/delivering of repositories and images) +* [Docker Registry](https://github.com/docker/distribution): Registry +server for Docker (hosting/delivery of repositories and images) * [Docker Machine](https://github.com/docker/machine): Machine management for a container-centric world * [Docker Swarm](https://github.com/docker/swarm): A Docker-native clustering system -* [Docker Compose, aka Fig](https://github.com/docker/fig): -Multi-container application management +* [Docker Compose](https://github.com/docker/compose) (formerly Fig): +Define and run multi-container apps diff --git a/VERSION b/VERSION index bc80560fad..59b9db0c75 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.0 +1.5.0-dev diff --git a/api/MAINTAINERS b/api/MAINTAINERS deleted file mode 100644 index 96abeae570..0000000000 --- a/api/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -Victor Vieux (@vieux) -Jessie Frazelle (@jfrazelle) diff --git a/api/client/cli.go b/api/client/cli.go index 5e1ccb3291..e0ab4191bf 100644 --- a/api/client/cli.go +++ b/api/client/cli.go @@ -14,6 +14,7 @@ import ( "text/template" "time" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/term" "github.com/docker/docker/registry" @@ -92,10 +93,13 @@ func (cli *DockerCli) Subcmd(name, signature, description string, exitOnError bo flags := flag.NewFlagSet(name, errorHandling) flags.Usage = func() { options := "" - if flags.FlagCountUndeprecated() > 0 { - options = "[OPTIONS] " + if signature != "" { + signature = " " + signature } - fmt.Fprintf(cli.out, "\nUsage: docker %s %s%s\n\n%s\n\n", name, options, signature, description) + if flags.FlagCountUndeprecated() > 0 { + options = " [OPTIONS]" + } + fmt.Fprintf(cli.out, "\nUsage: docker %s%s%s\n\n%s\n\n", name, options, signature, description) flags.SetOutput(cli.out) flags.PrintDefaults() os.Exit(0) @@ -104,7 +108,7 @@ func (cli *DockerCli) Subcmd(name, signature, description string, exitOnError bo } func (cli *DockerCli) LoadConfigFile() (err error) { - cli.configFile, err = registry.LoadConfig(os.Getenv("HOME")) + cli.configFile, err = registry.LoadConfig(homedir.Get()) if err != nil { fmt.Fprintf(cli.err, "WARNING: %s\n", err) } @@ -133,19 +137,12 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, keyFile string, proto, a if tlsConfig != nil { scheme = "https" } - if in != nil { - if file, ok := in.(*os.File); ok { - inFd = file.Fd() - isTerminalIn = term.IsTerminal(inFd) - } + inFd, isTerminalIn = term.GetFdInfo(in) } if out != nil { - if file, ok := out.(*os.File); ok { - outFd = file.Fd() - isTerminalOut = term.IsTerminal(outFd) - } + outFd, isTerminalOut = term.GetFdInfo(out) } if err == nil { @@ -154,7 +151,6 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, keyFile string, proto, a // The transport is created here for reuse during the client session tr := &http.Transport{ - Proxy: http.ProxyFromEnvironment, TLSClientConfig: tlsConfig, } @@ -167,6 +163,7 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, keyFile string, proto, a return net.DialTimeout(proto, addr, timeout) } } else { + tr.Proxy = http.ProxyFromEnvironment tr.Dial = (&net.Dialer{Timeout: timeout}).Dial } diff --git a/api/client/commands.go b/api/client/commands.go index c4ce5e01f3..2b837596e8 100644 --- a/api/client/commands.go +++ b/api/client/commands.go @@ -26,17 +26,21 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" - "github.com/docker/docker/api/stats" - "github.com/docker/docker/dockerversion" + "github.com/docker/docker/api/types" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/engine" "github.com/docker/docker/graph" "github.com/docker/docker/nat" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/fileutils" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" + "github.com/docker/docker/pkg/networkfs/resolvconf" "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/parsers/filters" + "github.com/docker/docker/pkg/progressreader" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/symlink" @@ -79,13 +83,17 @@ func (cli *DockerCli) CmdHelp(args ...string) error { func (cli *DockerCli) CmdBuild(args ...string) error { cmd := cli.Subcmd("build", "PATH | URL | -", "Build a new image from the source code at PATH", true) - tag := cmd.String([]string{"t", "-tag"}, "", "Repository name (and optionally a tag) to be applied to the resulting image in case of success") + tag := cmd.String([]string{"t", "-tag"}, "", "Repository name (and optionally a tag) for the image") suppressOutput := cmd.Bool([]string{"q", "-quiet"}, false, "Suppress the verbose output generated by the containers") noCache := cmd.Bool([]string{"#no-cache", "-no-cache"}, false, "Do not use cache when building the image") rm := cmd.Bool([]string{"#rm", "-rm"}, true, "Remove intermediate containers after a successful build") - forceRm := cmd.Bool([]string{"-force-rm"}, false, "Always remove intermediate containers, even after unsuccessful builds") + forceRm := cmd.Bool([]string{"-force-rm"}, false, "Always remove intermediate containers") pull := cmd.Bool([]string{"-pull"}, false, "Always attempt to pull a newer version of the image") - dockerfileName := cmd.String([]string{"f", "-file"}, "", "Name of the Dockerfile(Default is 'Dockerfile' at context root)") + dockerfileName := cmd.String([]string{"f", "-file"}, "", "Name of the Dockerfile (Default is 'PATH/Dockerfile')") + flMemoryString := cmd.String([]string{"m", "-memory"}, "", "Memory limit") + flMemorySwap := cmd.String([]string{"-memory-swap"}, "", "Total memory (memory + swap), '-1' to disable swap") + flCpuShares := cmd.Int64([]string{"c", "-cpu-shares"}, 0, "CPU shares (relative weight)") + flCpuSetCpus := cmd.String([]string{"-cpuset-cpus"}, "", "CPUs in which to allow execution (0-3, 0,1)") cmd.Require(flag.Exact, 1) @@ -112,9 +120,10 @@ func (cli *DockerCli) CmdBuild(args ...string) error { if err != nil { return fmt.Errorf("failed to read Dockerfile from STDIN: %v", err) } - if *dockerfileName == "" { - *dockerfileName = api.DefaultDockerfileName - } + + // -f option has no meaning when we're reading it from stdin, + // so just use our default Dockerfile name + *dockerfileName = api.DefaultDockerfileName context, err = archive.Generate(*dockerfileName, string(dockerfile)) } else { context = ioutil.NopCloser(buf) @@ -153,11 +162,20 @@ func (cli *DockerCli) CmdBuild(args ...string) error { if *dockerfileName == "" { // No -f/--file was specified so use the default *dockerfileName = api.DefaultDockerfileName - filename = path.Join(absRoot, *dockerfileName) + filename = filepath.Join(absRoot, *dockerfileName) + + // Just to be nice ;-) look for 'dockerfile' too but only + // use it if we found it, otherwise ignore this check + if _, err = os.Lstat(filename); os.IsNotExist(err) { + tmpFN := path.Join(absRoot, strings.ToLower(*dockerfileName)) + if _, err = os.Lstat(tmpFN); err == nil { + *dockerfileName = strings.ToLower(*dockerfileName) + filename = tmpFN + } + } } origDockerfile := *dockerfileName // used for error msg - if filename, err = filepath.Abs(filename); err != nil { return err } @@ -173,6 +191,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error { if err != nil { return err } + // And canonicalize dockerfile name to a platform-independent one + *dockerfileName, err = archive.CanonicalTarNameForPath(*dockerfileName) + if err != nil { + return fmt.Errorf("Cannot canonicalize dockerfile path %s: %v", dockerfileName, err) + } if _, err = os.Lstat(filename); os.IsNotExist(err) { return fmt.Errorf("Cannot locate Dockerfile: %s", origDockerfile) @@ -209,12 +232,48 @@ func (cli *DockerCli) CmdBuild(args ...string) error { return err } } + + // windows: show error message about modified file permissions + // FIXME: this is not a valid warning when the daemon is running windows. should be removed once docker engine for windows can build. + if runtime.GOOS == "windows" { + log.Warn(`SECURITY WARNING: You are building a Docker image from Windows against a Linux Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.`) + } + var body io.Reader // Setup an upload progress bar // FIXME: ProgressReader shouldn't be this annoying to use if context != nil { sf := utils.NewStreamFormatter(false) - body = utils.ProgressReader(context, 0, cli.out, sf, true, "", "Sending build context to Docker daemon") + body = progressreader.New(progressreader.Config{ + In: context, + Out: cli.out, + Formatter: sf, + NewLines: true, + ID: "", + Action: "Sending build context to Docker daemon", + }) + } + + var memory int64 + if *flMemoryString != "" { + parsedMemory, err := units.RAMInBytes(*flMemoryString) + if err != nil { + return err + } + memory = parsedMemory + } + + var memorySwap int64 + if *flMemorySwap != "" { + if *flMemorySwap == "-1" { + memorySwap = -1 + } else { + parsedMemorySwap, err := units.RAMInBytes(*flMemorySwap) + if err != nil { + return err + } + memorySwap = parsedMemorySwap + } } // Send the build context v := &url.Values{} @@ -257,6 +316,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error { v.Set("pull", "1") } + v.Set("cpusetcpus", *flCpuSetCpus) + v.Set("cpushares", strconv.FormatInt(*flCpuShares, 10)) + v.Set("memory", strconv.FormatInt(memory, 10)) + v.Set("memswap", strconv.FormatInt(memorySwap, 10)) + v.Set("dockerfile", *dockerfileName) cli.LoadConfigFile() @@ -284,7 +348,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error { // 'docker login': login / register a user to registry service. func (cli *DockerCli) CmdLogin(args ...string) error { - cmd := cli.Subcmd("login", "[SERVER]", "Register or log in to a Docker registry server, if no server is specified \""+registry.IndexServerAddress()+"\" is the default.", true) + cmd := cli.Subcmd("login", "[SERVER]", "Register or log in to a Docker registry server, if no server is\nspecified \""+registry.IndexServerAddress()+"\" is the default.", true) cmd.Require(flag.Max, 1) var username, password, email string @@ -327,6 +391,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { if username == "" { promptDefault("Username", authconfig.Username) username = readInput(cli.in, cli.out) + username = strings.Trim(username, " ") if username == "" { username = authconfig.Username } @@ -361,7 +426,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { } else { // However, if they don't override the username use the // password or email from the cmd line if specified. IOW, allow - // then to change/overide them. And if not specified, just + // then to change/override them. And if not specified, just // use what's in the config file if password == "" { password = authconfig.Password @@ -388,10 +453,12 @@ func (cli *DockerCli) CmdLogin(args ...string) error { var out2 engine.Env err = out2.Decode(stream) if err != nil { - cli.configFile, _ = registry.LoadConfig(os.Getenv("HOME")) + cli.configFile, _ = registry.LoadConfig(homedir.Get()) return err } registry.SaveConfig(cli.configFile) + fmt.Fprintf(cli.out, "WARNING: login credentials saved in %s.\n", path.Join(homedir.Get(), registry.CONFIGFILE)) + if out2.Get("Status") != "" { fmt.Fprintf(cli.out, "%s\n", out2.Get("Status")) } @@ -400,7 +467,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { // log out from a Docker registry func (cli *DockerCli) CmdLogout(args ...string) error { - cmd := cli.Subcmd("logout", "[SERVER]", "Log out from a Docker registry, if no server is specified \""+registry.IndexServerAddress()+"\" is the default.", true) + cmd := cli.Subcmd("logout", "[SERVER]", "Log out from a Docker registry, if no server is\nspecified \""+registry.IndexServerAddress()+"\" is the default.", true) cmd.Require(flag.Max, 1) utils.ParseFlags(cmd, args, false) @@ -482,6 +549,7 @@ func (cli *DockerCli) CmdVersion(args ...string) error { } fmt.Fprintf(cli.out, "Go version (server): %s\n", remoteVersion.Get("GoVersion")) fmt.Fprintf(cli.out, "Git commit (server): %s\n", remoteVersion.Get("GitCommit")) + fmt.Fprintf(cli.out, "OS/Arch (server): %s/%s\n", remoteVersion.Get("Os"), remoteVersion.Get("Arch")) return nil } @@ -559,6 +627,14 @@ func (cli *DockerCli) CmdInfo(args ...string) error { if remoteInfo.Exists("NGoroutines") { fmt.Fprintf(cli.out, "Goroutines: %d\n", remoteInfo.GetInt("NGoroutines")) } + if remoteInfo.Exists("SystemTime") { + t, err := remoteInfo.GetTime("SystemTime") + if err != nil { + log.Errorf("Error reading system time: %v", err) + } else { + fmt.Fprintf(cli.out, "System Time: %s\n", t.Format(time.UnixDate)) + } + } if remoteInfo.Exists("NEventsListener") { fmt.Fprintf(cli.out, "EventsListeners: %d\n", remoteInfo.GetInt("NEventsListener")) } @@ -572,7 +648,15 @@ func (cli *DockerCli) CmdInfo(args ...string) error { fmt.Fprintf(cli.out, "Docker Root Dir: %s\n", root) } } - + if remoteInfo.Exists("HttpProxy") { + fmt.Fprintf(cli.out, "Http Proxy: %s\n", remoteInfo.Get("HttpProxy")) + } + if remoteInfo.Exists("HttpsProxy") { + fmt.Fprintf(cli.out, "Https Proxy: %s\n", remoteInfo.Get("HttpsProxy")) + } + if remoteInfo.Exists("NoProxy") { + fmt.Fprintf(cli.out, "No Proxy: %s\n", remoteInfo.Get("NoProxy")) + } if len(remoteInfo.GetList("IndexServerAddress")) != 0 { cli.LoadConfigFile() u := cli.configFile.Configs[remoteInfo.Get("IndexServerAddress")].Username @@ -601,8 +685,8 @@ func (cli *DockerCli) CmdInfo(args ...string) error { } func (cli *DockerCli) CmdStop(args ...string) error { - cmd := cli.Subcmd("stop", "CONTAINER [CONTAINER...]", "Stop a running container by sending SIGTERM and then SIGKILL after a grace period", true) - nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to wait for the container to stop before killing it. Default is 10 seconds.") + cmd := cli.Subcmd("stop", "CONTAINER [CONTAINER...]", "Stop a running container by sending SIGTERM and then SIGKILL after a\ngrace period", true) + nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Seconds to wait for stop before killing it") cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -625,7 +709,7 @@ func (cli *DockerCli) CmdStop(args ...string) error { func (cli *DockerCli) CmdRestart(args ...string) error { cmd := cli.Subcmd("restart", "CONTAINER [CONTAINER...]", "Restart a running container", true) - nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default is 10 seconds.") + nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Seconds to wait for stop before killing the container") cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -677,8 +761,8 @@ func (cli *DockerCli) CmdStart(args ...string) error { cErr chan error tty bool - cmd = cli.Subcmd("start", "CONTAINER [CONTAINER...]", "Restart a stopped container", true) - attach = cmd.Bool([]string{"a", "-attach"}, false, "Attach container's STDOUT and STDERR and forward all signals to the process") + cmd = cli.Subcmd("start", "CONTAINER [CONTAINER...]", "Start one or more stopped containers", true) + attach = cmd.Bool([]string{"a", "-attach"}, false, "Attach STDOUT/STDERR and forward signals") openStdin = cmd.Bool([]string{"i", "-interactive"}, false, "Attach container's STDIN") ) @@ -686,6 +770,16 @@ func (cli *DockerCli) CmdStart(args ...string) error { utils.ParseFlags(cmd, args, true) hijacked := make(chan io.Closer) + // Block the return until the chan gets closed + defer func() { + log.Debugf("CmdStart() returned, defer waiting for hijack to finish.") + if _, ok := <-hijacked; ok { + log.Errorf("Hijack did not finish (chan still open)") + } + if *openStdin || *attach { + cli.in.Close() + } + }() if *attach || *openStdin { if cmd.NArg() > 1 { @@ -742,25 +836,26 @@ func (cli *DockerCli) CmdStart(args ...string) error { return err } } - var encounteredError error for _, name := range cmd.Args() { _, _, err := readBody(cli.call("POST", "/containers/"+name+"/start", nil, false)) if err != nil { if !*attach && !*openStdin { + // attach and openStdin is false means it could be starting multiple containers + // when a container start failed, show the error message and start next fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to start one or more containers") + } else { + encounteredError = err } - encounteredError = fmt.Errorf("Error: failed to start one or more containers") } else { if !*attach && !*openStdin { fmt.Fprintf(cli.out, "%s\n", name) } } } + if encounteredError != nil { - if *openStdin || *attach { - cli.in.Close() - } return encounteredError } @@ -785,8 +880,8 @@ func (cli *DockerCli) CmdStart(args ...string) error { } func (cli *DockerCli) CmdUnpause(args ...string) error { - cmd := cli.Subcmd("unpause", "CONTAINER", "Unpause all processes within a container", true) - cmd.Require(flag.Exact, 1) + cmd := cli.Subcmd("unpause", "CONTAINER [CONTAINER...]", "Unpause all processes within a container", true) + cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, false) var encounteredError error @@ -802,8 +897,8 @@ func (cli *DockerCli) CmdUnpause(args ...string) error { } func (cli *DockerCli) CmdPause(args ...string) error { - cmd := cli.Subcmd("pause", "CONTAINER", "Pause all processes within a container", true) - cmd.Require(flag.Exact, 1) + cmd := cli.Subcmd("pause", "CONTAINER [CONTAINER...]", "Pause all processes within a container", true) + cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, false) var encounteredError error @@ -840,7 +935,7 @@ func (cli *DockerCli) CmdRename(args ...string) error { func (cli *DockerCli) CmdInspect(args ...string) error { cmd := cli.Subcmd("inspect", "CONTAINER|IMAGE [CONTAINER|IMAGE...]", "Return low-level information on a container or image", true) - tmplStr := cmd.String([]string{"f", "#format", "-format"}, "", "Format the output using the given go template.") + tmplStr := cmd.String([]string{"f", "#format", "-format"}, "", "Format the output using the given go template") cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -862,6 +957,12 @@ func (cli *DockerCli) CmdInspect(args ...string) error { for _, name := range cmd.Args() { obj, _, err := readBody(cli.call("GET", "/containers/"+name+"/json", nil, false)) if err != nil { + if strings.Contains(err.Error(), "Too many") { + fmt.Fprintf(cli.err, "Error: %v", err) + status = 1 + continue + } + obj, _, err = readBody(cli.call("GET", "/images/"+name+"/json", nil, false)) if err != nil { if strings.Contains(err.Error(), "No such") { @@ -947,7 +1048,7 @@ func (cli *DockerCli) CmdTop(args ...string) error { } func (cli *DockerCli) CmdPort(args ...string) error { - cmd := cli.Subcmd("port", "CONTAINER [PRIVATE_PORT[/PROTO]]", "List port mappings for the CONTAINER, or lookup the public-facing port that is NAT-ed to the PRIVATE_PORT", true) + cmd := cli.Subcmd("port", "CONTAINER [PRIVATE_PORT[/PROTO]]", "List port mappings for the CONTAINER, or lookup the public-facing port that\nis NAT-ed to the PRIVATE_PORT", true) cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -1068,7 +1169,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { if *noTrunc { fmt.Fprintf(w, "%s\t", outID) } else { - fmt.Fprintf(w, "%s\t", utils.TruncateID(outID)) + fmt.Fprintf(w, "%s\t", common.TruncateID(outID)) } fmt.Fprintf(w, "%s ago\t", units.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0)))) @@ -1083,7 +1184,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { if *noTrunc { fmt.Fprintln(w, outID) } else { - fmt.Fprintln(w, utils.TruncateID(outID)) + fmt.Fprintln(w, common.TruncateID(outID)) } } } @@ -1094,7 +1195,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { func (cli *DockerCli) CmdRm(args ...string) error { cmd := cli.Subcmd("rm", "CONTAINER [CONTAINER...]", "Remove one or more containers", true) v := cmd.Bool([]string{"v", "-volumes"}, false, "Remove the volumes associated with the container") - link := cmd.Bool([]string{"l", "#link", "-link"}, false, "Remove the specified link and not the underlying container") + link := cmd.Bool([]string{"l", "#link", "-link"}, false, "Remove the specified link") force := cmd.Bool([]string{"f", "-force"}, false, "Force the removal of a running container (uses SIGKILL)") cmd.Require(flag.Min, 1) @@ -1146,7 +1247,9 @@ func (cli *DockerCli) CmdKill(args ...string) error { } func (cli *DockerCli) CmdImport(args ...string) error { - cmd := cli.Subcmd("import", "URL|- [REPOSITORY[:TAG]]", "Create an empty filesystem image and import the contents of the tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then optionally tag it.", true) + cmd := cli.Subcmd("import", "URL|- [REPOSITORY[:TAG]]", "Create an empty filesystem image and import the contents of the\ntarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then\noptionally tag it.", true) + flChanges := opts.NewListOpts(nil) + cmd.Var(&flChanges, []string{"c", "-change"}, "Apply Dockerfile instruction to the created image") cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -1159,7 +1262,9 @@ func (cli *DockerCli) CmdImport(args ...string) error { v.Set("fromSrc", src) v.Set("repo", repository) - + for _, change := range flChanges.GetAll() { + v.Add("changes", change) + } if cmd.NArg() == 3 { fmt.Fprintf(cli.err, "[DEPRECATED] The format 'URL|- [REPOSITORY [TAG]]' has been deprecated. Please use URL|- [REPOSITORY[:TAG]]\n") v.Set("tag", cmd.Arg(2)) @@ -1245,7 +1350,7 @@ func (cli *DockerCli) CmdPush(args ...string) error { } func (cli *DockerCli) CmdPull(args ...string) error { - cmd := cli.Subcmd("pull", "NAME[:TAG]", "Pull an image or a repository from the registry", true) + cmd := cli.Subcmd("pull", "NAME[:TAG|@DIGEST]", "Pull an image or a repository from the registry", true) allTags := cmd.Bool([]string{"a", "-all-tags"}, false, "Download all tagged images in the repository") cmd.Require(flag.Exact, 1) @@ -1258,7 +1363,7 @@ func (cli *DockerCli) CmdPull(args ...string) error { ) taglessRemote, tag := parsers.ParseRepositoryTag(remote) if tag == "" && !*allTags { - newRemote = taglessRemote + ":" + graph.DEFAULTTAG + newRemote = utils.ImageReference(taglessRemote, graph.DEFAULTTAG) } if tag != "" && *allTags { return fmt.Errorf("tag can't be used with --all-tags/-a") @@ -1309,14 +1414,15 @@ func (cli *DockerCli) CmdPull(args ...string) error { func (cli *DockerCli) CmdImages(args ...string) error { cmd := cli.Subcmd("images", "[REPOSITORY]", "List images", true) quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only show numeric IDs") - all := cmd.Bool([]string{"a", "-all"}, false, "Show all images (by default filter out the intermediate image layers)") + all := cmd.Bool([]string{"a", "-all"}, false, "Show all images (default hides intermediate images)") noTrunc := cmd.Bool([]string{"#notrunc", "-no-trunc"}, false, "Don't truncate output") + showDigests := cmd.Bool([]string{"-digests"}, false, "Show digests") // FIXME: --viz and --tree are deprecated. Remove them in a future version. flViz := cmd.Bool([]string{"#v", "#viz", "#-viz"}, false, "Output graph in graphviz format") flTree := cmd.Bool([]string{"#t", "#tree", "#-tree"}, false, "Output graph in tree format") flFilter := opts.NewListOpts(nil) - cmd.Var(&flFilter, []string{"f", "-filter"}, "Provide filter values (i.e., 'dangling=true')") + cmd.Var(&flFilter, []string{"f", "-filter"}, "Filter output based on conditions provided") cmd.Require(flag.Max, 1) utils.ParseFlags(cmd, args, true) @@ -1377,7 +1483,7 @@ func (cli *DockerCli) CmdImages(args ...string) error { } if matchName != "" { - if matchName == image.Get("Id") || matchName == utils.TruncateID(image.Get("Id")) { + if matchName == image.Get("Id") || matchName == common.TruncateID(image.Get("Id")) { startImage = image } @@ -1437,20 +1543,46 @@ func (cli *DockerCli) CmdImages(args ...string) error { w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0) if !*quiet { - fmt.Fprintln(w, "REPOSITORY\tTAG\tIMAGE ID\tCREATED\tVIRTUAL SIZE") + if *showDigests { + fmt.Fprintln(w, "REPOSITORY\tTAG\tDIGEST\tIMAGE ID\tCREATED\tVIRTUAL SIZE") + } else { + fmt.Fprintln(w, "REPOSITORY\tTAG\tIMAGE ID\tCREATED\tVIRTUAL SIZE") + } } for _, out := range outs.Data { - for _, repotag := range out.GetList("RepoTags") { + outID := out.Get("Id") + if !*noTrunc { + outID = common.TruncateID(outID) + } - repo, tag := parsers.ParseRepositoryTag(repotag) - outID := out.Get("Id") - if !*noTrunc { - outID = utils.TruncateID(outID) + repoTags := out.GetList("RepoTags") + repoDigests := out.GetList("RepoDigests") + + if len(repoTags) == 1 && repoTags[0] == ":" && len(repoDigests) == 1 && repoDigests[0] == "@" { + // dangling image - clear out either repoTags or repoDigsts so we only show it once below + repoDigests = []string{} + } + + // combine the tags and digests lists + tagsAndDigests := append(repoTags, repoDigests...) + for _, repoAndRef := range tagsAndDigests { + repo, ref := parsers.ParseRepositoryTag(repoAndRef) + // default tag and digest to none - if there's a value, it'll be set below + tag := "" + digest := "" + if utils.DigestReference(ref) { + digest = ref + } else { + tag = ref } if !*quiet { - fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\n", repo, tag, outID, units.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0))), units.HumanSize(float64(out.GetInt64("VirtualSize")))) + if *showDigests { + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s ago\t%s\n", repo, tag, digest, outID, units.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0))), units.HumanSize(float64(out.GetInt64("VirtualSize")))) + } else { + fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\n", repo, tag, outID, units.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0))), units.HumanSize(float64(out.GetInt64("VirtualSize")))) + } } else { fmt.Fprintln(w, outID) } @@ -1501,8 +1633,8 @@ func (cli *DockerCli) printVizNode(noTrunc bool, image *engine.Env, prefix strin imageID = image.Get("Id") parentID = image.Get("ParentId") } else { - imageID = utils.TruncateID(image.Get("Id")) - parentID = utils.TruncateID(image.Get("ParentId")) + imageID = common.TruncateID(image.Get("Id")) + parentID = common.TruncateID(image.Get("ParentId")) } if parentID == "" { fmt.Fprintf(cli.out, " base -> \"%s\" [style=invis]\n", imageID) @@ -1521,7 +1653,7 @@ func (cli *DockerCli) printTreeNode(noTrunc bool, image *engine.Env, prefix stri if noTrunc { imageID = image.Get("Id") } else { - imageID = utils.TruncateID(image.Get("Id")) + imageID = common.TruncateID(image.Get("Id")) } fmt.Fprintf(cli.out, "%s%s Virtual Size: %s", prefix, imageID, units.HumanSize(float64(image.GetInt64("VirtualSize")))) @@ -1542,17 +1674,17 @@ func (cli *DockerCli) CmdPs(args ...string) error { cmd = cli.Subcmd("ps", "", "List containers", true) quiet = cmd.Bool([]string{"q", "-quiet"}, false, "Only display numeric IDs") size = cmd.Bool([]string{"s", "-size"}, false, "Display total file sizes") - all = cmd.Bool([]string{"a", "-all"}, false, "Show all containers. Only running containers are shown by default.") + all = cmd.Bool([]string{"a", "-all"}, false, "Show all containers (default shows just running)") noTrunc = cmd.Bool([]string{"#notrunc", "-no-trunc"}, false, "Don't truncate output") - nLatest = cmd.Bool([]string{"l", "-latest"}, false, "Show only the latest created container, include non-running ones.") - since = cmd.String([]string{"#sinceId", "#-since-id", "-since"}, "", "Show only containers created since Id or Name, include non-running ones.") - before = cmd.String([]string{"#beforeId", "#-before-id", "-before"}, "", "Show only container created before Id or Name, include non-running ones.") - last = cmd.Int([]string{"n"}, -1, "Show n last created containers, include non-running ones.") + nLatest = cmd.Bool([]string{"l", "-latest"}, false, "Show the latest created container, include non-running") + since = cmd.String([]string{"#sinceId", "#-since-id", "-since"}, "", "Show created since Id or Name, include non-running") + before = cmd.String([]string{"#beforeId", "#-before-id", "-before"}, "", "Show only container created before Id or Name") + last = cmd.Int([]string{"n"}, -1, "Show n last created containers, include non-running") flFilter = opts.NewListOpts(nil) ) cmd.Require(flag.Exact, 0) - cmd.Var(&flFilter, []string{"f", "-filter"}, "Provide filter values. Valid filters:\nexited= - containers with exit code of \nstatus=(restarting|running|paused|exited)") + cmd.Var(&flFilter, []string{"f", "-filter"}, "Filter output based on conditions provided") utils.ParseFlags(cmd, args, true) if *last == -1 && *nLatest { @@ -1629,7 +1761,7 @@ func (cli *DockerCli) CmdPs(args ...string) error { outID := out.Get("Id") if !*noTrunc { - outID = utils.TruncateID(outID) + outID = common.TruncateID(outID) } if *quiet { @@ -1693,6 +1825,8 @@ func (cli *DockerCli) CmdCommit(args ...string) error { flPause := cmd.Bool([]string{"p", "-pause"}, true, "Pause container during commit") flComment := cmd.String([]string{"m", "-message"}, "", "Commit message") flAuthor := cmd.String([]string{"a", "#author", "-author"}, "", "Author (e.g., \"John Hannibal Smith \")") + flChanges := opts.NewListOpts(nil) + cmd.Var(&flChanges, []string{"c", "-change"}, "Apply Dockerfile instruction to the created image") // FIXME: --run is deprecated, it will be replaced with inline Dockerfile commands. flConfig := cmd.String([]string{"#run", "#-run"}, "", "This option is deprecated and will be removed in a future version in favor of inline Dockerfile-compatible commands") cmd.Require(flag.Max, 2) @@ -1717,6 +1851,9 @@ func (cli *DockerCli) CmdCommit(args ...string) error { v.Set("tag", tag) v.Set("comment", *flComment) v.Set("author", *flAuthor) + for _, change := range flChanges.GetAll() { + v.Add("changes", change) + } if *flPause != true { v.Set("pause", "0") @@ -1749,7 +1886,7 @@ func (cli *DockerCli) CmdEvents(args ...string) error { since := cmd.String([]string{"#since", "-since"}, "", "Show all events created since timestamp") until := cmd.String([]string{"-until"}, "", "Stream events until this timestamp") flFilter := opts.NewListOpts(nil) - cmd.Var(&flFilter, []string{"f", "-filter"}, "Provide filter values (i.e., 'event=stop')") + cmd.Var(&flFilter, []string{"f", "-filter"}, "Filter output based on conditions provided") cmd.Require(flag.Exact, 0) utils.ParseFlags(cmd, args, true) @@ -1800,14 +1937,40 @@ func (cli *DockerCli) CmdEvents(args ...string) error { } func (cli *DockerCli) CmdExport(args ...string) error { - cmd := cli.Subcmd("export", "CONTAINER", "Export the contents of a filesystem as a tar archive to STDOUT", true) + cmd := cli.Subcmd("export", "CONTAINER", "Export a filesystem as a tar archive (streamed to STDOUT by default)", true) + outfile := cmd.String([]string{"o", "-output"}, "", "Write to a file, instead of STDOUT") cmd.Require(flag.Exact, 1) utils.ParseFlags(cmd, args, true) - if err := cli.stream("GET", "/containers/"+cmd.Arg(0)+"/export", nil, cli.out, nil); err != nil { - return err + var ( + output io.Writer = cli.out + err error + ) + if *outfile != "" { + output, err = os.Create(*outfile) + if err != nil { + return err + } + } else if cli.isTerminalOut { + return errors.New("Cowardly refusing to save to a terminal. Use the -o flag or redirect.") } + + if len(cmd.Args()) == 1 { + image := cmd.Arg(0) + if err := cli.stream("GET", "/containers/"+image+"/export", nil, output, nil); err != nil { + return err + } + } else { + v := url.Values{} + for _, arg := range cmd.Args() { + v.Add("names", arg) + } + if err := cli.stream("GET", "/containers/get?"+v.Encode(), nil, output, nil); err != nil { + return err + } + } + return nil } @@ -1847,7 +2010,7 @@ func (cli *DockerCli) CmdLogs(args ...string) error { cmd = cli.Subcmd("logs", "CONTAINER", "Fetch the logs of a container", true) follow = cmd.Bool([]string{"f", "-follow"}, false, "Follow log output") times = cmd.Bool([]string{"t", "-timestamps"}, false, "Show timestamps") - tail = cmd.String([]string{"-tail"}, "all", "Output the specified number of lines at the end of logs (defaults to all logs)") + tail = cmd.String([]string{"-tail"}, "all", "Number of lines to show from the end of the logs") ) cmd.Require(flag.Exact, 1) @@ -1865,6 +2028,10 @@ func (cli *DockerCli) CmdLogs(args ...string) error { return err } + if env.GetSubEnv("HostConfig").GetSubEnv("LogConfig").Get("Type") != "json-file" { + return fmt.Errorf("\"logs\" command is supported only for \"json-file\" logging driver") + } + v := url.Values{} v.Set("stdout", "1") v.Set("stderr", "1") @@ -1885,7 +2052,7 @@ func (cli *DockerCli) CmdAttach(args ...string) error { var ( cmd = cli.Subcmd("attach", "CONTAINER", "Attach to a running container", true) noStdin = cmd.Bool([]string{"#nostdin", "-no-stdin"}, false, "Do not attach STDIN") - proxy = cmd.Bool([]string{"#sig-proxy", "-sig-proxy"}, true, "Proxy all received signals to the process (non-TTY mode only). SIGCHLD, SIGKILL, and SIGSTOP are not proxied.") + proxy = cmd.Bool([]string{"#sig-proxy", "-sig-proxy"}, true, "Proxy all received signals to the process") ) cmd.Require(flag.Exact, 1) @@ -2111,7 +2278,7 @@ func (cid *cidFile) Write(id string) error { return nil } -func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runconfig.HostConfig, cidfile, name string) (engine.Env, error) { +func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runconfig.HostConfig, cidfile, name string) (*types.ContainerCreateResponse, error) { containerValues := url.Values{} if name != "" { containerValues.Set("name", name) @@ -2136,7 +2303,7 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc if tag == "" { tag = graph.DEFAULTTAG } - fmt.Fprintf(cli.err, "Unable to find image '%s:%s' locally\n", repo, tag) + fmt.Fprintf(cli.err, "Unable to find image '%s' locally\n", utils.ImageReference(repo, tag)) // we don't want to write to stdout anything apart from container.ID if err = cli.pullImageCustomOut(config.Image, cli.err); err != nil { @@ -2150,23 +2317,19 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc return nil, err } - var result engine.Env - if err := result.Decode(stream); err != nil { + var response types.ContainerCreateResponse + if err := json.NewDecoder(stream).Decode(&response); err != nil { return nil, err } - - for _, warning := range result.GetList("Warnings") { + for _, warning := range response.Warnings { fmt.Fprintf(cli.err, "WARNING: %s\n", warning) } - if containerIDFile != nil { - if err = containerIDFile.Write(result.Get("Id")); err != nil { + if err = containerIDFile.Write(response.ID); err != nil { return nil, err } } - - return result, nil - + return &response, nil } func (cli *DockerCli) CmdCreate(args ...string) error { @@ -2185,14 +2348,11 @@ func (cli *DockerCli) CmdCreate(args ...string) error { cmd.Usage() return nil } - - createResult, err := cli.createContainer(config, hostConfig, hostConfig.ContainerIDFile, *flName) + response, err := cli.createContainer(config, hostConfig, hostConfig.ContainerIDFile, *flName) if err != nil { return err } - - fmt.Fprintf(cli.out, "%s\n", createResult.Get("Id")) - + fmt.Fprintf(cli.out, "%s\n", response.ID) return nil } @@ -2202,9 +2362,9 @@ func (cli *DockerCli) CmdRun(args ...string) error { // These are flags not stored in Config/HostConfig var ( - flAutoRemove = cmd.Bool([]string{"#rm", "-rm"}, false, "Automatically remove the container when it exits (incompatible with -d)") - flDetach = cmd.Bool([]string{"d", "-detach"}, false, "Detached mode: run the container in the background and print the new container ID") - flSigProxy = cmd.Bool([]string{"#sig-proxy", "-sig-proxy"}, true, "Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied.") + flAutoRemove = cmd.Bool([]string{"#rm", "-rm"}, false, "Automatically remove the container when it exits") + flDetach = cmd.Bool([]string{"d", "-detach"}, false, "Run container in background and print container ID") + flSigProxy = cmd.Bool([]string{"#sig-proxy", "-sig-proxy"}, true, "Proxy received signals to the process") flName = cmd.String([]string{"#name", "-name"}, "", "Assign a name to the container") flAttach *opts.ListOpts @@ -2218,6 +2378,18 @@ func (cli *DockerCli) CmdRun(args ...string) error { if err != nil { utils.ReportError(cmd, err.Error(), true) } + + if len(hostConfig.Dns) > 0 { + // check the DNS settings passed via --dns against + // localhost regexp to warn if they are trying to + // set a DNS to a localhost address + for _, dnsIP := range hostConfig.Dns { + if resolvconf.IsLocalhost(dnsIP) { + fmt.Fprintf(cli.err, "WARNING: Localhost DNS setting (--dns=%s) may fail in containers.\n", dnsIP) + break + } + } + } if config.Image == "" { cmd.Usage() return nil @@ -2228,7 +2400,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { return err } } else { - if fl := cmd.Lookup("attach"); fl != nil { + if fl := cmd.Lookup("-attach"); fl != nil { flAttach = fl.Value.(*opts.ListOpts) if flAttach.Len() != 0 { return ErrConflictAttachDetach @@ -2250,38 +2422,32 @@ func (cli *DockerCli) CmdRun(args ...string) error { sigProxy = false } - runResult, err := cli.createContainer(config, hostConfig, hostConfig.ContainerIDFile, *flName) + createResponse, err := cli.createContainer(config, hostConfig, hostConfig.ContainerIDFile, *flName) if err != nil { return err } - if sigProxy { - sigc := cli.forwardAllSignals(runResult.Get("Id")) + sigc := cli.forwardAllSignals(createResponse.ID) defer signal.StopCatch(sigc) } - var ( waitDisplayId chan struct{} errCh chan error ) - if !config.AttachStdout && !config.AttachStderr { // Make this asynchronous to allow the client to write to stdin before having to read the ID waitDisplayId = make(chan struct{}) go func() { defer close(waitDisplayId) - fmt.Fprintf(cli.out, "%s\n", runResult.Get("Id")) + fmt.Fprintf(cli.out, "%s\n", createResponse.ID) }() } - if *flAutoRemove && (hostConfig.RestartPolicy.Name == "always" || hostConfig.RestartPolicy.Name == "on-failure") { return ErrConflictRestartPolicyAndAutoRemove } - // We need to instantiate the chan because the select needs it. It can // be closed but can't be uninitialized. hijacked := make(chan io.Closer) - // Block the return until the chan gets closed defer func() { log.Debugf("End of CmdRun(), Waiting for hijack to finish.") @@ -2289,7 +2455,6 @@ func (cli *DockerCli) CmdRun(args ...string) error { log.Errorf("Hijack did not finish (chan still open)") } }() - if config.AttachStdin || config.AttachStdout || config.AttachStderr { var ( out, stderr io.Writer @@ -2297,7 +2462,6 @@ func (cli *DockerCli) CmdRun(args ...string) error { v = url.Values{} ) v.Set("stream", "1") - if config.AttachStdin { v.Set("stdin", "1") in = cli.in @@ -2314,14 +2478,12 @@ func (cli *DockerCli) CmdRun(args ...string) error { stderr = cli.err } } - errCh = promise.Go(func() error { - return cli.hijack("POST", "/containers/"+runResult.Get("Id")+"/attach?"+v.Encode(), config.Tty, in, out, stderr, hijacked, nil) + return cli.hijack("POST", "/containers/"+createResponse.ID+"/attach?"+v.Encode(), config.Tty, in, out, stderr, hijacked, nil) }) } else { close(hijacked) } - // Acknowledge the hijack before starting select { case closer := <-hijacked: @@ -2338,12 +2500,12 @@ func (cli *DockerCli) CmdRun(args ...string) error { } //start the container - if _, _, err = readBody(cli.call("POST", "/containers/"+runResult.Get("Id")+"/start", nil, false)); err != nil { + if _, _, err = readBody(cli.call("POST", "/containers/"+createResponse.ID+"/start", nil, false)); err != nil { return err } if (config.AttachStdin || config.AttachStdout || config.AttachStderr) && config.Tty && cli.isTerminalOut { - if err := cli.monitorTtySize(runResult.Get("Id"), false); err != nil { + if err := cli.monitorTtySize(createResponse.ID, false); err != nil { log.Errorf("Error monitoring TTY size: %s", err) } } @@ -2368,26 +2530,26 @@ func (cli *DockerCli) CmdRun(args ...string) error { if *flAutoRemove { // Autoremove: wait for the container to finish, retrieve // the exit code and remove the container - if _, _, err := readBody(cli.call("POST", "/containers/"+runResult.Get("Id")+"/wait", nil, false)); err != nil { + if _, _, err := readBody(cli.call("POST", "/containers/"+createResponse.ID+"/wait", nil, false)); err != nil { return err } - if _, status, err = getExitCode(cli, runResult.Get("Id")); err != nil { + if _, status, err = getExitCode(cli, createResponse.ID); err != nil { return err } - if _, _, err := readBody(cli.call("DELETE", "/containers/"+runResult.Get("Id")+"?v=1", nil, false)); err != nil { + if _, _, err := readBody(cli.call("DELETE", "/containers/"+createResponse.ID+"?v=1", nil, false)); err != nil { return err } } else { // No Autoremove: Simply retrieve the exit code if !config.Tty { // In non-TTY mode, we can't detach, so we must wait for container exit - if status, err = waitForExit(cli, runResult.Get("Id")); err != nil { + if status, err = waitForExit(cli, createResponse.ID); err != nil { return err } } else { // In TTY mode, there is a race: if the process dies too slowly, the state could // be updated after the getExitCode call and result in the wrong exit code being reported - if _, status, err = getExitCode(cli, runResult.Get("Id")); err != nil { + if _, status, err = getExitCode(cli, createResponse.ID); err != nil { return err } } @@ -2399,7 +2561,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { } func (cli *DockerCli) CmdCp(args ...string) error { - cmd := cli.Subcmd("cp", "CONTAINER:PATH HOSTPATH", "Copy files/folders from the PATH to the HOSTPATH", true) + cmd := cli.Subcmd("cp", "CONTAINER:PATH HOSTDIR|-", "Copy files/folders from a PATH on the container to a HOSTDIR on the host\nrunning the command. Use '-' to write the data\nas a tar file to STDOUT.", true) cmd.Require(flag.Exact, 2) utils.ParseFlags(cmd, args, true) @@ -2426,7 +2588,14 @@ func (cli *DockerCli) CmdCp(args ...string) error { } if statusCode == 200 { - if err := archive.Untar(stream, copyData.Get("HostPath"), &archive.TarOptions{NoLchown: true}); err != nil { + dest := copyData.Get("HostPath") + + if dest == "-" { + _, err = io.Copy(cli.out, stream) + } else { + err = archive.Untar(stream, dest, &archive.TarOptions{NoLchown: true}) + } + if err != nil { return err } } @@ -2631,7 +2800,7 @@ func (s *containerStats) Collect(cli *DockerCli) { ) go func() { for { - var v *stats.Stats + var v *types.Stats if err := dec.Decode(&v); err != nil { u <- err return @@ -2641,7 +2810,7 @@ func (s *containerStats) Collect(cli *DockerCli) { cpuPercent = 0.0 ) if !start { - cpuPercent = calcuateCpuPercent(previousCpu, previousSystem, v) + cpuPercent = calculateCpuPercent(previousCpu, previousSystem, v) } start = false s.mu.Lock() @@ -2694,7 +2863,7 @@ func (s *containerStats) Display(w io.Writer) error { } func (cli *DockerCli) CmdStats(args ...string) error { - cmd := cli.Subcmd("stats", "CONTAINER", "Display a live stream of one or more containers' resource usage statistics", true) + cmd := cli.Subcmd("stats", "CONTAINER [CONTAINER...]", "Display a live stream of one or more containers' resource usage statistics", true) cmd.Require(flag.Min, 1) utils.ParseFlags(cmd, args, true) @@ -2721,7 +2890,7 @@ func (cli *DockerCli) CmdStats(args ...string) error { for _, c := range cStats { c.mu.Lock() if c.err != nil { - errs = append(errs, fmt.Sprintf("%s: %s", c.Name, c.err.Error())) + errs = append(errs, fmt.Sprintf("%s: %v", c.Name, c.err)) } c.mu.Unlock() } @@ -2748,7 +2917,7 @@ func (cli *DockerCli) CmdStats(args ...string) error { return nil } -func calcuateCpuPercent(previousCpu, previousSystem uint64, v *stats.Stats) float64 { +func calculateCpuPercent(previousCpu, previousSystem uint64, v *types.Stats) float64 { var ( cpuPercent = 0.0 // calculate the change for the cpu usage of the container in between readings diff --git a/api/client/hijack.go b/api/client/hijack.go index bb902405c0..4f89c3a76c 100644 --- a/api/client/hijack.go +++ b/api/client/hijack.go @@ -15,7 +15,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" - "github.com/docker/docker/dockerversion" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/stdcopy" "github.com/docker/docker/pkg/term" diff --git a/api/client/utils.go b/api/client/utils.go index 86e221ebf4..103bfdec3a 100644 --- a/api/client/utils.go +++ b/api/client/utils.go @@ -17,7 +17,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" - "github.com/docker/docker/dockerversion" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/engine" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/stdcopy" diff --git a/api/common.go b/api/common.go index 1bbb6d3937..f6a0bc4883 100644 --- a/api/common.go +++ b/api/common.go @@ -15,7 +15,7 @@ import ( ) const ( - APIVERSION version.Version = "1.17" + APIVERSION version.Version = "1.18" DEFAULTHTTPHOST = "127.0.0.1" DEFAULTUNIXSOCKET = "/var/run/docker.sock" DefaultDockerfileName string = "Dockerfile" @@ -29,25 +29,82 @@ func ValidateHost(val string) (string, error) { return host, nil } -//TODO remove, used on < 1.5 in getContainersJSON +// TODO remove, used on < 1.5 in getContainersJSON func DisplayablePorts(ports *engine.Table) string { - result := []string{} - ports.SetKey("PublicPort") + var ( + result = []string{} + hostMappings = []string{} + firstInGroupMap map[string]int + lastInGroupMap map[string]int + ) + firstInGroupMap = make(map[string]int) + lastInGroupMap = make(map[string]int) + ports.SetKey("PrivatePort") ports.Sort() for _, port := range ports.Data { - if port.Get("IP") == "" { - result = append(result, fmt.Sprintf("%d/%s", port.GetInt("PrivatePort"), port.Get("Type"))) - } else { - result = append(result, fmt.Sprintf("%s:%d->%d/%s", port.Get("IP"), port.GetInt("PublicPort"), port.GetInt("PrivatePort"), port.Get("Type"))) + var ( + current = port.GetInt("PrivatePort") + portKey = port.Get("Type") + firstInGroup int + lastInGroup int + ) + if port.Get("IP") != "" { + if port.GetInt("PublicPort") != current { + hostMappings = append(hostMappings, fmt.Sprintf("%s:%d->%d/%s", port.Get("IP"), port.GetInt("PublicPort"), port.GetInt("PrivatePort"), port.Get("Type"))) + continue + } + portKey = fmt.Sprintf("%s/%s", port.Get("IP"), port.Get("Type")) } + firstInGroup = firstInGroupMap[portKey] + lastInGroup = lastInGroupMap[portKey] + + if firstInGroup == 0 { + firstInGroupMap[portKey] = current + lastInGroupMap[portKey] = current + continue + } + + if current == (lastInGroup + 1) { + lastInGroupMap[portKey] = current + continue + } + result = append(result, FormGroup(portKey, firstInGroup, lastInGroup)) + firstInGroupMap[portKey] = current + lastInGroupMap[portKey] = current } + for portKey, firstInGroup := range firstInGroupMap { + result = append(result, FormGroup(portKey, firstInGroup, lastInGroupMap[portKey])) + } + result = append(result, hostMappings...) return strings.Join(result, ", ") } +func FormGroup(key string, start, last int) string { + var ( + group string + parts = strings.Split(key, "/") + groupType = parts[0] + ip = "" + ) + if len(parts) > 1 { + ip = parts[0] + groupType = parts[1] + } + if start == last { + group = fmt.Sprintf("%d", start) + } else { + group = fmt.Sprintf("%d-%d", start, last) + } + if ip != "" { + group = fmt.Sprintf("%s:%s->%s", ip, group, group) + } + return fmt.Sprintf("%s/%s", group, groupType) +} + func MatchesContentType(contentType, expectedType string) bool { mimetype, _, err := mime.ParseMediaType(contentType) if err != nil { - log.Errorf("Error parsing media type: %s error: %s", contentType, err.Error()) + log.Errorf("Error parsing media type: %s error: %v", contentType, err) } return err == nil && mimetype == expectedType } diff --git a/api/server/MAINTAINERS b/api/server/MAINTAINERS deleted file mode 100644 index dee1eec042..0000000000 --- a/api/server/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -Victor Vieux (@vieux) -# Johan Euphrosine (@proppy) diff --git a/api/server/server.go b/api/server/server.go index 9bb42f6c87..a1c57a8e42 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -16,7 +16,6 @@ import ( "os" "strconv" "strings" - "syscall" "crypto/tls" "crypto/x509" @@ -27,12 +26,12 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" + "github.com/docker/docker/api/types" "github.com/docker/docker/daemon/networkdriver/portallocator" "github.com/docker/docker/engine" "github.com/docker/docker/pkg/listenbuffer" "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/stdcopy" - "github.com/docker/docker/pkg/systemd" "github.com/docker/docker/pkg/version" "github.com/docker/docker/registry" "github.com/docker/docker/utils" @@ -135,17 +134,27 @@ func httpError(w http.ResponseWriter, err error) { } if err != nil { - log.Errorf("HTTP Error: statusCode=%d %s", statusCode, err.Error()) + log.Errorf("HTTP Error: statusCode=%d %v", statusCode, err) http.Error(w, err.Error(), statusCode) } } -func writeJSON(w http.ResponseWriter, code int, v engine.Env) error { +// writeJSONEnv writes the engine.Env values to the http response stream as a +// json encoded body. +func writeJSONEnv(w http.ResponseWriter, code int, v engine.Env) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(code) return v.Encode(w) } +// writeJSON writes the value v to the http response stream as json with standard +// json encoding. +func writeJSON(w http.ResponseWriter, code int, v interface{}) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(code) + return json.NewEncoder(w).Encode(v) +} + func streamJSON(job *engine.Job, w http.ResponseWriter, flush bool) { w.Header().Set("Content-Type", "application/json") if flush { @@ -183,7 +192,7 @@ func postAuth(eng *engine.Engine, version version.Version, w http.ResponseWriter if status := engine.Tail(stdoutBuffer, 1); status != "" { var env engine.Env env.Set("Status", status) - return writeJSON(w, http.StatusOK, env) + return writeJSONEnv(w, http.StatusOK, env) } w.WriteHeader(http.StatusNoContent) return nil @@ -518,6 +527,7 @@ func postCommit(eng *engine.Engine, version version.Version, w http.ResponseWrit job.Setenv("tag", r.Form.Get("tag")) job.Setenv("author", r.Form.Get("author")) job.Setenv("comment", r.Form.Get("comment")) + job.SetenvList("changes", r.Form["changes"]) job.SetenvSubEnv("config", &config) job.Stdout.Add(stdoutBuffer) @@ -525,7 +535,7 @@ func postCommit(eng *engine.Engine, version version.Version, w http.ResponseWrit return err } env.Set("Id", engine.Tail(stdoutBuffer, 1)) - return writeJSON(w, http.StatusCreated, env) + return writeJSONEnv(w, http.StatusCreated, env) } // Creates an image from Pull or from Import @@ -570,6 +580,7 @@ func postImagesCreate(eng *engine.Engine, version version.Version, w http.Respon } job = eng.Job("import", r.Form.Get("fromSrc"), repo, tag) job.Stdin.Add(r.Body) + job.SetenvList("changes", r.Form["changes"]) } if version.GreaterThan("1.0") { @@ -703,18 +714,16 @@ func postContainersCreate(eng *engine.Engine, version version.Version, w http.Re if err := parseForm(r); err != nil { return nil } + if err := checkForJson(r); err != nil { + return err + } var ( - out engine.Env job = eng.Job("create", r.Form.Get("name")) outWarnings []string stdoutBuffer = bytes.NewBuffer(nil) warnings = bytes.NewBuffer(nil) ) - if err := checkForJson(r); err != nil { - return err - } - if err := job.DecodeEnv(r.Body); err != nil { return err } @@ -730,10 +739,10 @@ func postContainersCreate(eng *engine.Engine, version version.Version, w http.Re for scanner.Scan() { outWarnings = append(outWarnings, scanner.Text()) } - out.Set("Id", engine.Tail(stdoutBuffer, 1)) - out.SetList("Warnings", outWarnings) - - return writeJSON(w, http.StatusCreated, out) + return writeJSON(w, http.StatusCreated, &types.ContainerCreateResponse{ + ID: engine.Tail(stdoutBuffer, 1), + Warnings: outWarnings, + }) } func postContainersRestart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error { @@ -876,7 +885,7 @@ func postContainersWait(eng *engine.Engine, version version.Version, w http.Resp } env.Set("StatusCode", engine.Tail(stdoutBuffer, 1)) - return writeJSON(w, http.StatusOK, env) + return writeJSONEnv(w, http.StatusOK, env) } func postContainersResize(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error { @@ -1073,6 +1082,24 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite job.Setenv("forcerm", r.FormValue("forcerm")) job.SetenvJson("authConfig", authConfig) job.SetenvJson("configFile", configFile) + job.Setenv("memswap", r.FormValue("memswap")) + job.Setenv("memory", r.FormValue("memory")) + job.Setenv("cpusetcpus", r.FormValue("cpusetcpus")) + job.Setenv("cpushares", r.FormValue("cpushares")) + + // Job cancellation. Note: not all job types support this. + if closeNotifier, ok := w.(http.CloseNotifier); ok { + finished := make(chan struct{}) + defer close(finished) + go func() { + select { + case <-finished: + case <-closeNotifier.CloseNotify(): + log.Infof("Client disconnected, cancelling job: %v", job) + job.Cancel() + } + }() + } if err := job.Run(); err != nil { if !job.Stdout.Used() { @@ -1113,8 +1140,8 @@ func postContainersCopy(eng *engine.Engine, version version.Version, w http.Resp job.Stdout.Add(w) w.Header().Set("Content-Type", "application/x-tar") if err := job.Run(); err != nil { - log.Errorf("%s", err.Error()) - if strings.Contains(strings.ToLower(err.Error()), "no such container") { + log.Errorf("%v", err) + if strings.Contains(strings.ToLower(err.Error()), "no such id") { w.WriteHeader(http.StatusNotFound) } else if strings.Contains(err.Error(), "no such file or directory") { return fmt.Errorf("Could not find the file %s in container %s", origResource, vars["name"]) @@ -1147,7 +1174,7 @@ func postContainerExecCreate(eng *engine.Engine, version version.Version, w http // Return the ID out.Set("Id", engine.Tail(stdoutBuffer, 1)) - return writeJSON(w, http.StatusCreated, out) + return writeJSONEnv(w, http.StatusCreated, out) } // TODO(vishh): Refactor the code to avoid having to specify stream config as part of both create and start. @@ -1219,8 +1246,9 @@ func optionsHandler(eng *engine.Engine, version version.Version, w http.Response w.WriteHeader(http.StatusOK) return nil } -func writeCorsHeaders(w http.ResponseWriter, r *http.Request) { - w.Header().Add("Access-Control-Allow-Origin", "*") +func writeCorsHeaders(w http.ResponseWriter, r *http.Request, corsHeaders string) { + log.Debugf("CORS header is enabled and set to: %s", corsHeaders) + w.Header().Add("Access-Control-Allow-Origin", corsHeaders) w.Header().Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Registry-Auth") w.Header().Add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS") } @@ -1230,7 +1258,7 @@ func ping(eng *engine.Engine, version version.Version, w http.ResponseWriter, r return err } -func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, localRoute string, handlerFunc HttpApiFunc, enableCors bool, dockerVersion version.Version) http.HandlerFunc { +func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, localRoute string, handlerFunc HttpApiFunc, corsHeaders string, dockerVersion version.Version) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // log the request log.Debugf("Calling %s %s", localMethod, localRoute) @@ -1249,8 +1277,8 @@ func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, local if version == "" { version = api.APIVERSION } - if enableCors { - writeCorsHeaders(w, r) + if corsHeaders != "" { + writeCorsHeaders(w, r, corsHeaders) } if version.GreaterThan(api.APIVERSION) { @@ -1292,7 +1320,8 @@ func AttachProfiler(router *mux.Router) { router.HandleFunc("/debug/pprof/threadcreate", pprof.Handler("threadcreate").ServeHTTP) } -func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion string) *mux.Router { +// we keep enableCors just for legacy usage, need to be removed in the future +func createRouter(eng *engine.Engine, logging, enableCors bool, corsHeaders string, dockerVersion string) *mux.Router { r := mux.NewRouter() if os.Getenv("DEBUG") != "" { AttachProfiler(r) @@ -1354,6 +1383,12 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st }, } + // If "api-cors-header" is not given, but "api-enable-cors" is true, we set cors to "*" + // otherwise, all head values will be passed to HTTP handler + if corsHeaders == "" && enableCors { + corsHeaders = "*" + } + for method, routes := range m { for route, fct := range routes { log.Debugf("Registering %s, %s", method, route) @@ -1363,7 +1398,7 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st localMethod := method // build the handler function - f := makeHttpHandler(eng, logging, localMethod, localRoute, localFct, enableCors, version.Version(dockerVersion)) + f := makeHttpHandler(eng, logging, localMethod, localRoute, localFct, corsHeaders, version.Version(dockerVersion)) // add the new route if localRoute == "" { @@ -1382,49 +1417,12 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st // FIXME: refactor this to be part of Server and not require re-creating a new // router each time. This requires first moving ListenAndServe into Server. func ServeRequest(eng *engine.Engine, apiversion version.Version, w http.ResponseWriter, req *http.Request) { - router := createRouter(eng, false, true, "") + router := createRouter(eng, false, true, "", "") // Insert APIVERSION into the request as a convenience req.URL.Path = fmt.Sprintf("/v%s%s", apiversion, req.URL.Path) router.ServeHTTP(w, req) } -// serveFd creates an http.Server and sets it up to serve given a socket activated -// argument. -func serveFd(addr string, job *engine.Job) error { - r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version")) - - ls, e := systemd.ListenFD(addr) - if e != nil { - return e - } - - chErrors := make(chan error, len(ls)) - - // We don't want to start serving on these sockets until the - // daemon is initialized and installed. Otherwise required handlers - // won't be ready. - <-activationLock - - // Since ListenFD will return one or more sockets we have - // to create a go func to spawn off multiple serves - for i := range ls { - listener := ls[i] - go func() { - httpSrv := http.Server{Handler: r} - chErrors <- httpSrv.Serve(listener) - }() - } - - for i := 0; i < len(ls); i++ { - err := <-chErrors - if err != nil { - return err - } - } - - return nil -} - func lookupGidByName(nameOrGid string) (int, error) { groupFile, err := user.GetGroupPath() if err != nil { @@ -1439,13 +1437,21 @@ func lookupGidByName(nameOrGid string) (int, error) { if groups != nil && len(groups) > 0 { return groups[0].Gid, nil } + gid, err := strconv.Atoi(nameOrGid) + if err == nil { + log.Warnf("Could not find GID %d", gid) + return gid, nil + } return -1, fmt.Errorf("Group %s not found", nameOrGid) } func setupTls(cert, key, ca string, l net.Listener) (net.Listener, error) { tlsCert, err := tls.LoadX509KeyPair(cert, key) if err != nil { - return nil, fmt.Errorf("Couldn't load X509 key pair (%s, %s): %s. Key encrypted?", + if os.IsNotExist(err) { + return nil, fmt.Errorf("Could not load X509 key pair (%s, %s): %v", cert, key, err) + } + return nil, fmt.Errorf("Error reading X509 key pair (%s, %s): %q. Make sure the key is encrypted.", cert, key, err) } tlsConfig := &tls.Config{ @@ -1459,7 +1465,7 @@ func setupTls(cert, key, ca string, l net.Listener) (net.Listener, error) { certPool := x509.NewCertPool() file, err := ioutil.ReadFile(ca) if err != nil { - return nil, fmt.Errorf("Couldn't read CA certificate: %s", err) + return nil, fmt.Errorf("Could not read CA certificate: %v", err) } certPool.AppendCertsFromPEM(file) tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert @@ -1502,31 +1508,6 @@ func setSocketGroup(addr, group string) error { return nil } -func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) { - r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version")) - - if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) { - return nil, err - } - mask := syscall.Umask(0777) - defer syscall.Umask(mask) - - l, err := newListener("unix", addr, job.GetenvBool("BufferRequests")) - if err != nil { - return nil, err - } - - if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil { - return nil, err - } - - if err := os.Chmod(addr, 0660); err != nil { - return nil, err - } - - return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil -} - func allocateDaemonPort(addr string) error { host, port, err := net.SplitHostPort(addr) if err != nil { @@ -1554,11 +1535,11 @@ func allocateDaemonPort(addr string) error { } func setupTcpHttp(addr string, job *engine.Job) (*HttpServer, error) { - if !strings.HasPrefix(addr, "127.0.0.1") && !job.GetenvBool("TlsVerify") { - log.Infof("/!\\ DON'T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\") + if !job.GetenvBool("TlsVerify") { + log.Infof("/!\\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\") } - r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version")) + r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("CorsHeaders"), job.Getenv("Version")) l, err := newListener("tcp", addr, job.GetenvBool("BufferRequests")) if err != nil { @@ -1582,21 +1563,6 @@ func setupTcpHttp(addr string, job *engine.Job) (*HttpServer, error) { return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil } -// NewServer sets up the required Server and does protocol specific checking. -func NewServer(proto, addr string, job *engine.Job) (Server, error) { - // Basic error and sanity checking - switch proto { - case "fd": - return nil, serveFd(addr, job) - case "tcp": - return setupTcpHttp(addr, job) - case "unix": - return setupUnixHttp(addr, job) - default: - return nil, fmt.Errorf("Invalid protocol format.") - } -} - type Server interface { Serve() error Close() error @@ -1626,7 +1592,15 @@ func ServeApi(job *engine.Job) engine.Status { chErrors <- err return } - chErrors <- srv.Serve() + job.Eng.OnShutdown(func() { + if err := srv.Close(); err != nil { + log.Error(err) + } + }) + if err = srv.Serve(); err != nil && strings.Contains(err.Error(), "use of closed network connection") { + err = nil + } + chErrors <- err }() } @@ -1639,15 +1613,3 @@ func ServeApi(job *engine.Job) engine.Status { return engine.StatusOK } - -func AcceptConnections(job *engine.Job) engine.Status { - // Tell the init daemon we are accepting requests - go systemd.SdNotify("READY=1") - - // close the lock so the listeners start accepting connections - if activationLock != nil { - close(activationLock) - } - - return engine.StatusOK -} diff --git a/api/server/server_linux.go b/api/server/server_linux.go new file mode 100644 index 0000000000..fff803ddaf --- /dev/null +++ b/api/server/server_linux.go @@ -0,0 +1,103 @@ +// +build linux + +package server + +import ( + "fmt" + "net/http" + "os" + "syscall" + + "github.com/docker/docker/engine" + "github.com/docker/docker/pkg/systemd" +) + +// NewServer sets up the required Server and does protocol specific checking. +func NewServer(proto, addr string, job *engine.Job) (Server, error) { + // Basic error and sanity checking + switch proto { + case "fd": + return nil, serveFd(addr, job) + case "tcp": + return setupTcpHttp(addr, job) + case "unix": + return setupUnixHttp(addr, job) + default: + return nil, fmt.Errorf("Invalid protocol format.") + } +} + +func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) { + r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("CorsHeaders"), job.Getenv("Version")) + + if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) { + return nil, err + } + mask := syscall.Umask(0777) + defer syscall.Umask(mask) + + l, err := newListener("unix", addr, job.GetenvBool("BufferRequests")) + if err != nil { + return nil, err + } + + if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil { + return nil, err + } + + if err := os.Chmod(addr, 0660); err != nil { + return nil, err + } + + return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil +} + +// serveFd creates an http.Server and sets it up to serve given a socket activated +// argument. +func serveFd(addr string, job *engine.Job) error { + r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("CorsHeaders"), job.Getenv("Version")) + + ls, e := systemd.ListenFD(addr) + if e != nil { + return e + } + + chErrors := make(chan error, len(ls)) + + // We don't want to start serving on these sockets until the + // daemon is initialized and installed. Otherwise required handlers + // won't be ready. + <-activationLock + + // Since ListenFD will return one or more sockets we have + // to create a go func to spawn off multiple serves + for i := range ls { + listener := ls[i] + go func() { + httpSrv := http.Server{Handler: r} + chErrors <- httpSrv.Serve(listener) + }() + } + + for i := 0; i < len(ls); i++ { + err := <-chErrors + if err != nil { + return err + } + } + + return nil +} + +// Called through eng.Job("acceptconnections") +func AcceptConnections(job *engine.Job) engine.Status { + // Tell the init daemon we are accepting requests + go systemd.SdNotify("READY=1") + + // close the lock so the listeners start accepting connections + if activationLock != nil { + close(activationLock) + } + + return engine.StatusOK +} diff --git a/api/server/server_windows.go b/api/server/server_windows.go new file mode 100644 index 0000000000..c5d2c2ca56 --- /dev/null +++ b/api/server/server_windows.go @@ -0,0 +1,31 @@ +// +build windows + +package server + +import ( + "fmt" + + "github.com/docker/docker/engine" +) + +// NewServer sets up the required Server and does protocol specific checking. +func NewServer(proto, addr string, job *engine.Job) (Server, error) { + // Basic error and sanity checking + switch proto { + case "tcp": + return setupTcpHttp(addr, job) + default: + return nil, errors.New("Invalid protocol format. Windows only supports tcp.") + } +} + +// Called through eng.Job("acceptconnections") +func AcceptConnections(job *engine.Job) engine.Status { + + // close the lock so the listeners start accepting connections + if activationLock != nil { + close(activationLock) + } + + return engine.StatusOK +} diff --git a/api/stats/stats.go b/api/types/stats.go similarity index 99% rename from api/stats/stats.go rename to api/types/stats.go index 8edf18fe0e..97804e95e6 100644 --- a/api/stats/stats.go +++ b/api/types/stats.go @@ -1,6 +1,6 @@ // This package is used for API stability in the types and response to the // consumers of the API stats endpoint. -package stats +package types import "time" diff --git a/api/types/types.go b/api/types/types.go new file mode 100644 index 0000000000..f1b1d041ea --- /dev/null +++ b/api/types/types.go @@ -0,0 +1,11 @@ +package types + +// ContainerCreateResponse contains the information returned to a client on the +// creation of a new container. +type ContainerCreateResponse struct { + // ID is the ID of the created container. + ID string `json:"Id"` + + // Warnings are any warnings encountered during the creation of the container. + Warnings []string `json:"Warnings"` +} diff --git a/builder/MAINTAINERS b/builder/MAINTAINERS deleted file mode 100644 index e170c235a3..0000000000 --- a/builder/MAINTAINERS +++ /dev/null @@ -1,3 +0,0 @@ -Tibor Vass (@tiborvass) -Erik Hollensbe (@erikh) -Doug Davis (@duglin) diff --git a/builder/command/command.go b/builder/command/command.go new file mode 100644 index 0000000000..16544f0267 --- /dev/null +++ b/builder/command/command.go @@ -0,0 +1,39 @@ +// This package contains the set of Dockerfile commands. +package command + +const ( + Env = "env" + Label = "label" + Maintainer = "maintainer" + Add = "add" + Copy = "copy" + From = "from" + Onbuild = "onbuild" + Workdir = "workdir" + Run = "run" + Cmd = "cmd" + Entrypoint = "entrypoint" + Expose = "expose" + Volume = "volume" + User = "user" + Insert = "insert" +) + +// Commands is list of all Dockerfile commands +var Commands = map[string]struct{}{ + Env: {}, + Label: {}, + Maintainer: {}, + Add: {}, + Copy: {}, + From: {}, + Onbuild: {}, + Workdir: {}, + Run: {}, + Cmd: {}, + Entrypoint: {}, + Expose: {}, + Volume: {}, + User: {}, + Insert: {}, +} diff --git a/builder/dispatchers.go b/builder/dispatchers.go index 6108967c3b..4d21a75eb5 100644 --- a/builder/dispatchers.go +++ b/builder/dispatchers.go @@ -39,7 +39,7 @@ func nullDispatch(b *Builder, args []string, attributes map[string]bool, origina // func env(b *Builder, args []string, attributes map[string]bool, original string) error { if len(args) == 0 { - return fmt.Errorf("ENV is missing arguments") + return fmt.Errorf("ENV requires at least one argument") } if len(args)%2 != 0 { @@ -78,13 +78,44 @@ func env(b *Builder, args []string, attributes map[string]bool, original string) // Sets the maintainer metadata. func maintainer(b *Builder, args []string, attributes map[string]bool, original string) error { if len(args) != 1 { - return fmt.Errorf("MAINTAINER requires only one argument") + return fmt.Errorf("MAINTAINER requires exactly one argument") } b.maintainer = args[0] return b.commit("", b.Config.Cmd, fmt.Sprintf("MAINTAINER %s", b.maintainer)) } +// LABEL some json data describing the image +// +// Sets the Label variable foo to bar, +// +func label(b *Builder, args []string, attributes map[string]bool, original string) error { + if len(args) == 0 { + return fmt.Errorf("LABEL requires at least one argument") + } + if len(args)%2 != 0 { + // should never get here, but just in case + return fmt.Errorf("Bad input to LABEL, too many args") + } + + commitStr := "LABEL" + + if b.Config.Labels == nil { + b.Config.Labels = map[string]string{} + } + + for j := 0; j < len(args); j++ { + // name ==> args[j] + // value ==> args[j+1] + newVar := args[j] + "=" + args[j+1] + "" + commitStr += " " + newVar + + b.Config.Labels[args[j]] = args[j+1] + j++ + } + return b.commit("", b.Config.Cmd, commitStr) +} + // ADD foo /path // // Add the file 'foo' to '/path'. Tarball and Remote URL (git, http) handling @@ -159,6 +190,10 @@ func from(b *Builder, args []string, attributes map[string]bool, original string // cases. // func onbuild(b *Builder, args []string, attributes map[string]bool, original string) error { + if len(args) == 0 { + return fmt.Errorf("ONBUILD requires at least one argument") + } + triggerInstruction := strings.ToUpper(strings.TrimSpace(args[0])) switch triggerInstruction { case "ONBUILD": @@ -209,8 +244,8 @@ func run(b *Builder, args []string, attributes map[string]bool, original string) args = handleJsonArgs(args, attributes) - if len(args) == 1 { - args = append([]string{"/bin/sh", "-c"}, args[0]) + if !attributes["json"] { + args = append([]string{"/bin/sh", "-c"}, args...) } runCmd := flag.NewFlagSet("run", flag.ContinueOnError) @@ -272,7 +307,7 @@ func cmd(b *Builder, args []string, attributes map[string]bool, original string) b.Config.Cmd = append([]string{"/bin/sh", "-c"}, b.Config.Cmd...) } - if err := b.commit("", b.Config.Cmd, fmt.Sprintf("CMD %v", b.Config.Cmd)); err != nil { + if err := b.commit("", b.Config.Cmd, fmt.Sprintf("CMD %q", b.Config.Cmd)); err != nil { return err } @@ -312,7 +347,7 @@ func entrypoint(b *Builder, args []string, attributes map[string]bool, original b.Config.Cmd = nil } - if err := b.commit("", b.Config.Cmd, fmt.Sprintf("ENTRYPOINT %v", b.Config.Entrypoint)); err != nil { + if err := b.commit("", b.Config.Cmd, fmt.Sprintf("ENTRYPOINT %q", b.Config.Entrypoint)); err != nil { return err } @@ -327,15 +362,27 @@ func entrypoint(b *Builder, args []string, attributes map[string]bool, original func expose(b *Builder, args []string, attributes map[string]bool, original string) error { portsTab := args + if len(args) == 0 { + return fmt.Errorf("EXPOSE requires at least one argument") + } + if b.Config.ExposedPorts == nil { b.Config.ExposedPorts = make(nat.PortSet) } - ports, _, err := nat.ParsePortSpecs(append(portsTab, b.Config.PortSpecs...)) + ports, bindingMap, err := nat.ParsePortSpecs(append(portsTab, b.Config.PortSpecs...)) if err != nil { return err } + for _, bindings := range bindingMap { + if bindings[0].HostIp != "" || bindings[0].HostPort != "" { + fmt.Fprintf(b.ErrStream, " ---> Using Dockerfile's EXPOSE instruction"+ + " to map host ports to container ports (ip:hostPort:containerPort) is deprecated.\n"+ + " Please use -p to publish the ports.\n") + } + } + // instead of using ports directly, we build a list of ports and sort it so // the order is consistent. This prevents cache burst where map ordering // changes between builds @@ -373,13 +420,17 @@ func user(b *Builder, args []string, attributes map[string]bool, original string // func volume(b *Builder, args []string, attributes map[string]bool, original string) error { if len(args) == 0 { - return fmt.Errorf("Volume cannot be empty") + return fmt.Errorf("VOLUME requires at least one argument") } if b.Config.Volumes == nil { b.Config.Volumes = map[string]struct{}{} } for _, v := range args { + v = strings.TrimSpace(v) + if v == "" { + return fmt.Errorf("Volume specified can not be an empty string") + } b.Config.Volumes[v] = struct{}{} } if err := b.commit("", b.Config.Cmd, fmt.Sprintf("VOLUME %v", args)); err != nil { diff --git a/builder/evaluator.go b/builder/evaluator.go index b76c7f29bb..79ca4d934a 100644 --- a/builder/evaluator.go +++ b/builder/evaluator.go @@ -28,9 +28,12 @@ import ( "strings" log "github.com/Sirupsen/logrus" + "github.com/docker/docker/api" + "github.com/docker/docker/builder/command" "github.com/docker/docker/builder/parser" "github.com/docker/docker/daemon" "github.com/docker/docker/engine" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/fileutils" "github.com/docker/docker/pkg/symlink" "github.com/docker/docker/pkg/tarsum" @@ -45,33 +48,35 @@ var ( // Environment variable interpolation will happen on these statements only. var replaceEnvAllowed = map[string]struct{}{ - "env": {}, - "add": {}, - "copy": {}, - "workdir": {}, - "expose": {}, - "volume": {}, - "user": {}, + command.Env: {}, + command.Label: {}, + command.Add: {}, + command.Copy: {}, + command.Workdir: {}, + command.Expose: {}, + command.Volume: {}, + command.User: {}, } var evaluateTable map[string]func(*Builder, []string, map[string]bool, string) error func init() { evaluateTable = map[string]func(*Builder, []string, map[string]bool, string) error{ - "env": env, - "maintainer": maintainer, - "add": add, - "copy": dispatchCopy, // copy() is a go builtin - "from": from, - "onbuild": onbuild, - "workdir": workdir, - "run": run, - "cmd": cmd, - "entrypoint": entrypoint, - "expose": expose, - "volume": volume, - "user": user, - "insert": insert, + command.Env: env, + command.Label: label, + command.Maintainer: maintainer, + command.Add: add, + command.Copy: dispatchCopy, // copy() is a go builtin + command.From: from, + command.Onbuild: onbuild, + command.Workdir: workdir, + command.Run: run, + command.Cmd: cmd, + command.Entrypoint: entrypoint, + command.Expose: expose, + command.Volume: volume, + command.User: user, + command.Insert: insert, } } @@ -88,12 +93,18 @@ type Builder struct { Verbose bool UtilizeCache bool + cacheBusted bool // controls how images and containers are handled between steps. Remove bool ForceRemove bool Pull bool + // set this to true if we want the builder to not commit between steps. + // This is useful when we only want to use the evaluator table to generate + // the final configs of the Dockerfile but dont want the layers + disableCommit bool + AuthConfig *registry.AuthConfig AuthConfigFile *registry.ConfigFile @@ -114,6 +125,14 @@ type Builder struct { context tarsum.TarSum // the context is a tarball that is uploaded by the client contextPath string // the path of the temporary directory the local context is unpacked to (server side) noBaseImage bool // indicates that this build does not start from any base image, but is being built from an empty file system. + + // Set resource restrictions for build containers + cpuSetCpus string + cpuShares int64 + memory int64 + memorySwap int64 + + cancelled <-chan struct{} // When closed, job was cancelled. } // Run the builder with the context. This is the lynchpin of this package. This @@ -139,38 +158,63 @@ func (b *Builder) Run(context io.Reader) (string, error) { } }() - if err := b.readDockerfile(b.dockerfileName); err != nil { + if err := b.readDockerfile(); err != nil { return "", err } // some initializations that would not have been supplied by the caller. b.Config = &runconfig.Config{} + b.TmpContainers = map[string]struct{}{} for i, n := range b.dockerfile.Children { + select { + case <-b.cancelled: + log.Debug("Builder: build cancelled!") + fmt.Fprintf(b.OutStream, "Build cancelled") + return "", fmt.Errorf("Build cancelled") + default: + // Not cancelled yet, keep going... + } if err := b.dispatch(i, n); err != nil { if b.ForceRemove { b.clearTmp() } return "", err } - fmt.Fprintf(b.OutStream, " ---> %s\n", utils.TruncateID(b.image)) + fmt.Fprintf(b.OutStream, " ---> %s\n", common.TruncateID(b.image)) if b.Remove { b.clearTmp() } } if b.image == "" { - return "", fmt.Errorf("No image was generated. Is your Dockerfile empty?\n") + return "", fmt.Errorf("No image was generated. Is your Dockerfile empty?") } - fmt.Fprintf(b.OutStream, "Successfully built %s\n", utils.TruncateID(b.image)) + fmt.Fprintf(b.OutStream, "Successfully built %s\n", common.TruncateID(b.image)) return b.image, nil } // Reads a Dockerfile from the current context. It assumes that the // 'filename' is a relative path from the root of the context -func (b *Builder) readDockerfile(origFile string) error { +func (b *Builder) readDockerfile() error { + // If no -f was specified then look for 'Dockerfile'. If we can't find + // that then look for 'dockerfile'. If neither are found then default + // back to 'Dockerfile' and use that in the error message. + if b.dockerfileName == "" { + b.dockerfileName = api.DefaultDockerfileName + tmpFN := filepath.Join(b.contextPath, api.DefaultDockerfileName) + if _, err := os.Lstat(tmpFN); err != nil { + tmpFN = filepath.Join(b.contextPath, strings.ToLower(api.DefaultDockerfileName)) + if _, err := os.Lstat(tmpFN); err == nil { + b.dockerfileName = strings.ToLower(api.DefaultDockerfileName) + } + } + } + + origFile := b.dockerfileName + filename, err := symlink.FollowSymlinkInScope(filepath.Join(b.contextPath, origFile), b.contextPath) if err != nil { return fmt.Errorf("The Dockerfile (%s) must be within the build context", origFile) @@ -240,6 +284,9 @@ func (b *Builder) dispatch(stepN int, ast *parser.Node) error { msg := fmt.Sprintf("Step %d : %s", stepN, strings.ToUpper(cmd)) if cmd == "onbuild" { + if ast.Next == nil { + return fmt.Errorf("ONBUILD requires at least one argument") + } ast = ast.Next.Children[0] strs = append(strs, ast.Value) msg += " " + ast.Value @@ -281,7 +328,5 @@ func (b *Builder) dispatch(stepN int, ast *parser.Node) error { return f(b, strList, attrs, original) } - fmt.Fprintf(b.ErrStream, "# Skipping unknown instruction %s\n", strings.ToUpper(cmd)) - - return nil + return fmt.Errorf("Unknown instruction: %s", strings.ToUpper(cmd)) } diff --git a/builder/internals.go b/builder/internals.go index ddbef108a0..7c22b47b2b 100644 --- a/builder/internals.go +++ b/builder/internals.go @@ -25,13 +25,16 @@ import ( imagepkg "github.com/docker/docker/image" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/chrootarchive" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/parsers" + "github.com/docker/docker/pkg/progressreader" "github.com/docker/docker/pkg/symlink" "github.com/docker/docker/pkg/system" "github.com/docker/docker/pkg/tarsum" "github.com/docker/docker/pkg/urlutil" "github.com/docker/docker/registry" + "github.com/docker/docker/runconfig" "github.com/docker/docker/utils" ) @@ -59,6 +62,9 @@ func (b *Builder) readContext(context io.Reader) error { } func (b *Builder) commit(id string, autoCmd []string, comment string) error { + if b.disableCommit { + return nil + } if b.image == "" && !b.noBaseImage { return fmt.Errorf("Please provide a source image with `from` prior to commit") } @@ -87,9 +93,9 @@ func (b *Builder) commit(id string, autoCmd []string, comment string) error { } defer container.Unmount() } - container := b.Daemon.Get(id) - if container == nil { - return fmt.Errorf("An error occured while creating the container") + container, err := b.Daemon.Get(id) + if err != nil { + return err } // Note: Actually copy the struct @@ -183,8 +189,8 @@ func (b *Builder) runContextCommand(args []string, allowRemote bool, allowDecomp if err != nil { return err } - // If we do not have at least one hash, never use the cache - if hit && b.UtilizeCache { + + if hit { return nil } @@ -264,7 +270,15 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri } // Download and dump result to tmp file - if _, err := io.Copy(tmpFile, utils.ProgressReader(resp.Body, int(resp.ContentLength), b.OutOld, b.StreamFormatter, true, "", "Downloading")); err != nil { + if _, err := io.Copy(tmpFile, progressreader.New(progressreader.Config{ + In: resp.Body, + Out: b.OutOld, + Formatter: b.StreamFormatter, + Size: int(resp.ContentLength), + NewLines: true, + ID: "", + Action: "Downloading", + })); err != nil { tmpFile.Close() return err } @@ -498,19 +512,24 @@ func (b *Builder) processImageFrom(img *imagepkg.Image) error { // `(true, nil)`. If no image is found, it returns `(false, nil)`. If there // is any error, it returns `(false, err)`. func (b *Builder) probeCache() (bool, error) { - if b.UtilizeCache { - if cache, err := b.Daemon.ImageGetCached(b.image, b.Config); err != nil { - return false, err - } else if cache != nil { - fmt.Fprintf(b.OutStream, " ---> Using cache\n") - log.Debugf("[BUILDER] Use cached version") - b.image = cache.ID - return true, nil - } else { - log.Debugf("[BUILDER] Cache miss") - } + if !b.UtilizeCache || b.cacheBusted { + return false, nil } - return false, nil + + cache, err := b.Daemon.ImageGetCached(b.image, b.Config) + if err != nil { + return false, err + } + if cache == nil { + log.Debugf("[BUILDER] Cache miss") + b.cacheBusted = true + return false, nil + } + + fmt.Fprintf(b.OutStream, " ---> Using cache\n") + log.Debugf("[BUILDER] Use cached version") + b.image = cache.ID + return true, nil } func (b *Builder) create() (*daemon.Container, error) { @@ -519,10 +538,17 @@ func (b *Builder) create() (*daemon.Container, error) { } b.Config.Image = b.image + hostConfig := &runconfig.HostConfig{ + CpuShares: b.cpuShares, + CpusetCpus: b.cpuSetCpus, + Memory: b.memory, + MemorySwap: b.memorySwap, + } + config := *b.Config // Create the container - c, warnings, err := b.Daemon.Create(b.Config, nil, "") + c, warnings, err := b.Daemon.Create(b.Config, hostConfig, "") if err != nil { return nil, err } @@ -531,7 +557,7 @@ func (b *Builder) create() (*daemon.Container, error) { } b.TmpContainers[c.ID] = struct{}{} - fmt.Fprintf(b.OutStream, " ---> Running in %s\n", utils.TruncateID(c.ID)) + fmt.Fprintf(b.OutStream, " ---> Running in %s\n", common.TruncateID(c.ID)) if len(config.Cmd) > 0 { // override the entry point that may have been picked up from the base image @@ -545,19 +571,30 @@ func (b *Builder) create() (*daemon.Container, error) { } func (b *Builder) run(c *daemon.Container) error { + var errCh chan error + if b.Verbose { + errCh = b.Daemon.Attach(&c.StreamConfig, c.Config.OpenStdin, c.Config.StdinOnce, c.Config.Tty, nil, b.OutStream, b.ErrStream) + } + //start the container if err := c.Start(); err != nil { return err } + finished := make(chan struct{}) + defer close(finished) + go func() { + select { + case <-b.cancelled: + log.Debugln("Build cancelled, killing container:", c.ID) + c.Kill() + case <-finished: + } + }() + if b.Verbose { - logsJob := b.Engine.Job("logs", c.ID) - logsJob.Setenv("follow", "1") - logsJob.Setenv("stdout", "1") - logsJob.Setenv("stderr", "1") - logsJob.Stdout.Add(b.OutStream) - logsJob.Stderr.Set(b.ErrStream) - if err := logsJob.Run(); err != nil { + // Block on reading output from container, stop on err or chan closed + if err := <-errCh; err != nil { return err } } @@ -710,13 +747,17 @@ func fixPermissions(source, destination string, uid, gid int, destExisted bool) func (b *Builder) clearTmp() { for c := range b.TmpContainers { - tmp := b.Daemon.Get(c) - if err := b.Daemon.Destroy(tmp); err != nil { - fmt.Fprintf(b.OutStream, "Error removing intermediate container %s: %s\n", utils.TruncateID(c), err.Error()) + tmp, err := b.Daemon.Get(c) + if err != nil { + fmt.Fprint(b.OutStream, err.Error()) + } + + if err := b.Daemon.Rm(tmp); err != nil { + fmt.Fprintf(b.OutStream, "Error removing intermediate container %s: %v\n", common.TruncateID(c), err) return } b.Daemon.DeleteVolumes(tmp.VolumePaths()) delete(b.TmpContainers, c) - fmt.Fprintf(b.OutStream, "Removing intermediate container %s\n", utils.TruncateID(c)) + fmt.Fprintf(b.OutStream, "Removing intermediate container %s\n", common.TruncateID(c)) } } diff --git a/builder/job.go b/builder/job.go index 53490b7e57..59df87e8c6 100644 --- a/builder/job.go +++ b/builder/job.go @@ -1,12 +1,16 @@ package builder import ( + "bytes" + "encoding/json" "io" "io/ioutil" "os" "os/exec" + "strings" "github.com/docker/docker/api" + "github.com/docker/docker/builder/parser" "github.com/docker/docker/daemon" "github.com/docker/docker/engine" "github.com/docker/docker/graph" @@ -14,9 +18,22 @@ import ( "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/urlutil" "github.com/docker/docker/registry" + "github.com/docker/docker/runconfig" "github.com/docker/docker/utils" ) +// whitelist of commands allowed for a commit/import +var validCommitCommands = map[string]bool{ + "entrypoint": true, + "cmd": true, + "user": true, + "workdir": true, + "env": true, + "volume": true, + "expose": true, + "onbuild": true, +} + type BuilderJob struct { Engine *engine.Engine Daemon *daemon.Daemon @@ -24,6 +41,7 @@ type BuilderJob struct { func (b *BuilderJob) Install() { b.Engine.Register("build", b.CmdBuild) + b.Engine.Register("build_config", b.CmdBuildConfig) } func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { @@ -39,6 +57,10 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { rm = job.GetenvBool("rm") forceRm = job.GetenvBool("forcerm") pull = job.GetenvBool("pull") + memory = job.GetenvInt64("memory") + memorySwap = job.GetenvInt64("memswap") + cpuShares = job.GetenvInt64("cpushares") + cpuSetCpus = job.Getenv("cpusetcpus") authConfig = ®istry.AuthConfig{} configFile = ®istry.ConfigFile{} tag string @@ -60,10 +82,6 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { } } - if dockerfileName == "" { - dockerfileName = api.DefaultDockerfileName - } - if remoteURL == "" { context = ioutil.NopCloser(job.Stdin) } else if urlutil.IsGitURL(remoteURL) { @@ -95,6 +113,11 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { if err != nil { return job.Error(err) } + + // When we're downloading just a Dockerfile put it in + // the default name - don't allow the client to move/specify it + dockerfileName = api.DefaultDockerfileName + c, err := archive.Generate(dockerfileName, string(dockerFile)) if err != nil { return job.Error(err) @@ -126,6 +149,11 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { AuthConfig: authConfig, AuthConfigFile: configFile, dockerfileName: dockerfileName, + cpuShares: cpuShares, + cpuSetCpus: cpuSetCpus, + memory: memory, + memorySwap: memorySwap, + cancelled: job.WaitCancelled(), } id, err := builder.Run(context) @@ -138,3 +166,50 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { } return engine.StatusOK } + +func (b *BuilderJob) CmdBuildConfig(job *engine.Job) engine.Status { + if len(job.Args) != 0 { + return job.Errorf("Usage: %s\n", job.Name) + } + + var ( + changes = job.GetenvList("changes") + newConfig runconfig.Config + ) + + if err := job.GetenvJson("config", &newConfig); err != nil { + return job.Error(err) + } + + ast, err := parser.Parse(bytes.NewBufferString(strings.Join(changes, "\n"))) + if err != nil { + return job.Error(err) + } + + // ensure that the commands are valid + for _, n := range ast.Children { + if !validCommitCommands[n.Value] { + return job.Errorf("%s is not a valid change command", n.Value) + } + } + + builder := &Builder{ + Daemon: b.Daemon, + Engine: b.Engine, + Config: &newConfig, + OutStream: ioutil.Discard, + ErrStream: ioutil.Discard, + disableCommit: true, + } + + for i, n := range ast.Children { + if err := builder.dispatch(i, n); err != nil { + return job.Error(err) + } + } + + if err := json.NewEncoder(job.Stdout).Encode(builder.Config); err != nil { + return job.Error(err) + } + return engine.StatusOK +} diff --git a/builder/parser/line_parsers.go b/builder/parser/line_parsers.go index 8a94e1e5db..45c929ee69 100644 --- a/builder/parser/line_parsers.go +++ b/builder/parser/line_parsers.go @@ -30,6 +30,10 @@ func parseIgnore(rest string) (*Node, map[string]bool, error) { // ONBUILD RUN foo bar -> (onbuild (run foo bar)) // func parseSubCommand(rest string) (*Node, map[string]bool, error) { + if rest == "" { + return nil, nil, nil + } + _, child, err := parseLine(rest) if err != nil { return nil, nil, err @@ -40,10 +44,10 @@ func parseSubCommand(rest string) (*Node, map[string]bool, error) { // parse environment like statements. Note that this does *not* handle // variable interpolation, which will be handled in the evaluator. -func parseEnv(rest string) (*Node, map[string]bool, error) { +func parseNameVal(rest string, key string) (*Node, map[string]bool, error) { // This is kind of tricky because we need to support the old - // variant: ENV name value - // as well as the new one: ENV name=value ... + // variant: KEY name value + // as well as the new one: KEY name=value ... // The trigger to know which one is being used will be whether we hit // a space or = first. space ==> old, "=" ==> new @@ -133,10 +137,10 @@ func parseEnv(rest string) (*Node, map[string]bool, error) { } if len(words) == 0 { - return nil, nil, fmt.Errorf("ENV must have some arguments") + return nil, nil, nil } - // Old format (ENV name value) + // Old format (KEY name value) var rootnode *Node if !strings.Contains(words[0], "=") { @@ -145,7 +149,7 @@ func parseEnv(rest string) (*Node, map[string]bool, error) { strs := TOKEN_WHITESPACE.Split(rest, 2) if len(strs) < 2 { - return nil, nil, fmt.Errorf("ENV must have two arguments") + return nil, nil, fmt.Errorf(key + " must have two arguments") } node.Value = strs[0] @@ -178,9 +182,21 @@ func parseEnv(rest string) (*Node, map[string]bool, error) { return rootnode, nil, nil } +func parseEnv(rest string) (*Node, map[string]bool, error) { + return parseNameVal(rest, "ENV") +} + +func parseLabel(rest string) (*Node, map[string]bool, error) { + return parseNameVal(rest, "LABEL") +} + // parses a whitespace-delimited set of arguments. The result is effectively a // linked list of string arguments. func parseStringsWhitespaceDelimited(rest string) (*Node, map[string]bool, error) { + if rest == "" { + return nil, nil, nil + } + node := &Node{} rootnode := node prevnode := node @@ -201,6 +217,9 @@ func parseStringsWhitespaceDelimited(rest string) (*Node, map[string]bool, error // parsestring just wraps the string in quotes and returns a working node. func parseString(rest string) (*Node, map[string]bool, error) { + if rest == "" { + return nil, nil, nil + } n := &Node{} n.Value = rest return n, nil, nil @@ -235,7 +254,9 @@ func parseJSON(rest string) (*Node, map[string]bool, error) { // so, passes to parseJSON; if not, quotes the result and returns a single // node. func parseMaybeJSON(rest string) (*Node, map[string]bool, error) { - rest = strings.TrimSpace(rest) + if rest == "" { + return nil, nil, nil + } node, attrs, err := parseJSON(rest) @@ -255,8 +276,6 @@ func parseMaybeJSON(rest string) (*Node, map[string]bool, error) { // so, passes to parseJSON; if not, attmpts to parse it as a whitespace // delimited string. func parseMaybeJSONToList(rest string) (*Node, map[string]bool, error) { - rest = strings.TrimSpace(rest) - node, attrs, err := parseJSON(rest) if err == nil { diff --git a/builder/parser/parser.go b/builder/parser/parser.go index a0806c6f9a..1ab151b30d 100644 --- a/builder/parser/parser.go +++ b/builder/parser/parser.go @@ -3,11 +3,12 @@ package parser import ( "bufio" - "fmt" "io" "regexp" "strings" "unicode" + + "github.com/docker/docker/builder/command" ) // Node is a structure used to represent a parse tree. @@ -42,23 +43,24 @@ func init() { // The command is parsed and mapped to the line parser. The line parser // recieves the arguments but not the command, and returns an AST after // reformulating the arguments according to the rules in the parser - // functions. Errors are propogated up by Parse() and the resulting AST can + // functions. Errors are propagated up by Parse() and the resulting AST can // be incorporated directly into the existing AST as a next. dispatch = map[string]func(string) (*Node, map[string]bool, error){ - "user": parseString, - "onbuild": parseSubCommand, - "workdir": parseString, - "env": parseEnv, - "maintainer": parseString, - "from": parseString, - "add": parseMaybeJSONToList, - "copy": parseMaybeJSONToList, - "run": parseMaybeJSON, - "cmd": parseMaybeJSON, - "entrypoint": parseMaybeJSON, - "expose": parseStringsWhitespaceDelimited, - "volume": parseMaybeJSONToList, - "insert": parseIgnore, + command.User: parseString, + command.Onbuild: parseSubCommand, + command.Workdir: parseString, + command.Env: parseEnv, + command.Label: parseLabel, + command.Maintainer: parseString, + command.From: parseString, + command.Add: parseMaybeJSONToList, + command.Copy: parseMaybeJSONToList, + command.Run: parseMaybeJSON, + command.Cmd: parseMaybeJSON, + command.Entrypoint: parseMaybeJSON, + command.Expose: parseStringsWhitespaceDelimited, + command.Volume: parseMaybeJSONToList, + command.Insert: parseIgnore, } } @@ -78,10 +80,6 @@ func parseLine(line string) (string, *Node, error) { return "", nil, err } - if len(args) == 0 { - return "", nil, fmt.Errorf("Instruction %q is empty; cannot continue", cmd) - } - node := &Node{} node.Value = cmd diff --git a/builder/parser/parser_test.go b/builder/parser/parser_test.go index daceb9839c..6b55a611ec 100644 --- a/builder/parser/parser_test.go +++ b/builder/parser/parser_test.go @@ -11,7 +11,7 @@ import ( const testDir = "testfiles" const negativeTestDir = "testfiles-negative" -func getDirs(t *testing.T, dir string) []os.FileInfo { +func getDirs(t *testing.T, dir string) []string { f, err := os.Open(dir) if err != nil { t.Fatal(err) @@ -19,7 +19,7 @@ func getDirs(t *testing.T, dir string) []os.FileInfo { defer f.Close() - dirs, err := f.Readdir(0) + dirs, err := f.Readdirnames(0) if err != nil { t.Fatal(err) } @@ -29,16 +29,16 @@ func getDirs(t *testing.T, dir string) []os.FileInfo { func TestTestNegative(t *testing.T) { for _, dir := range getDirs(t, negativeTestDir) { - dockerfile := filepath.Join(negativeTestDir, dir.Name(), "Dockerfile") + dockerfile := filepath.Join(negativeTestDir, dir, "Dockerfile") df, err := os.Open(dockerfile) if err != nil { - t.Fatalf("Dockerfile missing for %s: %s", dir.Name(), err.Error()) + t.Fatalf("Dockerfile missing for %s: %v", dir, err) } _, err = Parse(df) if err == nil { - t.Fatalf("No error parsing broken dockerfile for %s", dir.Name()) + t.Fatalf("No error parsing broken dockerfile for %s", dir) } df.Close() @@ -47,29 +47,29 @@ func TestTestNegative(t *testing.T) { func TestTestData(t *testing.T) { for _, dir := range getDirs(t, testDir) { - dockerfile := filepath.Join(testDir, dir.Name(), "Dockerfile") - resultfile := filepath.Join(testDir, dir.Name(), "result") + dockerfile := filepath.Join(testDir, dir, "Dockerfile") + resultfile := filepath.Join(testDir, dir, "result") df, err := os.Open(dockerfile) if err != nil { - t.Fatalf("Dockerfile missing for %s: %s", dir.Name(), err.Error()) + t.Fatalf("Dockerfile missing for %s: %v", dir, err) } defer df.Close() ast, err := Parse(df) if err != nil { - t.Fatalf("Error parsing %s's dockerfile: %s", dir.Name(), err.Error()) + t.Fatalf("Error parsing %s's dockerfile: %v", dir, err) } content, err := ioutil.ReadFile(resultfile) if err != nil { - t.Fatalf("Error reading %s's result file: %s", dir.Name(), err.Error()) + t.Fatalf("Error reading %s's result file: %v", dir, err) } if ast.Dump()+"\n" != string(content) { fmt.Fprintln(os.Stderr, "Result:\n"+ast.Dump()) fmt.Fprintln(os.Stderr, "Expected:\n"+string(content)) - t.Fatalf("%s: AST dump of dockerfile does not match result", dir.Name()) + t.Fatalf("%s: AST dump of dockerfile does not match result", dir) } } } diff --git a/builder/parser/testfiles-negative/empty-instruction/Dockerfile b/builder/parser/testfiles-negative/empty-instruction/Dockerfile deleted file mode 100644 index 74e625a402..0000000000 --- a/builder/parser/testfiles-negative/empty-instruction/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM dockerfile/rabbitmq - -RUN - rabbitmq-plugins enable \ - rabbitmq_shovel \ - rabbitmq_shovel_management \ - rabbitmq_federation \ - rabbitmq_federation_management diff --git a/builder/parser/testfiles-negative/html-page-yes-really-thanks-lk4d4/Dockerfile b/builder/parser/testfiles-negative/html-page-yes-really-thanks-lk4d4/Dockerfile deleted file mode 100644 index 90531a4b3e..0000000000 --- a/builder/parser/testfiles-negative/html-page-yes-really-thanks-lk4d4/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/builder/parser/utils.go b/builder/parser/utils.go index 3a8cd24e8c..a60ad129fe 100644 --- a/builder/parser/utils.go +++ b/builder/parser/utils.go @@ -1,7 +1,6 @@ package parser import ( - "fmt" "strconv" "strings" ) @@ -50,16 +49,19 @@ func fullDispatch(cmd, args string) (*Node, map[string]bool, error) { // splitCommand takes a single line of text and parses out the cmd and args, // which are used for dispatching to more exact parsing functions. func splitCommand(line string) (string, string, error) { - cmdline := TOKEN_WHITESPACE.Split(line, 2) + var args string - if len(cmdline) != 2 { - return "", "", fmt.Errorf("We do not understand this file. Please ensure it is a valid Dockerfile. Parser error at %q", line) + // Make sure we get the same results irrespective of leading/trailing spaces + cmdline := TOKEN_WHITESPACE.Split(strings.TrimSpace(line), 2) + cmd := strings.ToLower(cmdline[0]) + + if len(cmdline) == 2 { + args = strings.TrimSpace(cmdline[1]) } - cmd := strings.ToLower(cmdline[0]) // the cmd should never have whitespace, but it's possible for the args to // have trailing whitespace. - return cmd, strings.TrimSpace(cmdline[1]), nil + return cmd, args, nil } // covers comments and empty lines. Lines should be trimmed before passing to diff --git a/builtins/builtins.go b/builtins/builtins.go index 41bb249286..1bd9362c09 100644 --- a/builtins/builtins.go +++ b/builtins/builtins.go @@ -5,8 +5,8 @@ import ( "github.com/docker/docker/api" apiserver "github.com/docker/docker/api/server" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/daemon/networkdriver/bridge" - "github.com/docker/docker/dockerversion" "github.com/docker/docker/engine" "github.com/docker/docker/events" "github.com/docker/docker/pkg/parsers/kernel" diff --git a/contrib/MAINTAINERS b/contrib/REVIEWERS similarity index 100% rename from contrib/MAINTAINERS rename to contrib/REVIEWERS diff --git a/contrib/check-config.sh b/contrib/check-config.sh index 4f17540731..ac5df62c26 100755 --- a/contrib/check-config.sh +++ b/contrib/check-config.sh @@ -10,7 +10,12 @@ possibleConfigs=( "/usr/src/linux-$(uname -r)/.config" '/usr/src/linux/.config' ) -: ${CONFIG:="${possibleConfigs[0]}"} + +if [ $# -gt 0 ]; then + CONFIG="$1" +else + : ${CONFIG:="${possibleConfigs[0]}"} +fi if ! command -v zgrep &> /dev/null; then zgrep() { @@ -89,7 +94,7 @@ if [ ! -e "$CONFIG" ]; then if [ ! -e "$CONFIG" ]; then wrap_warning "error: cannot find kernel config" wrap_warning " try running this script again, specifying the kernel config:" - wrap_warning " CONFIG=/path/to/kernel/.config $0" + wrap_warning " CONFIG=/path/to/kernel/.config $0 or $0 /path/to/kernel/.config" exit 1 fi fi @@ -133,7 +138,7 @@ fi flags=( NAMESPACES {NET,PID,IPC,UTS}_NS DEVPTS_MULTIPLE_INSTANCES - CGROUPS CGROUP_CPUACCT CGROUP_DEVICE CGROUP_FREEZER CGROUP_SCHED + CGROUPS CGROUP_CPUACCT CGROUP_DEVICE CGROUP_FREEZER CGROUP_SCHED CPUSETS MACVLAN VETH BRIDGE NF_NAT_IPV4 IP_NF_FILTER IP_NF_TARGET_MASQUERADE NETFILTER_XT_MATCH_{ADDRTYPE,CONNTRACK} @@ -169,7 +174,7 @@ echo '- Storage Drivers:' check_flags BLK_DEV_DM DM_THIN_PROVISIONING EXT4_FS EXT4_FS_POSIX_ACL EXT4_FS_SECURITY | sed 's/^/ /' echo '- "'$(wrap_color 'overlay' blue)'":' - check_flags OVERLAY_FS | sed 's/^/ /' + check_flags OVERLAY_FS EXT4_FS_SECURITY EXT4_FS_POSIX_ACL | sed 's/^/ /' } | sed 's/^/ /' echo diff --git a/contrib/completion/MAINTAINERS b/contrib/completion/REVIEWERS similarity index 100% rename from contrib/completion/MAINTAINERS rename to contrib/completion/REVIEWERS diff --git a/contrib/completion/bash/docker b/contrib/completion/bash/docker index 1d553941bc..115cc15b39 100755 --- a/contrib/completion/bash/docker +++ b/contrib/completion/bash/docker @@ -131,6 +131,7 @@ __docker_capabilities() { ALL AUDIT_CONTROL AUDIT_WRITE + AUDIT_READ BLOCK_SUSPEND CHOWN DAC_OVERRIDE @@ -169,9 +170,25 @@ __docker_capabilities() { " -- "$cur" ) ) } +# a selection of the available signals that is most likely of interest in the +# context of docker containers. +__docker_signals() { + local signals=( + SIGCONT + SIGHUP + SIGINT + SIGKILL + SIGQUIT + SIGSTOP + SIGTERM + SIGUSR1 + SIGUSR2 + ) + COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo $cur | tr '[:lower:]' '[:upper:]')" ) ) +} + _docker_docker() { local boolean_options=" - --api-enable-cors --daemon -d --debug -D --help -h @@ -221,7 +238,7 @@ _docker_docker() { _docker_attach() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--no-stdin --sig-proxy" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --no-stdin --sig-proxy" -- "$cur" ) ) ;; *) local counter="$(__docker_pos_first_nonflag)" @@ -238,11 +255,15 @@ _docker_build() { __docker_image_repos_and_tags return ;; + --file|-f) + _filedir + return + ;; esac case "$cur" in -*) - COMPREPLY=( $( compgen -W "--force-rm --no-cache --quiet -q --rm --tag -t" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--file -f --force-rm --help --no-cache --pull --quiet -q --rm --tag -t" -- "$cur" ) ) ;; *) local counter="$(__docker_pos_first_nonflag '--tag|-t')" @@ -255,17 +276,17 @@ _docker_build() { _docker_commit() { case "$prev" in - --author|-a|--message|-m|--run) + --author|-a|--change|-c|--message|-m) return ;; esac case "$cur" in -*) - COMPREPLY=( $( compgen -W "--author -a --message -m --run" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--author -a --change -c --help --message -m --pause -p" -- "$cur" ) ) ;; *) - local counter=$(__docker_pos_first_nonflag '--author|-a|--message|-m|--run') + local counter=$(__docker_pos_first_nonflag '--author|-a|--change|-c|--message|-m') if [ $cword -eq $counter ]; then __docker_containers_all @@ -282,26 +303,33 @@ _docker_commit() { } _docker_cp() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - case "$cur" in - *:) - return - ;; - *) - __docker_containers_all - COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) - compopt -o nospace - return - ;; - esac - fi - (( counter++ )) + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + case "$cur" in + *:) + return + ;; + *) + __docker_containers_all + COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) + compopt -o nospace + return + ;; + esac + fi + (( counter++ )) - if [ $cword -eq $counter ]; then - _filedir - return - fi + if [ $cword -eq $counter ]; then + _filedir + return + fi + ;; + esac } _docker_create() { @@ -309,22 +337,53 @@ _docker_create() { } _docker_diff() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_all - fi + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_all + fi + ;; + esac } _docker_events() { case "$prev" in - --since) + --filter|-f) + COMPREPLY=( $( compgen -S = -W "container event image" -- "$cur" ) ) + compopt -o nospace + return + ;; + --since|--until) + return + ;; + esac + + # "=" gets parsed to a word and assigned to either $cur or $prev depending on whether + # it is the last character or not. So we search for "xxx=" in the the last two words. + case "${words[$cword-2]}$prev=" in + *container=*) + cur="${cur#=}" + __docker_containers_all + return + ;; + *event=*) + COMPREPLY=( $( compgen -W "create destroy die export kill pause restart start stop unpause" -- "${cur#=}" ) ) + return + ;; + *image=*) + cur="${cur#=}" + __docker_image_repos_and_tags_and_ids return ;; esac case "$cur" in -*) - COMPREPLY=( $( compgen -W "--since" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--filter -f --help --since --until" -- "$cur" ) ) ;; esac } @@ -332,7 +391,7 @@ _docker_events() { _docker_exec() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--detach -d --interactive -i -t --tty" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--detach -d --help --interactive -i -t --tty" -- "$cur" ) ) ;; *) __docker_containers_running @@ -341,10 +400,17 @@ _docker_exec() { } _docker_export() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_all - fi + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_all + fi + ;; + esac } _docker_help() { @@ -357,7 +423,7 @@ _docker_help() { _docker_history() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--no-trunc --quiet -q" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --no-trunc --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) @@ -369,9 +435,23 @@ _docker_history() { } _docker_images() { + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -W "dangling=true" -- "$cur" ) ) + return + ;; + esac + + case "${words[$cword-2]}$prev=" in + *dangling=*) + COMPREPLY=( $( compgen -W "true false" -- "${cur#=}" ) ) + return + ;; + esac + case "$cur" in -*) - COMPREPLY=( $( compgen -W "--all -a --no-trunc --quiet -q" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--all -a --filter -f --help --no-trunc --quiet -q" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) @@ -383,20 +463,31 @@ _docker_images() { } _docker_import() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - return - fi - (( counter++ )) + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + return + fi + (( counter++ )) - if [ $cword -eq $counter ]; then - __docker_image_repos_and_tags - return - fi + if [ $cword -eq $counter ]; then + __docker_image_repos_and_tags + return + fi + ;; + esac } _docker_info() { - return + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + esac } _docker_inspect() { @@ -408,7 +499,7 @@ _docker_inspect() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--format -f" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) ;; *) __docker_containers_and_images @@ -417,7 +508,21 @@ _docker_inspect() { } _docker_kill() { - __docker_containers_running + case "$prev" in + --signal|-s) + __docker_signals + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --signal -s" -- "$cur" ) ) + ;; + *) + __docker_containers_running + ;; + esac } _docker_load() { @@ -430,7 +535,7 @@ _docker_load() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--input -i" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --input -i" -- "$cur" ) ) ;; esac } @@ -444,15 +549,57 @@ _docker_login() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--email -e --password -p --username -u" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--email -e --help --password -p --username -u" -- "$cur" ) ) + ;; + esac +} + +_docker_logout() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; esac } _docker_logs() { + case "$prev" in + --tail) + return + ;; + esac + case "$cur" in -*) - COMPREPLY=( $( compgen -W "--follow -f" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--follow -f --help --tail --timestamps -t" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--tail') + if [ $cword -eq $counter ]; then + __docker_containers_all + fi + ;; + esac +} + +_docker_pause() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_pauseable + fi + ;; + esac +} + +_docker_port() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) @@ -463,50 +610,42 @@ _docker_logs() { esac } -_docker_pause() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_pauseable - fi -} - -_docker_port() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_all - fi -} - _docker_ps() { case "$prev" in --before|--since) __docker_containers_all ;; + --filter|-f) + COMPREPLY=( $( compgen -S = -W "exited status" -- "$cur" ) ) + compopt -o nospace + return + ;; -n) return ;; esac - case "$cur" in - -*) - COMPREPLY=( $( compgen -W "--all -a --before --latest -l --no-trunc -n --quiet -q --size -s --since" -- "$cur" ) ) - ;; - esac -} - -_docker_pull() { - case "$prev" in - --tag|-t) + case "${words[$cword-2]}$prev=" in + *status=*) + COMPREPLY=( $( compgen -W "exited paused restarting running" -- "${cur#=}" ) ) return ;; esac case "$cur" in -*) - COMPREPLY=( $( compgen -W "--tag -t" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--all -a --before --filter -f --help --latest -l -n --no-trunc --quiet -q --size -s --since" -- "$cur" ) ) + ;; + esac +} + +_docker_pull() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all-tags -a --help" -- "$cur" ) ) ;; *) - local counter=$(__docker_pos_first_nonflag '--tag|-t') + local counter=$(__docker_pos_first_nonflag) if [ $cword -eq $counter ]; then __docker_image_repos_and_tags fi @@ -515,10 +654,31 @@ _docker_pull() { } _docker_push() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_image_repos_and_tags - fi + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_image_repos_and_tags + fi + ;; + esac +} + +_docker_rename() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_all + fi + ;; + esac } _docker_restart() { @@ -530,7 +690,7 @@ _docker_restart() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--time -t" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) ;; *) __docker_containers_all @@ -541,8 +701,7 @@ _docker_restart() { _docker_rm() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--force -f --link -l --volumes -v" -- "$cur" ) ) - return + COMPREPLY=( $( compgen -W "--force -f --help --link -l --volumes -v" -- "$cur" ) ) ;; *) for arg in "${COMP_WORDS[@]}"; do @@ -554,13 +713,19 @@ _docker_rm() { esac done __docker_containers_stopped - return ;; esac } _docker_rmi() { - __docker_image_repos_and_tags_and_ids + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) ) + ;; + *) + __docker_image_repos_and_tags_and_ids + ;; + esac } _docker_run() { @@ -585,21 +750,26 @@ _docker_run() { --lxc-conf --mac-address --memory -m + --memory-swap --name --net + --pid --publish -p --restart --security-opt --user -u + --ulimit --volumes-from --volume -v --workdir -w " local all_options="$options_with_args + --help --interactive -i --privileged --publish-all -P + --read-only --tty -t " @@ -632,7 +802,7 @@ _docker_run() { _filedir return ;; - --device|-d|--volume) + --device|--volume|-v) case "$cur" in *:*) # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine) @@ -756,7 +926,7 @@ _docker_save() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "-o --output" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) ) ;; *) __docker_image_repos_and_tags_and_ids @@ -773,7 +943,7 @@ _docker_search() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--automated --no-trunc --stars -s" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--automated --help --no-trunc --stars -s" -- "$cur" ) ) ;; esac } @@ -781,7 +951,7 @@ _docker_search() { _docker_start() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--attach -a --interactive -i" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--attach -a --help --interactive -i" -- "$cur" ) ) ;; *) __docker_containers_stopped @@ -790,7 +960,14 @@ _docker_start() { } _docker_stats() { - __docker_containers_running + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_containers_running + ;; + esac } _docker_stop() { @@ -802,7 +979,7 @@ _docker_stop() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--time -t" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) ;; *) __docker_containers_running @@ -813,7 +990,7 @@ _docker_stop() { _docker_tag() { case "$cur" in -*) - COMPREPLY=( $( compgen -W "--force -f" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) ;; *) local counter=$(__docker_pos_first_nonflag) @@ -833,25 +1010,50 @@ _docker_tag() { } _docker_unpause() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_unpauseable - fi + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_unpauseable + fi + ;; + esac } _docker_top() { - local counter=$(__docker_pos_first_nonflag) - if [ $cword -eq $counter ]; then - __docker_containers_running - fi + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_containers_running + fi + ;; + esac } _docker_version() { - return + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + esac } _docker_wait() { - __docker_containers_all + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_containers_all + ;; + esac } _docker() { @@ -872,17 +1074,18 @@ _docker() { images import info - insert inspect kill load login + logout logs pause port ps pull push + rename restart rm rmi @@ -900,8 +1103,10 @@ _docker() { ) local main_options_with_args=" + --api-cors-header --bip --bridge -b + --default-ulimit --dns --dns-search --exec-driver -e diff --git a/contrib/completion/fish/docker.fish b/contrib/completion/fish/docker.fish index fe92ecc56f..d3237588ef 100644 --- a/contrib/completion/fish/docker.fish +++ b/contrib/completion/fish/docker.fish @@ -16,7 +16,7 @@ function __fish_docker_no_subcommand --description 'Test if docker has yet to be given the subcommand' for i in (commandline -opc) - if contains -- $i attach build commit cp create diff events exec export history images import info insert inspect kill load login logout logs pause port ps pull push restart rm rmi run save search start stop tag top unpause version wait + if contains -- $i attach build commit cp create diff events exec export history images import info inspect kill load login logout logs pause port ps pull push rename restart rm rmi run save search start stop tag top unpause version wait return 1 end end @@ -43,7 +43,7 @@ function __fish_print_docker_repositories --description 'Print a list of docker end # common options -complete -c docker -f -n '__fish_docker_no_subcommand' -l api-enable-cors -d 'Enable CORS headers in the remote API' +complete -c docker -f -n '__fish_docker_no_subcommand' -l api-cors-header -d "Set CORS headers in the remote API. Default is cors disabled" complete -c docker -f -n '__fish_docker_no_subcommand' -s b -l bridge -d 'Attach containers to a pre-existing network bridge' complete -c docker -f -n '__fish_docker_no_subcommand' -l bip -d "Use this CIDR notation address for the network bridge's IP, not compatible with -b" complete -c docker -f -n '__fish_docker_no_subcommand' -s D -l debug -d 'Enable debug mode' @@ -72,7 +72,7 @@ complete -c docker -f -n '__fish_docker_no_subcommand' -l registry-mirror -d 'Sp complete -c docker -f -n '__fish_docker_no_subcommand' -s s -l storage-driver -d 'Force the Docker runtime to use a specific storage driver' complete -c docker -f -n '__fish_docker_no_subcommand' -l selinux-enabled -d 'Enable selinux support. SELinux does not presently support the BTRFS storage driver' complete -c docker -f -n '__fish_docker_no_subcommand' -l storage-opt -d 'Set storage driver options' -complete -c docker -f -n '__fish_docker_no_subcommand' -l tls -d 'Use TLS; implied by --tlsverify flag' +complete -c docker -f -n '__fish_docker_no_subcommand' -l tls -d 'Use TLS; implied by --tlsverify' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlscacert -d 'Trust only remotes providing a certificate signed by the CA given here' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlscert -d 'Path to TLS certificate file' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlskey -d 'Path to TLS key file' @@ -345,7 +345,7 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from save' -s o -l output -d complete -c docker -A -f -n '__fish_seen_subcommand_from save' -a '(__fish_print_docker_images)' -d "Image" # search -complete -c docker -f -n '__fish_docker_no_subcommand' -a search -d 'Search for an image on the Docker Hub' +complete -c docker -f -n '__fish_docker_no_subcommand' -a search -d 'Search for an image on the registry (defaults to the Docker Hub)' complete -c docker -A -f -n '__fish_seen_subcommand_from search' -l automated -d 'Only show automated builds' complete -c docker -A -f -n '__fish_seen_subcommand_from search' -l help -d 'Print usage' complete -c docker -A -f -n '__fish_seen_subcommand_from search' -l no-trunc -d "Don't truncate output" diff --git a/contrib/completion/zsh/REVIEWERS b/contrib/completion/zsh/REVIEWERS new file mode 100644 index 0000000000..a9d0da5132 --- /dev/null +++ b/contrib/completion/zsh/REVIEWERS @@ -0,0 +1,3 @@ +Tianon Gravi (@tianon) +Jessie Frazelle (@jfrazelle) +Vincent Bernat (@vincentbernat) diff --git a/contrib/completion/zsh/_docker b/contrib/completion/zsh/_docker index 9104f385d7..28398f7524 100644 --- a/contrib/completion/zsh/_docker +++ b/contrib/completion/zsh/_docker @@ -197,8 +197,10 @@ __docker_subcommand () { ;; (build) _arguments \ + {-f,--file=-}'[Dockerfile to use]:Dockerfile:_files' \ '--force-rm[Always remove intermediate containers]' \ '--no-cache[Do not use cache when building the image]' \ + '--pull[Attempt to pull a newer version of the image]' \ {-q,--quiet}'[Suppress verbose build output]' \ '--rm[Remove intermediate containers after a successful build]' \ {-t,--tag=-}'[Repository, name and tag to be applied]:repository:__docker_repositories_with_tags' \ @@ -209,7 +211,6 @@ __docker_subcommand () { {-a,--author=-}'[Author]:author: ' \ {-m,--message=-}'[Commit message]:message: ' \ {-p,--pause}'[Pause container during commit]' \ - '--run=-[Configuration automatically applied when the image is run]:configuration: ' \ ':container:__docker_containers' \ ':repository:__docker_repositories_with_tags' ;; @@ -232,15 +233,28 @@ __docker_subcommand () { ;; (events) _arguments \ + '*'{-f,--filter=-}'[Filter values]:filter: ' \ '--since=-[Events created since this timestamp]:timestamp: ' \ '--until=-[Events created until this timestamp]:timestamp: ' ;; (exec) + local state ret _arguments \ {-d,--detach}'[Detached mode: leave the container running in the background]' \ {-i,--interactive}'[Keep stdin open even if not attached]' \ {-t,--tty}'[Allocate a pseudo-tty]' \ - ':containers:__docker_runningcontainers' + ':containers:__docker_runningcontainers' \ + '*::command:->anycommand' && ret=0 + + case $state in + (anycommand) + shift 1 words + (( CURRENT-- )) + _normal + ;; + esac + + return ret ;; (history) _arguments \ @@ -254,15 +268,8 @@ __docker_subcommand () { '*'{-f,--filter=-}'[Filter values]:filter: ' \ '--no-trunc[Do not truncate output]' \ {-q,--quiet}'[Only show numeric IDs]' \ - '--tree[Output graph in tree format]' \ - '--viz[Output graph in graphviz format]' \ ':repository:__docker_repositories' ;; - (inspect) - _arguments \ - {-f,--format=-}'[Format the output using the given go template]:template: ' \ - '*:containers:__docker_containers' - ;; (import) _arguments \ ':URL:(- http:// file://)' \ @@ -270,15 +277,10 @@ __docker_subcommand () { ;; (info) ;; - (import) + (inspect) _arguments \ - ':URL:(- http:// file://)' \ - ':repository:__docker_repositories_with_tags' - ;; - (insert) - _arguments '1:containers:__docker_containers' \ - '2:URL:(http:// file://)' \ - '3:file:_files' + {-f,--format=-}'[Format the output using the given go template]:template: ' \ + '*:containers:__docker_containers' ;; (kill) _arguments \ @@ -287,7 +289,7 @@ __docker_subcommand () { ;; (load) _arguments \ - {-i,--input=-}'[Read from tar archive file]:tar:_files' + {-i,--input=-}'[Read from tar archive file]:archive file:_files -g "*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)"' ;; (login) _arguments \ @@ -304,6 +306,7 @@ __docker_subcommand () { _arguments \ {-f,--follow}'[Follow log output]' \ {-t,--timestamps}'[Show timestamps]' \ + '--tail=-[Output the last K lines]:lines:(1 10 20 50 all)' \ '*:containers:__docker_containers' ;; (port) @@ -321,6 +324,10 @@ __docker_subcommand () { {-i,--interactive}'[Attach container'"'"'s stding]' \ '*:containers:__docker_stoppedcontainers' ;; + (stats) + _arguments \ + '*:containers:__docker_runningcontainers' + ;; (rm) _arguments \ {-f,--force}'[Force removal]' \ @@ -391,7 +398,7 @@ __docker_subcommand () { '*--lxc-conf=-[Add custom lxc options]:lxc options: ' \ '-m[Memory limit (in bytes)]:limit: ' \ '--name=-[Container name]:name: ' \ - '--net=-[Network mode]:network mode:(bridge none container: host)' \ + '--net=-[Network mode]:network mode:(bridge none container host)' \ {-P,--publish-all}'[Publish all exposed ports]' \ '*'{-p,--publish=-}'[Expose a container'"'"'s port to the host]:port:_ports' \ '--privileged[Give extended privileges to this container]' \ @@ -419,19 +426,33 @@ __docker_subcommand () { esac ;; - (pull|search) - _arguments ':name:__docker_search' + (pull) + _arguments \ + {-a,--all-tags}'[Download all tagged images]' \ + ':name:__docker_search' ;; (push) _arguments ':images:__docker_images' ;; + (rename) + _arguments \ + ':old name:__docker_containers' \ + ':new name: ' + ;; (save) _arguments \ {-o,--output=-}'[Write to file]:file:_files' \ - ':images:__docker_images' + '*:images:__docker_images' + ;; + (search) + _arguments \ + '--automated[Only show automated builds]' \ + '--no-trunc[Do not truncate output]' \ + {-s,--stars=-}'[Only display with at least X stars]:stars:(0 10 100 1000)' \ + ':term: ' ;; (wait) - _arguments ':containers:__docker_runningcontainers' + _arguments '*:containers:__docker_runningcontainers' ;; (help) _arguments ':subcommand:__docker_commands' diff --git a/contrib/download-frozen-image.sh b/contrib/download-frozen-image.sh new file mode 100755 index 0000000000..b45cba9813 --- /dev/null +++ b/contrib/download-frozen-image.sh @@ -0,0 +1,104 @@ +#!/bin/bash +set -e + +# hello-world latest ef872312fe1b 3 months ago 910 B +# hello-world latest ef872312fe1bbc5e05aae626791a47ee9b032efa8f3bda39cc0be7b56bfe59b9 3 months ago 910 B + +# debian latest f6fab3b798be 10 weeks ago 85.1 MB +# debian latest f6fab3b798be3174f45aa1eb731f8182705555f89c9026d8c1ef230cbf8301dd 10 weeks ago 85.1 MB + +if ! command -v curl &> /dev/null; then + echo >&2 'error: "curl" not found!' + exit 1 +fi + +usage() { + echo "usage: $0 dir image[:tag][@image-id] ..." + echo " ie: $0 /tmp/hello-world hello-world" + echo " $0 /tmp/debian-jessie debian:jessie" + echo " $0 /tmp/old-hello-world hello-world@ef872312fe1bbc5e05aae626791a47ee9b032efa8f3bda39cc0be7b56bfe59b9" + echo " $0 /tmp/old-debian debian:latest@f6fab3b798be3174f45aa1eb731f8182705555f89c9026d8c1ef230cbf8301dd" + [ -z "$1" ] || exit "$1" +} + +dir="$1" # dir for building tar in +shift || usage 1 >&2 + +[ $# -gt 0 -a "$dir" ] || usage 2 >&2 +mkdir -p "$dir" + +# hacky workarounds for Bash 3 support (no associative arrays) +images=() +rm -f "$dir"/tags-*.tmp +# repositories[busybox]='"latest": "...", "ubuntu-14.04": "..."' + +while [ $# -gt 0 ]; do + imageTag="$1" + shift + image="${imageTag%%[:@]*}" + tag="${imageTag#*:}" + imageId="${tag##*@}" + [ "$imageId" != "$tag" ] || imageId= + [ "$tag" != "$imageTag" ] || tag='latest' + tag="${tag%@*}" + + token="$(curl -sSL -o /dev/null -D- -H 'X-Docker-Token: true' "https://index.docker.io/v1/repositories/$image/images" | tr -d '\r' | awk -F ': *' '$1 == "X-Docker-Token" { print $2 }')" + + if [ -z "$imageId" ]; then + imageId="$(curl -sSL -H "Authorization: Token $token" "https://registry-1.docker.io/v1/repositories/$image/tags/$tag")" + imageId="${imageId//\"/}" + fi + + ancestryJson="$(curl -sSL -H "Authorization: Token $token" "https://registry-1.docker.io/v1/images/$imageId/ancestry")" + if [ "${ancestryJson:0:1}" != '[' ]; then + echo >&2 "error: /v1/images/$imageId/ancestry returned something unexpected:" + echo >&2 " $ancestryJson" + exit 1 + fi + + IFS=',' + ancestry=( ${ancestryJson//[\[\] \"]/} ) + unset IFS + + if [ -s "$dir/tags-$image.tmp" ]; then + echo -n ', ' >> "$dir/tags-$image.tmp" + else + images=( "${images[@]}" "$image" ) + fi + echo -n '"'"$tag"'": "'"$imageId"'"' >> "$dir/tags-$image.tmp" + + echo "Downloading '$imageTag' (${#ancestry[@]} layers)..." + for imageId in "${ancestry[@]}"; do + mkdir -p "$dir/$imageId" + echo '1.0' > "$dir/$imageId/VERSION" + + curl -sSL -H "Authorization: Token $token" "https://registry-1.docker.io/v1/images/$imageId/json" -o "$dir/$imageId/json" + + # TODO figure out why "-C -" doesn't work here + # "curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume." + # "HTTP/1.1 416 Requested Range Not Satisfiable" + if [ -f "$dir/$imageId/layer.tar" ]; then + # TODO hackpatch for no -C support :'( + echo "skipping existing ${imageId:0:12}" + continue + fi + curl -SL --progress -H "Authorization: Token $token" "https://registry-1.docker.io/v1/images/$imageId/layer" -o "$dir/$imageId/layer.tar" # -C - + done + echo +done + +echo -n '{' > "$dir/repositories" +firstImage=1 +for image in "${images[@]}"; do + [ "$firstImage" ] || echo -n ',' >> "$dir/repositories" + firstImage= + echo -n $'\n\t' >> "$dir/repositories" + echo -n '"'"$image"'": { '"$(cat "$dir/tags-$image.tmp")"' }' >> "$dir/repositories" +done +echo -n $'\n}\n' >> "$dir/repositories" + +rm -f "$dir"/tags-*.tmp + +echo "Download of images into '$dir' complete." +echo "Use something like the following to load the result into a Docker daemon:" +echo " tar -cC '$dir' . | docker load" diff --git a/contrib/httpserver/Dockerfile b/contrib/httpserver/Dockerfile new file mode 100644 index 0000000000..747dc91bcf --- /dev/null +++ b/contrib/httpserver/Dockerfile @@ -0,0 +1,4 @@ +FROM busybox +EXPOSE 80/tcp +COPY httpserver . +CMD ["./httpserver"] diff --git a/contrib/httpserver/server.go b/contrib/httpserver/server.go new file mode 100644 index 0000000000..a75d5abb3d --- /dev/null +++ b/contrib/httpserver/server.go @@ -0,0 +1,12 @@ +package main + +import ( + "log" + "net/http" +) + +func main() { + fs := http.FileServer(http.Dir("/static")) + http.Handle("/", fs) + log.Panic(http.ListenAndServe(":80", nil)) +} diff --git a/contrib/init/systemd/MAINTAINERS b/contrib/init/systemd/REVIEWERS similarity index 100% rename from contrib/init/systemd/MAINTAINERS rename to contrib/init/systemd/REVIEWERS diff --git a/contrib/init/systemd/docker.service b/contrib/init/systemd/docker.service index 9738ca1ad5..bc73448842 100644 --- a/contrib/init/systemd/docker.service +++ b/contrib/init/systemd/docker.service @@ -9,6 +9,7 @@ ExecStart=/usr/bin/docker -d -H fd:// MountFlags=slave LimitNOFILE=1048576 LimitNPROC=1048576 +LimitCORE=infinity [Install] WantedBy=multi-user.target diff --git a/contrib/init/sysvinit-redhat/docker b/contrib/init/sysvinit-redhat/docker index 1994d6b31e..d51e2f8ba1 100755 --- a/contrib/init/sysvinit-redhat/docker +++ b/contrib/init/sysvinit-redhat/docker @@ -43,6 +43,8 @@ prestart() { start() { [ -x $exec ] || exit 5 + check_for_cleanup + if ! [ -f $pidfile ]; then prestart printf "Starting $prog:\t" @@ -97,6 +99,13 @@ rh_status_q() { rh_status >/dev/null 2>&1 } + +check_for_cleanup() { + if [ -f ${pidfile} ]; then + /bin/ps -fp $(cat ${pidfile}) > /dev/null || rm ${pidfile} + fi +} + case "$1" in start) rh_status_q && exit 0 diff --git a/contrib/init/upstart/MAINTAINERS b/contrib/init/upstart/REVIEWERS similarity index 100% rename from contrib/init/upstart/MAINTAINERS rename to contrib/init/upstart/REVIEWERS diff --git a/contrib/mkimage-alpine.sh b/contrib/mkimage-alpine.sh index b9869ae61e..71fb914388 100755 --- a/contrib/mkimage-alpine.sh +++ b/contrib/mkimage-alpine.sh @@ -72,7 +72,7 @@ REL=${REL:-edge} MIRROR=${MIRROR:-http://nl.alpinelinux.org/alpine} SAVE=${SAVE:-0} REPO=$MIRROR/$REL/main -ARCH=$(uname -m) +ARCH=${ARCH:-$(uname -m)} tmp getapk diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index 382e2f7802..bbecf72903 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -87,5 +87,5 @@ mknod -m 666 $DEV/ptmx c 5 2 ln -sf /proc/self/fd $DEV/fd tar --numeric-owner --xattrs --acls -C $ROOTFS -c . | docker import - archlinux -docker run -i -t archlinux echo Success. +docker run -t archlinux echo Success. rm -rf $ROOTFS diff --git a/contrib/mkimage-yum.sh b/contrib/mkimage-yum.sh index 80f7b4956f..f48cb4340f 100755 --- a/contrib/mkimage-yum.sh +++ b/contrib/mkimage-yum.sh @@ -57,6 +57,12 @@ mknod -m 666 "$target"/dev/tty0 c 4 0 mknod -m 666 "$target"/dev/urandom c 1 9 mknod -m 666 "$target"/dev/zero c 1 5 +# amazon linux yum will fail without vars set +if [ -d /etc/yum/vars ]; then + mkdir -p -m 755 "$target"/etc/yum + cp -a /etc/yum/vars "$target"/etc/yum/ +fi + yum -c "$yum_config" --installroot="$target" --releasever=/ --setopt=tsflags=nodocs \ --setopt=group_package_types=mandatory -y groupinstall Core yum -c "$yum_config" --installroot="$target" -y clean all @@ -83,9 +89,13 @@ rm -rf "$target"/etc/ld.so.cache rm -rf "$target"/var/cache/ldconfig/* version= -if [ -r "$target"/etc/redhat-release ]; then - version="$(sed 's/^[^0-9\]*\([0-9.]\+\).*$/\1/' "$target"/etc/redhat-release)" -fi +for file in "$target"/etc/{redhat,system}-release +do + if [ -r "$file" ]; then + version="$(sed 's/^[^0-9\]*\([0-9.]\+\).*$/\1/' "$file")" + break + fi +done if [ -z "$version" ]; then echo >&2 "warning: cannot autodetect OS version, using '$name' as tag" diff --git a/contrib/mkimage/debootstrap b/contrib/mkimage/debootstrap index c7a2b66830..72983d249b 100755 --- a/contrib/mkimage/debootstrap +++ b/contrib/mkimage/debootstrap @@ -15,6 +15,16 @@ done suite="$1" shift +# get path to "chroot" in our current PATH +chrootPath="$(type -P chroot)" +rootfs_chroot() { + # "chroot" doesn't set PATH, so we need to set it explicitly to something our new debootstrap chroot can use appropriately! + + # set PATH and chroot away! + PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' \ + "$chrootPath" "$rootfsDir" "$@" +} + # allow for DEBOOTSTRAP=qemu-debootstrap ./mkimage.sh ... : ${DEBOOTSTRAP:=debootstrap} @@ -28,26 +38,26 @@ shift # prevent init scripts from running during install/update echo >&2 "+ echo exit 101 > '$rootfsDir/usr/sbin/policy-rc.d'" cat > "$rootfsDir/usr/sbin/policy-rc.d" <<'EOF' -#!/bin/sh + #!/bin/sh -# For most Docker users, "apt-get install" only happens during "docker build", -# where starting services doesn't work and often fails in humorous ways. This -# prevents those failures by stopping the services from attempting to start. + # For most Docker users, "apt-get install" only happens during "docker build", + # where starting services doesn't work and often fails in humorous ways. This + # prevents those failures by stopping the services from attempting to start. -exit 101 + exit 101 EOF chmod +x "$rootfsDir/usr/sbin/policy-rc.d" # prevent upstart scripts from running during install/update ( set -x - chroot "$rootfsDir" dpkg-divert --local --rename --add /sbin/initctl + rootfs_chroot dpkg-divert --local --rename --add /sbin/initctl cp -a "$rootfsDir/usr/sbin/policy-rc.d" "$rootfsDir/sbin/initctl" sed -i 's/^exit.*/exit 0/' "$rootfsDir/sbin/initctl" ) # shrink a little, since apt makes us cache-fat (wheezy: ~157.5MB vs ~120MB) -( set -x; chroot "$rootfsDir" apt-get clean ) +( set -x; rootfs_chroot apt-get clean ) # this file is one APT creates to make sure we don't "autoremove" our currently # in-use kernel, which doesn't really apply to debootstraps/Docker images that @@ -59,12 +69,12 @@ if strings "$rootfsDir/usr/bin/dpkg" | grep -q unsafe-io; then # force dpkg not to call sync() after package extraction (speeding up installs) echo >&2 "+ echo force-unsafe-io > '$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup'" cat > "$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup" <<-'EOF' - # For most Docker users, package installs happen during "docker build", which - # doesn't survive power loss and gets restarted clean afterwards anyhow, so - # this minor tweak gives us a nice speedup (much nicer on spinning disks, - # obviously). + # For most Docker users, package installs happen during "docker build", which + # doesn't survive power loss and gets restarted clean afterwards anyhow, so + # this minor tweak gives us a nice speedup (much nicer on spinning disks, + # obviously). - force-unsafe-io + force-unsafe-io EOF fi @@ -97,26 +107,47 @@ if [ -d "$rootfsDir/etc/apt/apt.conf.d" ]; then # remove apt-cache translations for fast "apt-get update" echo >&2 "+ echo Acquire::Languages 'none' > '$rootfsDir/etc/apt/apt.conf.d/docker-no-languages'" cat > "$rootfsDir/etc/apt/apt.conf.d/docker-no-languages" <<-'EOF' - # In Docker, we don't often need the "Translations" files, so we're just wasting - # time and space by downloading them, and this inhibits that. For users that do - # need them, it's a simple matter to delete this file and "apt-get update". :) + # In Docker, we don't often need the "Translations" files, so we're just wasting + # time and space by downloading them, and this inhibits that. For users that do + # need them, it's a simple matter to delete this file and "apt-get update". :) - Acquire::Languages "none"; + Acquire::Languages "none"; EOF echo >&2 "+ echo Acquire::GzipIndexes 'true' > '$rootfsDir/etc/apt/apt.conf.d/docker-gzip-indexes'" cat > "$rootfsDir/etc/apt/apt.conf.d/docker-gzip-indexes" <<-'EOF' - # Since Docker users using "RUN apt-get update && apt-get install -y ..." in - # their Dockerfiles don't go delete the lists files afterwards, we want them to - # be as small as possible on-disk, so we explicitly request "gz" versions and - # tell Apt to keep them gzipped on-disk. + # Since Docker users using "RUN apt-get update && apt-get install -y ..." in + # their Dockerfiles don't go delete the lists files afterwards, we want them to + # be as small as possible on-disk, so we explicitly request "gz" versions and + # tell Apt to keep them gzipped on-disk. - # For comparison, an "apt-get update" layer without this on a pristine - # "debian:wheezy" base image was "29.88 MB", where with this it was only - # "8.273 MB". + # For comparison, an "apt-get update" layer without this on a pristine + # "debian:wheezy" base image was "29.88 MB", where with this it was only + # "8.273 MB". - Acquire::GzipIndexes "true"; - Acquire::CompressionTypes::Order:: "gz"; + Acquire::GzipIndexes "true"; + Acquire::CompressionTypes::Order:: "gz"; + EOF + + # update "autoremove" configuration to be aggressive about removing suggests deps that weren't manually installed + echo >&2 "+ echo Apt::AutoRemove::SuggestsImportant 'false' > '$rootfsDir/etc/apt/apt.conf.d/docker-autoremove-suggests'" + cat > "$rootfsDir/etc/apt/apt.conf.d/docker-autoremove-suggests" <<-'EOF' + # Since Docker users are looking for the smallest possible final images, the + # following emerges as a very common pattern: + + # RUN apt-get update \ + # && apt-get install -y \ + # && \ + # && apt-get purge -y --auto-remove + + # By default, APT will actually _keep_ packages installed via Recommends or + # Depends if another package Suggests them, even and including if the package + # that originally caused them to be installed is removed. Setting this to + # "false" ensures that APT is appropriately aggressive about removing the + # packages it added. + + # https://aptitude.alioth.debian.org/doc/en/ch02s05s05.html#configApt-AutoRemove-SuggestsImportant + Apt::AutoRemove::SuggestsImportant "false"; EOF fi @@ -191,7 +222,7 @@ fi set -x # make sure we're fully up-to-date - chroot "$rootfsDir" bash -c 'apt-get update && apt-get dist-upgrade -y' + rootfs_chroot sh -xc 'apt-get update && apt-get dist-upgrade -y' # delete all the apt list files since they're big and get stale quickly rm -rf "$rootfsDir/var/lib/apt/lists"/* diff --git a/project/stats.sh b/contrib/project-stats.sh similarity index 100% rename from project/stats.sh rename to contrib/project-stats.sh diff --git a/project/report-issue.sh b/contrib/report-issue.sh similarity index 100% rename from project/report-issue.sh rename to contrib/report-issue.sh diff --git a/contrib/syntax/kate/Dockerfile.xml b/contrib/syntax/kate/Dockerfile.xml index e5602397ba..4fdef2393b 100644 --- a/contrib/syntax/kate/Dockerfile.xml +++ b/contrib/syntax/kate/Dockerfile.xml @@ -22,6 +22,7 @@ CMD WORKDIR USER + LABEL diff --git a/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage b/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage index 1d19a3ba2e..75efc2e811 100644 --- a/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage +++ b/contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage @@ -12,7 +12,7 @@ match - ^\s*(ONBUILD\s+)?(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|VOLUME|USER|WORKDIR|COPY)\s + ^\s*(ONBUILD\s+)?(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|VOLUME|USER|LABEL|WORKDIR|COPY)\s captures 0 diff --git a/contrib/syntax/textmate/MAINTAINERS b/contrib/syntax/textmate/REVIEWERS similarity index 100% rename from contrib/syntax/textmate/MAINTAINERS rename to contrib/syntax/textmate/REVIEWERS diff --git a/contrib/syntax/vim/syntax/dockerfile.vim b/contrib/syntax/vim/syntax/dockerfile.vim index 2984bec5f8..36691e2504 100644 --- a/contrib/syntax/vim/syntax/dockerfile.vim +++ b/contrib/syntax/vim/syntax/dockerfile.vim @@ -11,7 +11,7 @@ let b:current_syntax = "dockerfile" syntax case ignore -syntax match dockerfileKeyword /\v^\s*(ONBUILD\s+)?(ADD|CMD|ENTRYPOINT|ENV|EXPOSE|FROM|MAINTAINER|RUN|USER|VOLUME|WORKDIR|COPY)\s/ +syntax match dockerfileKeyword /\v^\s*(ONBUILD\s+)?(ADD|CMD|ENTRYPOINT|ENV|EXPOSE|FROM|MAINTAINER|RUN|USER|LABEL|VOLUME|WORKDIR|COPY)\s/ highlight link dockerfileKeyword Keyword syntax region dockerfileString start=/\v"/ skip=/\v\\./ end=/\v"/ diff --git a/daemon/MAINTAINERS b/daemon/MAINTAINERS deleted file mode 100644 index 9360465f2d..0000000000 --- a/daemon/MAINTAINERS +++ /dev/null @@ -1,7 +0,0 @@ -Solomon Hykes (@shykes) -Victor Vieux (@vieux) -Michael Crosby (@crosbymichael) -Cristian Staretu (@unclejack) -Tibor Vass (@tiborvass) -Vishnu Kannan (@vishh) -volumes.go: Brian Goff (@cpuguy83) diff --git a/daemon/attach.go b/daemon/attach.go index 881b021e17..967c86387f 100644 --- a/daemon/attach.go +++ b/daemon/attach.go @@ -28,9 +28,9 @@ func (daemon *Daemon) ContainerAttach(job *engine.Job) engine.Status { stderr = job.GetenvBool("stderr") ) - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } //logs @@ -101,7 +101,7 @@ func (daemon *Daemon) ContainerAttach(job *engine.Job) engine.Status { cStderr = job.Stderr } - <-daemon.attach(&container.StreamConfig, container.Config.OpenStdin, container.Config.StdinOnce, container.Config.Tty, cStdin, cStdout, cStderr) + <-daemon.Attach(&container.StreamConfig, container.Config.OpenStdin, container.Config.StdinOnce, container.Config.Tty, cStdin, cStdout, cStderr) // If we are in stdinonce mode, wait for the process to end // otherwise, simply return if container.Config.StdinOnce && !container.Config.Tty { @@ -111,7 +111,7 @@ func (daemon *Daemon) ContainerAttach(job *engine.Job) engine.Status { return engine.StatusOK } -func (daemon *Daemon) attach(streamConfig *StreamConfig, openStdin, stdinOnce, tty bool, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer) chan error { +func (daemon *Daemon) Attach(streamConfig *StreamConfig, openStdin, stdinOnce, tty bool, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer) chan error { var ( cStdout, cStderr io.ReadCloser cStdin io.WriteCloser diff --git a/daemon/changes.go b/daemon/changes.go index 1e5726eda8..faa4323145 100644 --- a/daemon/changes.go +++ b/daemon/changes.go @@ -9,24 +9,29 @@ func (daemon *Daemon) ContainerChanges(job *engine.Job) engine.Status { return job.Errorf("Usage: %s CONTAINER", job.Name) } name := job.Args[0] - if container := daemon.Get(name); container != nil { - outs := engine.NewTable("", 0) - changes, err := container.Changes() - if err != nil { - return job.Error(err) - } - for _, change := range changes { - out := &engine.Env{} - if err := out.Import(change); err != nil { - return job.Error(err) - } - outs.Add(out) - } - if _, err := outs.WriteListTo(job.Stdout); err != nil { - return job.Error(err) - } - } else { - return job.Errorf("No such container: %s", name) + + container, error := daemon.Get(name) + if error != nil { + return job.Error(error) } + + outs := engine.NewTable("", 0) + changes, err := container.Changes() + if err != nil { + return job.Error(err) + } + + for _, change := range changes { + out := &engine.Env{} + if err := out.Import(change); err != nil { + return job.Error(err) + } + outs.Add(out) + } + + if _, err := outs.WriteListTo(job.Stdout); err != nil { + return job.Error(err) + } + return engine.StatusOK } diff --git a/daemon/commit.go b/daemon/commit.go index 06d0465adc..f1496a414a 100644 --- a/daemon/commit.go +++ b/daemon/commit.go @@ -1,6 +1,9 @@ package daemon import ( + "bytes" + "encoding/json" + "github.com/docker/docker/engine" "github.com/docker/docker/image" "github.com/docker/docker/runconfig" @@ -12,17 +15,27 @@ func (daemon *Daemon) ContainerCommit(job *engine.Job) engine.Status { } name := job.Args[0] - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } var ( - config = container.Config - newConfig runconfig.Config + config = container.Config + stdoutBuffer = bytes.NewBuffer(nil) + newConfig runconfig.Config ) - if err := job.GetenvJson("config", &newConfig); err != nil { + buildConfigJob := daemon.eng.Job("build_config") + buildConfigJob.Stdout.Add(stdoutBuffer) + buildConfigJob.Setenv("changes", job.Getenv("changes")) + // FIXME this should be remove when we remove deprecated config param + buildConfigJob.Setenv("config", job.Getenv("config")) + + if err := buildConfigJob.Run(); err != nil { + return job.Error(err) + } + if err := json.NewDecoder(stdoutBuffer).Decode(&newConfig); err != nil { return job.Error(err) } @@ -41,7 +54,7 @@ func (daemon *Daemon) ContainerCommit(job *engine.Job) engine.Status { // Commit creates a new filesystem image from the current state of a container. // The image can optionally be tagged into a repository func (daemon *Daemon) Commit(container *Container, repository, tag, comment, author string, pause bool, config *runconfig.Config) (*image.Image, error) { - if pause { + if pause && !container.IsPaused() { container.Pause() defer container.Unpause() } diff --git a/daemon/config.go b/daemon/config.go index 99e5ce4c8b..4adc025eef 100644 --- a/daemon/config.go +++ b/daemon/config.go @@ -6,6 +6,8 @@ import ( "github.com/docker/docker/daemon/networkdriver" "github.com/docker/docker/opts" flag "github.com/docker/docker/pkg/mflag" + "github.com/docker/docker/pkg/ulimit" + "github.com/docker/docker/runconfig" ) const ( @@ -37,11 +39,16 @@ type Config struct { GraphOptions []string ExecDriver string Mtu int + SocketGroup string + EnableCors bool + CorsHeaders string DisableNetwork bool EnableSelinuxSupport bool Context map[string][]string TrustKeyPath string Labels []string + Ulimits map[string]*ulimit.Ulimit + LogConfig runconfig.LogConfig } // InstallFlags adds command-line options to the top-level flag parser for @@ -50,27 +57,33 @@ type Config struct { // from the command-line. func (config *Config) InstallFlags() { flag.StringVar(&config.Pidfile, []string{"p", "-pidfile"}, "/var/run/docker.pid", "Path to use for daemon PID file") - flag.StringVar(&config.Root, []string{"g", "-graph"}, "/var/lib/docker", "Path to use as the root of the Docker runtime") + flag.StringVar(&config.Root, []string{"g", "-graph"}, "/var/lib/docker", "Root of the Docker runtime") flag.BoolVar(&config.AutoRestart, []string{"#r", "#-restart"}, true, "--restart on the daemon has been deprecated in favor of --restart policies on docker run") - flag.BoolVar(&config.EnableIptables, []string{"#iptables", "-iptables"}, true, "Enable Docker's addition of iptables rules") - flag.BoolVar(&config.EnableIpForward, []string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward and IPv6 forwarding if --fixed-cidr-v6 is defined. IPv6 forwarding may interfere with your existing IPv6 configuration when using Router Advertisement.") - flag.BoolVar(&config.EnableIpMasq, []string{"-ip-masq"}, true, "Enable IP masquerading for bridge's IP range") + flag.BoolVar(&config.EnableIptables, []string{"#iptables", "-iptables"}, true, "Enable addition of iptables rules") + flag.BoolVar(&config.EnableIpForward, []string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward") + flag.BoolVar(&config.EnableIpMasq, []string{"-ip-masq"}, true, "Enable IP masquerading") flag.BoolVar(&config.EnableIPv6, []string{"-ipv6"}, false, "Enable IPv6 networking") - flag.StringVar(&config.BridgeIP, []string{"#bip", "-bip"}, "", "Use this CIDR notation address for the network bridge's IP, not compatible with -b") - flag.StringVar(&config.BridgeIface, []string{"b", "-bridge"}, "", "Attach containers to a pre-existing network bridge\nuse 'none' to disable container networking") - flag.StringVar(&config.FixedCIDR, []string{"-fixed-cidr"}, "", "IPv4 subnet for fixed IPs (e.g. 10.20.0.0/16)\nthis subnet must be nested in the bridge subnet (which is defined by -b or --bip)") - flag.StringVar(&config.FixedCIDRv6, []string{"-fixed-cidr-v6"}, "", "IPv6 subnet for fixed IPs (e.g.: 2001:a02b/48)") - flag.BoolVar(&config.InterContainerCommunication, []string{"#icc", "-icc"}, true, "Allow unrestricted inter-container and Docker daemon host communication") - flag.StringVar(&config.GraphDriver, []string{"s", "-storage-driver"}, "", "Force the Docker runtime to use a specific storage driver") - flag.StringVar(&config.ExecDriver, []string{"e", "-exec-driver"}, "native", "Force the Docker runtime to use a specific exec driver") - flag.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, "Enable selinux support. SELinux does not presently support the BTRFS storage driver") - flag.IntVar(&config.Mtu, []string{"#mtu", "-mtu"}, 0, "Set the containers network MTU\nif no value is provided: default to the default route MTU or 1500 if no default route is available") - opts.IPVar(&config.DefaultIp, []string{"#ip", "-ip"}, "0.0.0.0", "Default IP address to use when binding container ports") + flag.StringVar(&config.BridgeIP, []string{"#bip", "-bip"}, "", "Specify network bridge IP") + flag.StringVar(&config.BridgeIface, []string{"b", "-bridge"}, "", "Attach containers to a network bridge") + flag.StringVar(&config.FixedCIDR, []string{"-fixed-cidr"}, "", "IPv4 subnet for fixed IPs") + flag.StringVar(&config.FixedCIDRv6, []string{"-fixed-cidr-v6"}, "", "IPv6 subnet for fixed IPs") + flag.BoolVar(&config.InterContainerCommunication, []string{"#icc", "-icc"}, true, "Enable inter-container communication") + flag.StringVar(&config.GraphDriver, []string{"s", "-storage-driver"}, "", "Storage driver to use") + flag.StringVar(&config.ExecDriver, []string{"e", "-exec-driver"}, "native", "Exec driver to use") + flag.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, "Enable selinux support") + flag.IntVar(&config.Mtu, []string{"#mtu", "-mtu"}, 0, "Set the containers network MTU") + flag.StringVar(&config.SocketGroup, []string{"G", "-group"}, "docker", "Group for the unix socket") + flag.BoolVar(&config.EnableCors, []string{"#api-enable-cors", "#-api-enable-cors"}, false, "Enable CORS headers in the remote API, this is deprecated by --api-cors-header") + flag.StringVar(&config.CorsHeaders, []string{"-api-cors-header"}, "", "Set CORS headers in the remote API") + opts.IPVar(&config.DefaultIp, []string{"#ip", "-ip"}, "0.0.0.0", "Default IP when binding container ports") opts.ListVar(&config.GraphOptions, []string{"-storage-opt"}, "Set storage driver options") // FIXME: why the inconsistency between "hosts" and "sockets"? - opts.IPListVar(&config.Dns, []string{"#dns", "-dns"}, "Force Docker to use specific DNS servers") - opts.DnsSearchListVar(&config.DnsSearch, []string{"-dns-search"}, "Force Docker to use specific DNS search domains") - opts.LabelListVar(&config.Labels, []string{"-label"}, "Set key=value labels to the daemon (displayed in `docker info`)") + opts.IPListVar(&config.Dns, []string{"#dns", "-dns"}, "DNS server to use") + opts.DnsSearchListVar(&config.DnsSearch, []string{"-dns-search"}, "DNS search domains to use") + opts.LabelListVar(&config.Labels, []string{"-label"}, "Set key=value labels to the daemon") + config.Ulimits = make(map[string]*ulimit.Ulimit) + opts.UlimitMapVar(config.Ulimits, []string{"-default-ulimit"}, "Set default ulimits for containers") + flag.StringVar(&config.LogConfig.Type, []string{"-log-driver"}, "json-file", "Containers logging driver(json-file/none)") } func getDefaultNetworkMtu() int { diff --git a/daemon/container.go b/daemon/container.go index c1c215ffee..0fff3238e9 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -14,22 +14,29 @@ import ( "syscall" "time" + "github.com/docker/libcontainer" + "github.com/docker/libcontainer/configs" "github.com/docker/libcontainer/devices" "github.com/docker/libcontainer/label" log "github.com/Sirupsen/logrus" "github.com/docker/docker/daemon/execdriver" + "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/daemon/logger/jsonfilelog" "github.com/docker/docker/engine" "github.com/docker/docker/image" "github.com/docker/docker/links" "github.com/docker/docker/nat" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/broadcastwriter" + "github.com/docker/docker/pkg/common" + "github.com/docker/docker/pkg/directory" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/networkfs/etchosts" "github.com/docker/docker/pkg/networkfs/resolvconf" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/symlink" + "github.com/docker/docker/pkg/ulimit" "github.com/docker/docker/runconfig" "github.com/docker/docker/utils" ) @@ -70,6 +77,7 @@ type Container struct { ResolvConfPath string HostnamePath string HostsPath string + LogPath string Name string Driver string ExecDriver string @@ -92,9 +100,12 @@ type Container struct { VolumesRW map[string]bool hostConfig *runconfig.HostConfig - activeLinks map[string]*links.Link - monitor *containerMonitor - execCommands *execStore + activeLinks map[string]*links.Link + monitor *containerMonitor + execCommands *execStore + // logDriver for closing + logDriver logger.Logger + logCopier *logger.Copier AppliedVolumesFrom map[string]struct{} } @@ -255,18 +266,18 @@ func populateCommand(c *Container, env []string) error { pid.HostPid = c.hostConfig.PidMode.IsHost() // Build lists of devices allowed and created within the container. - userSpecifiedDevices := make([]*devices.Device, len(c.hostConfig.Devices)) + userSpecifiedDevices := make([]*configs.Device, len(c.hostConfig.Devices)) for i, deviceMapping := range c.hostConfig.Devices { - device, err := devices.GetDevice(deviceMapping.PathOnHost, deviceMapping.CgroupPermissions) + device, err := devices.DeviceFromPath(deviceMapping.PathOnHost, deviceMapping.CgroupPermissions) if err != nil { return fmt.Errorf("error gathering device information while adding custom device %q: %s", deviceMapping.PathOnHost, err) } device.Path = deviceMapping.PathInContainer userSpecifiedDevices[i] = device } - allowedDevices := append(devices.DefaultAllowedDevices, userSpecifiedDevices...) + allowedDevices := append(configs.DefaultAllowedDevices, userSpecifiedDevices...) - autoCreatedDevices := append(devices.DefaultAutoCreatedDevices, userSpecifiedDevices...) + autoCreatedDevices := append(configs.DefaultAutoCreatedDevices, userSpecifiedDevices...) // TODO: this can be removed after lxc-conf is fully deprecated lxcConfig, err := mergeLxcConfIntoOptions(c.hostConfig) @@ -274,11 +285,34 @@ func populateCommand(c *Container, env []string) error { return err } + var rlimits []*ulimit.Rlimit + ulimits := c.hostConfig.Ulimits + + // Merge ulimits with daemon defaults + ulIdx := make(map[string]*ulimit.Ulimit) + for _, ul := range ulimits { + ulIdx[ul.Name] = ul + } + for name, ul := range c.daemon.config.Ulimits { + if _, exists := ulIdx[name]; !exists { + ulimits = append(ulimits, ul) + } + } + + for _, limit := range ulimits { + rl, err := limit.GetRlimit() + if err != nil { + return err + } + rlimits = append(rlimits, rl) + } + resources := &execdriver.Resources{ - Memory: c.Config.Memory, - MemorySwap: c.Config.MemorySwap, - CpuShares: c.Config.CpuShares, - Cpuset: c.Config.Cpuset, + Memory: c.hostConfig.Memory, + MemorySwap: c.hostConfig.MemorySwap, + CpuShares: c.hostConfig.CpuShares, + CpusetCpus: c.hostConfig.CpusetCpus, + Rlimits: rlimits, } processConfig := execdriver.ProcessConfig{ @@ -311,6 +345,7 @@ func populateCommand(c *Container, env []string) error { MountLabel: c.GetMountLabel(), LxcConfig: lxcConfig, AppArmorProfile: c.AppArmorProfile, + CgroupParent: c.hostConfig.CgroupParent, } return nil @@ -324,7 +359,7 @@ func (container *Container) Start() (err error) { return nil } - // if we encounter and error during start we need to ensure that any other + // if we encounter an error during start we need to ensure that any other // setup has been cleaned up properly defer func() { if err != nil { @@ -457,11 +492,18 @@ func (container *Container) buildHostsFiles(IP string) error { for linkAlias, child := range children { _, alias := path.Split(linkAlias) - extraContent = append(extraContent, etchosts.Record{Hosts: alias, IP: child.NetworkSettings.IPAddress}) + // allow access to the linked container via the alias, real name, and container hostname + aliasList := alias + " " + child.Config.Hostname + // only add the name if alias isn't equal to the name + if alias != child.Name[1:] { + aliasList = aliasList + " " + child.Name[1:] + } + extraContent = append(extraContent, etchosts.Record{Hosts: aliasList, IP: child.NetworkSettings.IPAddress}) } for _, extraHost := range container.hostConfig.ExtraHosts { - parts := strings.Split(extraHost, ":") + // allow IPv6 addresses in extra hosts; only split on first ":" + parts := strings.SplitN(extraHost, ":", 2) extraContent = append(extraContent, etchosts.Record{Hosts: parts[0], IP: parts[1]}) } @@ -652,6 +694,16 @@ func (container *Container) KillSig(sig int) error { return container.daemon.Kill(container, sig) } +// Wrapper aroung KillSig() suppressing "no such process" error. +func (container *Container) killPossiblyDeadProcess(sig int) error { + err := container.KillSig(sig) + if err == syscall.ESRCH { + log.Debugf("Cannot kill process (pid=%d) with signal %d: no such process.", container.GetPid(), sig) + return nil + } + return err +} + func (container *Container) Pause() error { if container.IsPaused() { return fmt.Errorf("Container %s is already paused", container.ID) @@ -678,7 +730,7 @@ func (container *Container) Kill() error { } // 1. Send SIGKILL - if err := container.KillSig(9); err != nil { + if err := container.killPossiblyDeadProcess(9); err != nil { return err } @@ -686,9 +738,12 @@ func (container *Container) Kill() error { if _, err := container.WaitStop(10 * time.Second); err != nil { // Ensure that we don't kill ourselves if pid := container.GetPid(); pid != 0 { - log.Infof("Container %s failed to exit within 10 seconds of kill - trying direct SIGKILL", utils.TruncateID(container.ID)) + log.Infof("Container %s failed to exit within 10 seconds of kill - trying direct SIGKILL", common.TruncateID(container.ID)) if err := syscall.Kill(pid, 9); err != nil { - return err + if err != syscall.ESRCH { + return err + } + log.Debugf("Cannot kill process (pid=%d) with signal 9: no such process.", pid) } } } @@ -703,9 +758,9 @@ func (container *Container) Stop(seconds int) error { } // 1. Send a SIGTERM - if err := container.KillSig(15); err != nil { + if err := container.killPossiblyDeadProcess(15); err != nil { log.Infof("Failed to send SIGTERM to the process, force killing") - if err := container.KillSig(9); err != nil { + if err := container.killPossiblyDeadProcess(9); err != nil { return err } } @@ -848,7 +903,7 @@ func (container *Container) GetSize() (int64, int64) { ) if err := container.Mount(); err != nil { - log.Errorf("Warning: failed to compute size of container rootfs %s: %s", container.ID, err) + log.Errorf("Failed to compute size of container rootfs %s: %s", container.ID, err) return sizeRw, sizeRootfs } defer container.Unmount() @@ -856,14 +911,14 @@ func (container *Container) GetSize() (int64, int64) { initID := fmt.Sprintf("%s-init", container.ID) sizeRw, err = driver.DiffSize(container.ID, initID) if err != nil { - log.Errorf("Warning: driver %s couldn't return diff size of container %s: %s", driver, container.ID, err) + log.Errorf("Driver %s couldn't return diff size of container %s: %s", driver, container.ID, err) // FIXME: GetSize should return an error. Not changing it now in case // there is a side-effect. sizeRw = -1 } if _, err = os.Stat(container.basefs); err != nil { - if sizeRootfs, err = utils.TreeSize(container.basefs); err != nil { + if sizeRootfs, err = directory.Size(container.basefs); err != nil { sizeRootfs = -1 } } @@ -925,7 +980,7 @@ func (container *Container) Exposes(p nat.Port) bool { return exists } -func (container *Container) GetPtyMaster() (*os.File, error) { +func (container *Container) GetPtyMaster() (libcontainer.Console, error) { ttyConsole, ok := container.command.ProcessConfig.Terminal.(execdriver.TtyTerminal) if !ok { return nil, ErrNoTTY @@ -1113,7 +1168,12 @@ func (container *Container) updateParentsHosts() error { if ref.ParentID == "0" { continue } - c := container.daemon.Get(ref.ParentID) + + c, err := container.daemon.Get(ref.ParentID) + if err != nil { + log.Error(err) + } + if c != nil && !container.daemon.config.DisableNetwork && container.hostConfig.NetworkMode.IsPrivate() { log.Debugf("Update /etc/hosts of %s for alias %s with ip %s", c.ID, ref.Name, container.NetworkSettings.IPAddress) if err := etchosts.Update(c.HostsPath, container.NetworkSettings.IPAddress, ref.Name); err != nil { @@ -1163,6 +1223,7 @@ func (container *Container) initializeNetworking() error { if err != nil { return err } + container.HostnamePath = nc.HostnamePath container.HostsPath = nc.HostsPath container.ResolvConfPath = nc.ResolvConfPath container.Config.Hostname = nc.Config.Hostname @@ -1182,15 +1243,15 @@ func (container *Container) initializeNetworking() error { // Make sure the config is compatible with the current kernel func (container *Container) verifyDaemonSettings() { if container.Config.Memory > 0 && !container.daemon.sysInfo.MemoryLimit { - log.Infof("WARNING: Your kernel does not support memory limit capabilities. Limitation discarded.") + log.Warnf("Your kernel does not support memory limit capabilities. Limitation discarded.") container.Config.Memory = 0 } if container.Config.Memory > 0 && !container.daemon.sysInfo.SwapLimit { - log.Infof("WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.") + log.Warnf("Your kernel does not support swap limit capabilities. Limitation discarded.") container.Config.MemorySwap = -1 } if container.daemon.sysInfo.IPv4ForwardingDisabled { - log.Infof("WARNING: IPv4 forwarding is disabled. Networking will not work") + log.Warnf("IPv4 forwarding is disabled. Networking will not work") } } @@ -1208,7 +1269,7 @@ func (container *Container) setupLinkedContainers() ([]string, error) { container.activeLinks = make(map[string]*links.Link, len(children)) // If we encounter an error make sure that we rollback any network - // config and ip table changes + // config and iptables changes rollback := func() { for _, link := range container.activeLinks { link.Disable() @@ -1301,20 +1362,37 @@ func (container *Container) setupWorkingDirectory() error { return nil } -func (container *Container) startLoggingToDisk() error { - // Setup logging of stdout and stderr to disk - pth, err := container.logPath("json") +func (container *Container) startLogging() error { + cfg := container.hostConfig.LogConfig + if cfg.Type == "" { + cfg = container.daemon.defaultLogConfig + } + var l logger.Logger + switch cfg.Type { + case "json-file": + pth, err := container.logPath("json") + if err != nil { + return err + } + + dl, err := jsonfilelog.New(pth) + if err != nil { + return err + } + l = dl + case "none": + return nil + default: + return fmt.Errorf("Unknown logging driver: %s", cfg.Type) + } + + copier, err := logger.NewCopier(container.ID, map[string]io.Reader{"stdout": container.StdoutPipe(), "stderr": container.StderrPipe()}, l) if err != nil { return err } - - if err := container.daemon.LogToDisk(container.stdout, pth, "stdout"); err != nil { - return err - } - - if err := container.daemon.LogToDisk(container.stderr, pth, "stderr"); err != nil { - return err - } + container.logCopier = copier + copier.Run() + container.logDriver = l return nil } @@ -1382,9 +1460,9 @@ func (container *Container) GetMountLabel() string { func (container *Container) getIpcContainer() (*Container, error) { containerID := container.hostConfig.IpcMode.Container() - c := container.daemon.Get(containerID) - if c == nil { - return nil, fmt.Errorf("no such container to join IPC: %s", containerID) + c, err := container.daemon.Get(containerID) + if err != nil { + return nil, err } if !c.IsRunning() { return nil, fmt.Errorf("cannot join IPC of a non running container: %s", containerID) @@ -1399,9 +1477,9 @@ func (container *Container) getNetworkedContainer() (*Container, error) { if len(parts) != 2 { return nil, fmt.Errorf("no container specified to join network") } - nc := container.daemon.Get(parts[1]) - if nc == nil { - return nil, fmt.Errorf("no such container to join network: %s", parts[1]) + nc, err := container.daemon.Get(parts[1]) + if err != nil { + return nil, err } if !nc.IsRunning() { return nil, fmt.Errorf("cannot join network of a non running container: %s", parts[1]) @@ -1415,3 +1493,12 @@ func (container *Container) getNetworkedContainer() (*Container, error) { func (container *Container) Stats() (*execdriver.ResourceStats, error) { return container.daemon.Stats(container) } + +func (c *Container) LogDriverType() string { + c.Lock() + defer c.Unlock() + if c.hostConfig.LogConfig.Type == "" { + return c.daemon.defaultLogConfig.Type + } + return c.hostConfig.LogConfig.Type +} diff --git a/daemon/copy.go b/daemon/copy.go index 9d18b010c0..d42f450fdb 100644 --- a/daemon/copy.go +++ b/daemon/copy.go @@ -16,18 +16,19 @@ func (daemon *Daemon) ContainerCopy(job *engine.Job) engine.Status { resource = job.Args[1] ) - if container := daemon.Get(name); container != nil { - - data, err := container.Copy(resource) - if err != nil { - return job.Error(err) - } - defer data.Close() - - if _, err := io.Copy(job.Stdout, data); err != nil { - return job.Error(err) - } - return engine.StatusOK + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } - return job.Errorf("No such container: %s", name) + + data, err := container.Copy(resource) + if err != nil { + return job.Error(err) + } + defer data.Close() + + if _, err := io.Copy(job.Stdout, data); err != nil { + return job.Error(err) + } + return engine.StatusOK } diff --git a/daemon/create.go b/daemon/create.go index 785b0cc345..49bc6a7de9 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -2,6 +2,7 @@ package daemon import ( "fmt" + "strings" "github.com/docker/docker/engine" "github.com/docker/docker/graph" @@ -18,28 +19,29 @@ func (daemon *Daemon) ContainerCreate(job *engine.Job) engine.Status { } else if len(job.Args) > 1 { return job.Errorf("Usage: %s", job.Name) } + config := runconfig.ContainerConfigFromJob(job) - if config.Memory != 0 && config.Memory < 4194304 { + hostConfig := runconfig.ContainerHostConfigFromJob(job) + + if len(hostConfig.LxcConf) > 0 && !strings.Contains(daemon.ExecutionDriver().Name(), "lxc") { + return job.Errorf("Cannot use --lxc-conf with execdriver: %s", daemon.ExecutionDriver().Name()) + } + if hostConfig.Memory != 0 && hostConfig.Memory < 4194304 { return job.Errorf("Minimum memory limit allowed is 4MB") } - if config.Memory > 0 && !daemon.SystemConfig().MemoryLimit { + if hostConfig.Memory > 0 && !daemon.SystemConfig().MemoryLimit { job.Errorf("Your kernel does not support memory limit capabilities. Limitation discarded.\n") - config.Memory = 0 + hostConfig.Memory = 0 } - if config.Memory > 0 && !daemon.SystemConfig().SwapLimit { + if hostConfig.Memory > 0 && hostConfig.MemorySwap != -1 && !daemon.SystemConfig().SwapLimit { job.Errorf("Your kernel does not support swap limit capabilities. Limitation discarded.\n") - config.MemorySwap = -1 + hostConfig.MemorySwap = -1 } - if config.Memory > 0 && config.MemorySwap > 0 && config.MemorySwap < config.Memory { + if hostConfig.Memory > 0 && hostConfig.MemorySwap > 0 && hostConfig.MemorySwap < hostConfig.Memory { return job.Errorf("Minimum memoryswap limit should be larger than memory limit, see usage.\n") } - - var hostConfig *runconfig.HostConfig - if job.EnvExists("HostConfig") { - hostConfig = runconfig.ContainerHostConfigFromJob(job) - } else { - // Older versions of the API don't provide a HostConfig. - hostConfig = nil + if hostConfig.Memory == 0 && hostConfig.MemorySwap > 0 { + return job.Errorf("You should always set the Memory limit when using Memoryswap limit, see usage.\n") } container, buildWarnings, err := daemon.Create(config, hostConfig, name) @@ -91,7 +93,10 @@ func (daemon *Daemon) Create(config *runconfig.Config, hostConfig *runconfig.Hos if warnings, err = daemon.mergeAndVerifyConfig(config, img); err != nil { return nil, nil, err } - if hostConfig != nil && hostConfig.SecurityOpt == nil { + if hostConfig == nil { + hostConfig = &runconfig.HostConfig{} + } + if hostConfig.SecurityOpt == nil { hostConfig.SecurityOpt, err = daemon.GenerateSecurityOpt(hostConfig.IpcMode, hostConfig.PidMode) if err != nil { return nil, nil, err @@ -129,9 +134,9 @@ func (daemon *Daemon) GenerateSecurityOpt(ipcMode runconfig.IpcMode, pidMode run return label.DisableSecOpt(), nil } if ipcContainer := ipcMode.Container(); ipcContainer != "" { - c := daemon.Get(ipcContainer) - if c == nil { - return nil, fmt.Errorf("no such container to join IPC: %s", ipcContainer) + c, err := daemon.Get(ipcContainer) + if err != nil { + return nil, err } if !c.IsRunning() { return nil, fmt.Errorf("cannot join IPC of a non running container: %s", ipcContainer) diff --git a/daemon/daemon.go b/daemon/daemon.go index c9a730b1f9..ebb43e2484 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -18,6 +18,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/daemon/execdriver" "github.com/docker/docker/daemon/execdriver/execdrivers" "github.com/docker/docker/daemon/execdriver/lxc" @@ -25,12 +26,12 @@ import ( _ "github.com/docker/docker/daemon/graphdriver/vfs" _ "github.com/docker/docker/daemon/networkdriver/bridge" "github.com/docker/docker/daemon/networkdriver/portallocator" - "github.com/docker/docker/dockerversion" "github.com/docker/docker/engine" "github.com/docker/docker/graph" "github.com/docker/docker/image" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/broadcastwriter" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/graphdb" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/namesgenerator" @@ -88,23 +89,24 @@ func (c *contStore) List() []*Container { } type Daemon struct { - ID string - repository string - sysInitPath string - containers *contStore - execCommands *execStore - graph *graph.Graph - repositories *graph.TagStore - idIndex *truncindex.TruncIndex - sysInfo *sysinfo.SysInfo - volumes *volumes.Repository - eng *engine.Engine - config *Config - containerGraph *graphdb.Database - driver graphdriver.Driver - execDriver execdriver.Driver - trustStore *trust.TrustStore - statsCollector *statsCollector + ID string + repository string + sysInitPath string + containers *contStore + execCommands *execStore + graph *graph.Graph + repositories *graph.TagStore + idIndex *truncindex.TruncIndex + sysInfo *sysinfo.SysInfo + volumes *volumes.Repository + eng *engine.Engine + config *Config + containerGraph *graphdb.Database + driver graphdriver.Driver + execDriver execdriver.Driver + trustStore *trust.TrustStore + statsCollector *statsCollector + defaultLogConfig runconfig.LogConfig } // Install installs daemon capabilities to eng. @@ -155,28 +157,40 @@ func (daemon *Daemon) Install(eng *engine.Engine) error { return nil } -// Get looks for a container by the specified ID or name, and returns it. -// If the container is not found, or if an error occurs, nil is returned. -func (daemon *Daemon) Get(name string) *Container { - id, err := daemon.idIndex.Get(name) - if err == nil { - return daemon.containers.Get(id) +// Get looks for a container using the provided information, which could be +// one of the following inputs from the caller: +// - A full container ID, which will exact match a container in daemon's list +// - A container name, which will only exact match via the GetByName() function +// - A partial container ID prefix (e.g. short ID) of any length that is +// unique enough to only return a single container object +// If none of these searches succeed, an error is returned +func (daemon *Daemon) Get(prefixOrName string) (*Container, error) { + if containerByID := daemon.containers.Get(prefixOrName); containerByID != nil { + // prefix is an exact match to a full container ID + return containerByID, nil } - if c, _ := daemon.GetByName(name); c != nil { - return c + // GetByName will match only an exact name provided; we ignore errors + containerByName, _ := daemon.GetByName(prefixOrName) + containerId, indexError := daemon.idIndex.Get(prefixOrName) + + if containerByName != nil { + // prefix is an exact match to a full container Name + return containerByName, nil } - if err == truncindex.ErrDuplicateID { - log.Errorf("Short ID %s is ambiguous: please retry with more characters or use the full ID.\n", name) + if containerId != "" { + // prefix is a fuzzy match to a container ID + return daemon.containers.Get(containerId), nil } - return nil + return nil, indexError } // Exists returns a true if a container of the specified ID or name exists, // false otherwise. func (daemon *Daemon) Exists(id string) bool { - return daemon.Get(id) != nil + c, _ := daemon.Get(id) + return c != nil } func (daemon *Daemon) containerRoot(id string) string { @@ -332,7 +346,7 @@ func (daemon *Daemon) restore() error { for _, v := range dir { id := v.Name() container, err := daemon.load(id) - if !debug { + if !debug && log.GetLevel() == log.InfoLevel { fmt.Print(".") } if err != nil { @@ -354,7 +368,7 @@ func (daemon *Daemon) restore() error { if entities := daemon.containerGraph.List("/", -1); entities != nil { for _, p := range entities.Paths() { - if !debug { + if !debug && log.GetLevel() == log.InfoLevel { fmt.Print(".") } @@ -406,7 +420,9 @@ func (daemon *Daemon) restore() error { } if !debug { - fmt.Println() + if log.GetLevel() == log.InfoLevel { + fmt.Println() + } log.Infof("Loading containers: done.") } @@ -428,7 +444,9 @@ func (daemon *Daemon) setupResolvconfWatcher() error { for { select { case event := <-watcher.Events: - if event.Op&fsnotify.Write == fsnotify.Write { + if event.Name == "/etc/resolv.conf" && + (event.Op&fsnotify.Write == fsnotify.Write || + event.Op&fsnotify.Create == fsnotify.Create) { // verify a real change happened before we go further--a file write may have happened // without an actual change to the file updatedResolvConf, newResolvConfHash, err := resolvconf.GetIfChanged() @@ -461,7 +479,7 @@ func (daemon *Daemon) setupResolvconfWatcher() error { } }() - if err := watcher.Add("/etc/resolv.conf"); err != nil { + if err := watcher.Add("/etc"); err != nil { return err } return nil @@ -499,7 +517,7 @@ func (daemon *Daemon) mergeAndVerifyConfig(config *runconfig.Config, img *image. func (daemon *Daemon) generateIdAndName(name string) (string, string, error) { var ( err error - id = utils.GenerateRandomID() + id = common.GenerateRandomID() ) if name == "" { @@ -544,7 +562,7 @@ func (daemon *Daemon) reserveName(id, name string) (string, error) { nameAsKnownByUser := strings.TrimPrefix(name, "/") return "", fmt.Errorf( "Conflict. The name %q is already in use by container %s. You have to delete (or rename) that container to be able to reuse that name.", nameAsKnownByUser, - utils.TruncateID(conflictingContainer.ID)) + common.TruncateID(conflictingContainer.ID)) } } return name, nil @@ -567,7 +585,7 @@ func (daemon *Daemon) generateNewName(id string) (string, error) { return name, nil } - name = "/" + utils.TruncateID(id) + name = "/" + common.TruncateID(id) if _, err := daemon.containerGraph.Set(name, id); err != nil { return "", err } @@ -715,9 +733,9 @@ func (daemon *Daemon) Children(name string) (map[string]*Container, error) { children := make(map[string]*Container) err = daemon.containerGraph.Walk(name, func(p string, e *graphdb.Entity) error { - c := daemon.Get(e.ID()) - if c == nil { - return fmt.Errorf("Could not get container for name %s and id %s", e.ID(), p) + c, err := daemon.Get(e.ID()) + if err != nil { + return err } children[p] = c return nil @@ -754,10 +772,18 @@ func (daemon *Daemon) RegisterLinks(container *Container, hostConfig *runconfig. if err != nil { return err } - child := daemon.Get(parts["name"]) - if child == nil { + child, err := daemon.Get(parts["name"]) + if err != nil { + //An error from daemon.Get() means this name could not be found return fmt.Errorf("Could not get container for %s", parts["name"]) } + for child.hostConfig.NetworkMode.IsContainer() { + parts := strings.SplitN(string(child.hostConfig.NetworkMode), ":", 2) + child, err = daemon.Get(parts[1]) + if err != nil { + return fmt.Errorf("Could not get container for %s", parts[1]) + } + } if child.hostConfig.NetworkMode.IsHost() { return runconfig.ErrConflictHostNetworkAndLinks } @@ -801,6 +827,12 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) } config.DisableNetwork = config.BridgeIface == disableNetworkBridge + // register portallocator release on shutdown + eng.OnShutdown(func() { + if err := portallocator.ReleaseAll(); err != nil { + log.Errorf("portallocator.ReleaseAll(): %s", err) + } + }) // Claim the pidfile first, to avoid any and all unexpected race conditions. // Some of the init doesn't need a pidfile lock - but let's not try to be smart. if config.Pidfile != "" { @@ -834,9 +866,6 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) return nil, fmt.Errorf("Unable to get the full path to the TempDir (%s): %s", tmp, err) } os.Setenv("TMPDIR", realTmp) - if !config.EnableSelinuxSupport { - selinuxSetDisabled() - } // get the canonical path to the Docker root directory var realRoot string @@ -860,13 +889,28 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) // Load storage driver driver, err := graphdriver.New(config.Root, config.GraphOptions) if err != nil { - return nil, err + return nil, fmt.Errorf("error intializing graphdriver: %v", err) } log.Debugf("Using graph driver %s", driver) + // register cleanup for graph driver + eng.OnShutdown(func() { + if err := driver.Cleanup(); err != nil { + log.Errorf("Error during graph storage driver.Cleanup(): %v", err) + } + }) - // As Docker on btrfs and SELinux are incompatible at present, error on both being enabled - if selinuxEnabled() && config.EnableSelinuxSupport && driver.String() == "btrfs" { - return nil, fmt.Errorf("SELinux is not supported with the BTRFS graph driver!") + if config.EnableSelinuxSupport { + if selinuxEnabled() { + // As Docker on btrfs and SELinux are incompatible at present, error on both being enabled + if driver.String() == "btrfs" { + return nil, fmt.Errorf("SELinux is not supported with the BTRFS graph driver") + } + log.Debug("SELinux enabled successfully") + } else { + log.Warn("Docker could not enable SELinux on the host system") + } + } else { + selinuxSetDisabled() } daemonRepo := path.Join(config.Root, "containers") @@ -940,6 +984,12 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) if err != nil { return nil, err } + // register graph close on shutdown + eng.OnShutdown(func() { + if err := graph.Close(); err != nil { + log.Errorf("Error during container graph.Close(): %v", err) + } + }) localCopy := path.Join(config.Root, "init", fmt.Sprintf("dockerinit-%s", dockerversion.VERSION)) sysInitPath := utils.DockerInitPath(localCopy) @@ -968,24 +1018,32 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) } daemon := &Daemon{ - ID: trustKey.PublicKey().KeyID(), - repository: daemonRepo, - containers: &contStore{s: make(map[string]*Container)}, - execCommands: newExecStore(), - graph: g, - repositories: repositories, - idIndex: truncindex.NewTruncIndex([]string{}), - sysInfo: sysInfo, - volumes: volumes, - config: config, - containerGraph: graph, - driver: driver, - sysInitPath: sysInitPath, - execDriver: ed, - eng: eng, - trustStore: t, - statsCollector: newStatsCollector(1 * time.Second), + ID: trustKey.PublicKey().KeyID(), + repository: daemonRepo, + containers: &contStore{s: make(map[string]*Container)}, + execCommands: newExecStore(), + graph: g, + repositories: repositories, + idIndex: truncindex.NewTruncIndex([]string{}), + sysInfo: sysInfo, + volumes: volumes, + config: config, + containerGraph: graph, + driver: driver, + sysInitPath: sysInitPath, + execDriver: ed, + eng: eng, + trustStore: t, + statsCollector: newStatsCollector(1 * time.Second), + defaultLogConfig: config.LogConfig, } + + eng.OnShutdown(func() { + if err := daemon.shutdown(); err != nil { + log.Errorf("Error during daemon.shutdown(): %v", err) + } + }) + if err := daemon.restore(); err != nil { return nil, err } @@ -995,25 +1053,6 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) return nil, err } - // Setup shutdown handlers - // FIXME: can these shutdown handlers be registered closer to their source? - eng.OnShutdown(func() { - // FIXME: if these cleanup steps can be called concurrently, register - // them as separate handlers to speed up total shutdown time - if err := daemon.shutdown(); err != nil { - log.Errorf("daemon.shutdown(): %s", err) - } - if err := portallocator.ReleaseAll(); err != nil { - log.Errorf("portallocator.ReleaseAll(): %s", err) - } - if err := daemon.driver.Cleanup(); err != nil { - log.Errorf("daemon.driver.Cleanup(): %s", err.Error()) - } - if err := daemon.containerGraph.Close(); err != nil { - log.Errorf("daemon.containerGraph.Close(): %s", err.Error()) - } - }) - return daemon, nil } @@ -1100,18 +1139,18 @@ func (daemon *Daemon) Stats(c *Container) (*execdriver.ResourceStats, error) { } func (daemon *Daemon) SubscribeToContainerStats(name string) (chan interface{}, error) { - c := daemon.Get(name) - if c == nil { - return nil, fmt.Errorf("no such container") + c, err := daemon.Get(name) + if err != nil { + return nil, err } ch := daemon.statsCollector.collect(c) return ch, nil } func (daemon *Daemon) UnsubscribeToContainerStats(name string, ch chan interface{}) error { - c := daemon.Get(name) - if c == nil { - return fmt.Errorf("no such container") + c, err := daemon.Get(name) + if err != nil { + return err } daemon.statsCollector.unsubscribe(c, ch) return nil @@ -1214,11 +1253,11 @@ func checkKernel() error { // the circumstances of pre-3.8 crashes are clearer. // For details see http://github.com/docker/docker/issues/407 if k, err := kernel.GetKernelVersion(); err != nil { - log.Infof("WARNING: %s", err) + log.Warnf("%s", err) } else { if kernel.CompareKernelVersion(k, &kernel.KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}) < 0 { if os.Getenv("DOCKER_NOWARN_KERNEL_VERSION") == "" { - log.Infof("WARNING: You are running linux kernel version %s, which might be unstable running docker. Please upgrade your kernel to 3.8.0.", k.String()) + log.Warnf("You are running linux kernel version %s, which might be unstable running docker. Please upgrade your kernel to 3.8.0.", k.String()) } } } diff --git a/daemon/daemon_test.go b/daemon/daemon_test.go new file mode 100644 index 0000000000..43030b6f9b --- /dev/null +++ b/daemon/daemon_test.go @@ -0,0 +1,101 @@ +package daemon + +import ( + "github.com/docker/docker/pkg/graphdb" + "github.com/docker/docker/pkg/truncindex" + "os" + "path" + "testing" +) + +// +// https://github.com/docker/docker/issues/8069 +// + +func TestGet(t *testing.T) { + c1 := &Container{ + ID: "5a4ff6a163ad4533d22d69a2b8960bf7fafdcba06e72d2febdba229008b0bf57", + Name: "tender_bardeen", + } + c2 := &Container{ + ID: "3cdbd1aa394fd68559fd1441d6eff2ab7c1e6363582c82febfaa8045df3bd8de", + Name: "drunk_hawking", + } + c3 := &Container{ + ID: "3cdbd1aa394fd68559fd1441d6eff2abfafdcba06e72d2febdba229008b0bf57", + Name: "3cdbd1aa", + } + c4 := &Container{ + ID: "75fb0b800922abdbef2d27e60abcdfaf7fb0698b2a96d22d3354da361a6ff4a5", + Name: "5a4ff6a163ad4533d22d69a2b8960bf7fafdcba06e72d2febdba229008b0bf57", + } + c5 := &Container{ + ID: "d22d69a2b8960bf7fafdcba06e72d2febdba960bf7fafdcba06e72d2f9008b060b", + Name: "d22d69a2b896", + } + + store := &contStore{ + s: map[string]*Container{ + c1.ID: c1, + c2.ID: c2, + c3.ID: c3, + c4.ID: c4, + c5.ID: c5, + }, + } + + index := truncindex.NewTruncIndex([]string{}) + index.Add(c1.ID) + index.Add(c2.ID) + index.Add(c3.ID) + index.Add(c4.ID) + index.Add(c5.ID) + + daemonTestDbPath := path.Join(os.TempDir(), "daemon_test.db") + graph, err := graphdb.NewSqliteConn(daemonTestDbPath) + if err != nil { + t.Fatalf("Failed to create daemon test sqlite database at %s", daemonTestDbPath) + } + graph.Set(c1.Name, c1.ID) + graph.Set(c2.Name, c2.ID) + graph.Set(c3.Name, c3.ID) + graph.Set(c4.Name, c4.ID) + graph.Set(c5.Name, c5.ID) + + daemon := &Daemon{ + containers: store, + idIndex: index, + containerGraph: graph, + } + + if container, _ := daemon.Get("3cdbd1aa394fd68559fd1441d6eff2ab7c1e6363582c82febfaa8045df3bd8de"); container != c2 { + t.Fatal("Should explicitly match full container IDs") + } + + if container, _ := daemon.Get("75fb0b8009"); container != c4 { + t.Fatal("Should match a partial ID") + } + + if container, _ := daemon.Get("drunk_hawking"); container != c2 { + t.Fatal("Should match a full name") + } + + // c3.Name is a partial match for both c3.ID and c2.ID + if c, _ := daemon.Get("3cdbd1aa"); c != c3 { + t.Fatal("Should match a full name even though it collides with another container's ID") + } + + if container, _ := daemon.Get("d22d69a2b896"); container != c5 { + t.Fatal("Should match a container where the provided prefix is an exact match to the it's name, and is also a prefix for it's ID") + } + + if _, err := daemon.Get("3cdbd1"); err == nil { + t.Fatal("Should return an error when provided a prefix that partially matches multiple container ID's") + } + + if _, err := daemon.Get("nothing"); err == nil { + t.Fatal("Should return an error when provided a prefix that is neither a name or a partial match to an ID") + } + + os.Remove(daemonTestDbPath) +} diff --git a/daemon/delete.go b/daemon/delete.go index 59c7651785..d9e5b88ba5 100644 --- a/daemon/delete.go +++ b/daemon/delete.go @@ -17,10 +17,10 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) engine.Status { removeVolume := job.GetenvBool("removeVolume") removeLink := job.GetenvBool("removeLink") forceRemove := job.GetenvBool("forceRemove") - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } if removeLink { @@ -36,7 +36,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) engine.Status { if pe == nil { return job.Errorf("Cannot get parent %s for name %s", parent, name) } - parentContainer := daemon.Get(pe.ID()) + parentContainer, _ := daemon.Get(pe.ID()) if parentContainer != nil { parentContainer.DisableLink(n) @@ -61,7 +61,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) engine.Status { return job.Errorf("Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f") } } - if err := daemon.Destroy(container); err != nil { + if err := daemon.Rm(container); err != nil { return job.Errorf("Cannot destroy container %s: %s", name, err) } container.LogEvent("destroy") @@ -82,8 +82,7 @@ func (daemon *Daemon) DeleteVolumes(volumeIDs map[string]struct{}) { } // Destroy unregisters a container from the daemon and cleanly removes its contents from the filesystem. -// FIXME: rename to Rm for consistency with the CLI command -func (daemon *Daemon) Destroy(container *Container) error { +func (daemon *Daemon) Rm(container *Container) error { if container == nil { return fmt.Errorf("The given container is ") } diff --git a/daemon/exec.go b/daemon/exec.go index 8bb4e72d13..3af40ac014 100644 --- a/daemon/exec.go +++ b/daemon/exec.go @@ -12,10 +12,10 @@ import ( "github.com/docker/docker/daemon/execdriver/lxc" "github.com/docker/docker/engine" "github.com/docker/docker/pkg/broadcastwriter" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/runconfig" - "github.com/docker/docker/utils" ) type execConfig struct { @@ -74,7 +74,7 @@ func (execConfig *execConfig) Resize(h, w int) error { } func (d *Daemon) registerExecCommand(execConfig *execConfig) { - // Storing execs in container inorder to kill them gracefully whenever the container is stopped or removed. + // Storing execs in container in order to kill them gracefully whenever the container is stopped or removed. execConfig.Container.execCommands.Add(execConfig.ID, execConfig) // Storing execs in daemon for easy access via remote API. d.execCommands.Add(execConfig.ID, execConfig) @@ -97,10 +97,9 @@ func (d *Daemon) unregisterExecCommand(execConfig *execConfig) { } func (d *Daemon) getActiveContainer(name string) (*Container, error) { - container := d.Get(name) - - if container == nil { - return nil, fmt.Errorf("No such container: %s", name) + container, err := d.Get(name) + if err != nil { + return nil, err } if !container.IsRunning() { @@ -142,7 +141,7 @@ func (d *Daemon) ContainerExecCreate(job *engine.Job) engine.Status { } execConfig := &execConfig{ - ID: utils.GenerateRandomID(), + ID: common.GenerateRandomID(), OpenStdin: config.AttachStdin, OpenStdout: config.AttachStdout, OpenStderr: config.AttachStderr, @@ -219,7 +218,7 @@ func (d *Daemon) ContainerExecStart(job *engine.Job) engine.Status { execConfig.StreamConfig.stdinPipe = ioutils.NopWriteCloser(ioutil.Discard) // Silently drop stdin } - attachErr := d.attach(&execConfig.StreamConfig, execConfig.OpenStdin, true, execConfig.ProcessConfig.Tty, cStdin, cStdout, cStderr) + attachErr := d.Attach(&execConfig.StreamConfig, execConfig.OpenStdin, true, execConfig.ProcessConfig.Tty, cStdin, cStdout, cStderr) execErr := make(chan error) diff --git a/daemon/execdriver/MAINTAINERS b/daemon/execdriver/MAINTAINERS deleted file mode 100644 index 68a97d2fc2..0000000000 --- a/daemon/execdriver/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -Michael Crosby (@crosbymichael) -Victor Vieux (@vieux) diff --git a/daemon/execdriver/driver.go b/daemon/execdriver/driver.go index 2215d03cff..e937de3beb 100644 --- a/daemon/execdriver/driver.go +++ b/daemon/execdriver/driver.go @@ -1,14 +1,22 @@ package execdriver import ( + "encoding/json" "errors" "io" + "io/ioutil" "os" "os/exec" + "path/filepath" + "strconv" + "strings" "time" + "github.com/docker/docker/daemon/execdriver/native/template" + "github.com/docker/docker/pkg/ulimit" "github.com/docker/libcontainer" - "github.com/docker/libcontainer/devices" + "github.com/docker/libcontainer/cgroups/fs" + "github.com/docker/libcontainer/configs" ) // Context is a generic key value pair that allows @@ -39,7 +47,7 @@ type Terminal interface { } type TtyTerminal interface { - Master() *os.File + Master() libcontainer.Console } // ExitStatus provides exit reasons for a container. @@ -98,14 +106,15 @@ type NetworkInterface struct { } type Resources struct { - Memory int64 `json:"memory"` - MemorySwap int64 `json:"memory_swap"` - CpuShares int64 `json:"cpu_shares"` - Cpuset string `json:"cpuset"` + Memory int64 `json:"memory"` + MemorySwap int64 `json:"memory_swap"` + CpuShares int64 `json:"cpu_shares"` + CpusetCpus string `json:"cpuset_cpus"` + Rlimits []*ulimit.Rlimit `json:"rlimits"` } type ResourceStats struct { - *libcontainer.ContainerStats + *libcontainer.Stats Read time.Time `json:"read"` MemoryLimit int64 `json:"memory_limit"` SystemUsage uint64 `json:"system_usage"` @@ -145,8 +154,8 @@ type Command struct { Pid *Pid `json:"pid"` Resources *Resources `json:"resources"` Mounts []Mount `json:"mounts"` - AllowedDevices []*devices.Device `json:"allowed_devices"` - AutoCreatedDevices []*devices.Device `json:"autocreated_devices"` + AllowedDevices []*configs.Device `json:"allowed_devices"` + AutoCreatedDevices []*configs.Device `json:"autocreated_devices"` CapAdd []string `json:"cap_add"` CapDrop []string `json:"cap_drop"` ContainerPid int `json:"container_pid"` // the pid for the process inside a container @@ -155,4 +164,144 @@ type Command struct { MountLabel string `json:"mount_label"` LxcConfig []string `json:"lxc_config"` AppArmorProfile string `json:"apparmor_profile"` + CgroupParent string `json:"cgroup_parent"` // The parent cgroup for this command. +} + +func InitContainer(c *Command) *configs.Config { + container := template.New() + + container.Hostname = getEnv("HOSTNAME", c.ProcessConfig.Env) + container.Cgroups.Name = c.ID + container.Cgroups.AllowedDevices = c.AllowedDevices + container.Readonlyfs = c.ReadonlyRootfs + container.Devices = c.AutoCreatedDevices + container.Rootfs = c.Rootfs + container.Readonlyfs = c.ReadonlyRootfs + + // check to see if we are running in ramdisk to disable pivot root + container.NoPivotRoot = os.Getenv("DOCKER_RAMDISK") != "" + + // Default parent cgroup is "docker". Override if required. + if c.CgroupParent != "" { + container.Cgroups.Parent = c.CgroupParent + } + return container +} + +func getEnv(key string, env []string) string { + for _, pair := range env { + parts := strings.Split(pair, "=") + if parts[0] == key { + return parts[1] + } + } + return "" +} + +func SetupCgroups(container *configs.Config, c *Command) error { + if c.Resources != nil { + container.Cgroups.CpuShares = c.Resources.CpuShares + container.Cgroups.Memory = c.Resources.Memory + container.Cgroups.MemoryReservation = c.Resources.Memory + container.Cgroups.MemorySwap = c.Resources.MemorySwap + container.Cgroups.CpusetCpus = c.Resources.CpusetCpus + } + + return nil +} + +// Returns the network statistics for the network interfaces represented by the NetworkRuntimeInfo. +func getNetworkInterfaceStats(interfaceName string) (*libcontainer.NetworkInterface, error) { + out := &libcontainer.NetworkInterface{Name: interfaceName} + // This can happen if the network runtime information is missing - possible if the + // container was created by an old version of libcontainer. + if interfaceName == "" { + return out, nil + } + type netStatsPair struct { + // Where to write the output. + Out *uint64 + // The network stats file to read. + File string + } + // Ingress for host veth is from the container. Hence tx_bytes stat on the host veth is actually number of bytes received by the container. + netStats := []netStatsPair{ + {Out: &out.RxBytes, File: "tx_bytes"}, + {Out: &out.RxPackets, File: "tx_packets"}, + {Out: &out.RxErrors, File: "tx_errors"}, + {Out: &out.RxDropped, File: "tx_dropped"}, + + {Out: &out.TxBytes, File: "rx_bytes"}, + {Out: &out.TxPackets, File: "rx_packets"}, + {Out: &out.TxErrors, File: "rx_errors"}, + {Out: &out.TxDropped, File: "rx_dropped"}, + } + for _, netStat := range netStats { + data, err := readSysfsNetworkStats(interfaceName, netStat.File) + if err != nil { + return nil, err + } + *(netStat.Out) = data + } + return out, nil +} + +// Reads the specified statistics available under /sys/class/net//statistics +func readSysfsNetworkStats(ethInterface, statsFile string) (uint64, error) { + data, err := ioutil.ReadFile(filepath.Join("/sys/class/net", ethInterface, "statistics", statsFile)) + if err != nil { + return 0, err + } + return strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64) +} + +func Stats(containerDir string, containerMemoryLimit int64, machineMemory int64) (*ResourceStats, error) { + f, err := os.Open(filepath.Join(containerDir, "state.json")) + if err != nil { + return nil, err + } + defer f.Close() + + type network struct { + Type string + HostInterfaceName string + } + + state := struct { + CgroupPaths map[string]string `json:"cgroup_paths"` + Networks []network + }{} + + if err := json.NewDecoder(f).Decode(&state); err != nil { + return nil, err + } + now := time.Now() + + mgr := fs.Manager{Paths: state.CgroupPaths} + cstats, err := mgr.GetStats() + if err != nil { + return nil, err + } + stats := &libcontainer.Stats{CgroupStats: cstats} + // if the container does not have any memory limit specified set the + // limit to the machines memory + memoryLimit := containerMemoryLimit + if memoryLimit == 0 { + memoryLimit = machineMemory + } + for _, iface := range state.Networks { + switch iface.Type { + case "veth": + istats, err := getNetworkInterfaceStats(iface.HostInterfaceName) + if err != nil { + return nil, err + } + stats.Interfaces = append(stats.Interfaces, istats) + } + } + return &ResourceStats{ + Stats: stats, + Read: now, + MemoryLimit: memoryLimit, + }, nil } diff --git a/daemon/execdriver/lxc/MAINTAINERS b/daemon/execdriver/lxc/MAINTAINERS deleted file mode 100644 index ac8ff535ff..0000000000 --- a/daemon/execdriver/lxc/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -# the LXC exec driver needs more maintainers and contributions -Dinesh Subhraveti (@dineshs-altiscale) diff --git a/daemon/execdriver/lxc/driver.go b/daemon/execdriver/lxc/driver.go index 44942b1fe0..f45c21445f 100644 --- a/daemon/execdriver/lxc/driver.go +++ b/daemon/execdriver/lxc/driver.go @@ -12,17 +12,21 @@ import ( "path/filepath" "strconv" "strings" + "sync" "syscall" "time" - "github.com/kr/pty" - log "github.com/Sirupsen/logrus" "github.com/docker/docker/daemon/execdriver" + sysinfo "github.com/docker/docker/pkg/system" "github.com/docker/docker/pkg/term" "github.com/docker/docker/utils" + "github.com/docker/libcontainer" "github.com/docker/libcontainer/cgroups" - "github.com/docker/libcontainer/mount/nodes" + "github.com/docker/libcontainer/configs" + "github.com/docker/libcontainer/system" + "github.com/docker/libcontainer/user" + "github.com/kr/pty" ) const DriverName = "lxc" @@ -30,10 +34,18 @@ const DriverName = "lxc" var ErrExec = errors.New("Unsupported: Exec is not supported by the lxc driver") type driver struct { - root string // root path for the driver to use - initPath string - apparmor bool - sharedRoot bool + root string // root path for the driver to use + initPath string + apparmor bool + sharedRoot bool + activeContainers map[string]*activeContainer + machineMemory int64 + sync.Mutex +} + +type activeContainer struct { + container *configs.Config + cmd *exec.Cmd } func NewDriver(root, initPath string, apparmor bool) (*driver, error) { @@ -41,12 +53,17 @@ func NewDriver(root, initPath string, apparmor bool) (*driver, error) { if err := linkLxcStart(root); err != nil { return nil, err } - + meminfo, err := sysinfo.ReadMemInfo() + if err != nil { + return nil, err + } return &driver{ - apparmor: apparmor, - root: root, - initPath: initPath, - sharedRoot: rootIsShared(), + apparmor: apparmor, + root: root, + initPath: initPath, + sharedRoot: rootIsShared(), + activeContainers: make(map[string]*activeContainer), + machineMemory: meminfo.MemTotal, }, nil } @@ -57,8 +74,9 @@ func (d *driver) Name() string { func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (execdriver.ExitStatus, error) { var ( - term execdriver.Terminal - err error + term execdriver.Terminal + err error + dataPath = d.containerDir(c.ID) ) if c.ProcessConfig.Tty { @@ -67,6 +85,16 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba term, err = execdriver.NewStdConsole(&c.ProcessConfig, pipes) } c.ProcessConfig.Terminal = term + container, err := d.createContainer(c) + if err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err + } + d.Lock() + d.activeContainers[c.ID] = &activeContainer{ + container: container, + cmd: &c.ProcessConfig.Cmd, + } + d.Unlock() c.Mounts = append(c.Mounts, execdriver.Mount{ Source: d.initPath, @@ -92,6 +120,17 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba "--share-net", c.Network.ContainerID, ) } + if c.Ipc != nil { + if c.Ipc.ContainerID != "" { + params = append(params, + "--share-ipc", c.Ipc.ContainerID, + ) + } else if c.Ipc.HostIpc { + params = append(params, + "--share-ipc", "1", + ) + } + } params = append(params, "--", @@ -141,7 +180,7 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba "unshare", "-m", "--", "/bin/sh", "-c", shellString, } } - + log.Debugf("lxc params %s", params) var ( name = params[0] arg = params[1:] @@ -153,7 +192,7 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba c.ProcessConfig.Path = aname c.ProcessConfig.Args = append([]string{name}, arg...) - if err := nodes.CreateDeviceNodes(c.Rootfs, c.AutoCreatedDevices); err != nil { + if err := createDeviceNodes(c.Rootfs, c.AutoCreatedDevices); err != nil { return execdriver.ExitStatus{ExitCode: -1}, err } @@ -175,25 +214,228 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba close(waitLock) }() - // Poll lxc for RUNNING status - pid, err := d.waitForStart(c, waitLock) - if err != nil { + terminate := func(terr error) (execdriver.ExitStatus, error) { if c.ProcessConfig.Process != nil { c.ProcessConfig.Process.Kill() c.ProcessConfig.Wait() } - return execdriver.ExitStatus{ExitCode: -1}, err + return execdriver.ExitStatus{ExitCode: -1}, terr + } + // Poll lxc for RUNNING status + pid, err := d.waitForStart(c, waitLock) + if err != nil { + return terminate(err) + } + + cgroupPaths, err := cgroupPaths(c.ID) + if err != nil { + return terminate(err) + } + + state := &libcontainer.State{ + InitProcessPid: pid, + CgroupPaths: cgroupPaths, + } + + f, err := os.Create(filepath.Join(dataPath, "state.json")) + if err != nil { + return terminate(err) + } + defer f.Close() + + if err := json.NewEncoder(f).Encode(state); err != nil { + return terminate(err) } c.ContainerPid = pid if startCallback != nil { + log.Debugf("Invoking startCallback") startCallback(&c.ProcessConfig, pid) } + oomKill := false + oomKillNotification, err := notifyOnOOM(cgroupPaths) + <-waitLock - return execdriver.ExitStatus{ExitCode: getExitCode(c)}, waitErr + if err == nil { + _, oomKill = <-oomKillNotification + log.Debugf("oomKill error %s waitErr %s", oomKill, waitErr) + } else { + log.Warnf("Your kernel does not support OOM notifications: %s", err) + } + + // check oom error + exitCode := getExitCode(c) + if oomKill { + exitCode = 137 + } + return execdriver.ExitStatus{ExitCode: exitCode, OOMKilled: oomKill}, waitErr +} + +// copy from libcontainer +func notifyOnOOM(paths map[string]string) (<-chan struct{}, error) { + dir := paths["memory"] + if dir == "" { + return nil, fmt.Errorf("There is no path for %q in state", "memory") + } + oomControl, err := os.Open(filepath.Join(dir, "memory.oom_control")) + if err != nil { + return nil, err + } + fd, _, syserr := syscall.RawSyscall(syscall.SYS_EVENTFD2, 0, syscall.FD_CLOEXEC, 0) + if syserr != 0 { + oomControl.Close() + return nil, syserr + } + + eventfd := os.NewFile(fd, "eventfd") + + eventControlPath := filepath.Join(dir, "cgroup.event_control") + data := fmt.Sprintf("%d %d", eventfd.Fd(), oomControl.Fd()) + if err := ioutil.WriteFile(eventControlPath, []byte(data), 0700); err != nil { + eventfd.Close() + oomControl.Close() + return nil, err + } + ch := make(chan struct{}) + go func() { + defer func() { + close(ch) + eventfd.Close() + oomControl.Close() + }() + buf := make([]byte, 8) + for { + if _, err := eventfd.Read(buf); err != nil { + return + } + // When a cgroup is destroyed, an event is sent to eventfd. + // So if the control path is gone, return instead of notifying. + if _, err := os.Lstat(eventControlPath); os.IsNotExist(err) { + return + } + ch <- struct{}{} + } + }() + return ch, nil +} + +// createContainer populates and configures the container type with the +// data provided by the execdriver.Command +func (d *driver) createContainer(c *execdriver.Command) (*configs.Config, error) { + container := execdriver.InitContainer(c) + if err := execdriver.SetupCgroups(container, c); err != nil { + return nil, err + } + return container, nil +} + +// Return an map of susbystem -> container cgroup +func cgroupPaths(containerId string) (map[string]string, error) { + subsystems, err := cgroups.GetAllSubsystems() + if err != nil { + return nil, err + } + log.Debugf("subsystems: %s", subsystems) + paths := make(map[string]string) + for _, subsystem := range subsystems { + cgroupRoot, cgroupDir, err := findCgroupRootAndDir(subsystem) + log.Debugf("cgroup path %s %s", cgroupRoot, cgroupDir) + if err != nil { + //unsupported subystem + continue + } + path := filepath.Join(cgroupRoot, cgroupDir, "lxc", containerId) + paths[subsystem] = path + } + + return paths, nil +} + +// this is copy from old libcontainer nodes.go +func createDeviceNodes(rootfs string, nodesToCreate []*configs.Device) error { + oldMask := syscall.Umask(0000) + defer syscall.Umask(oldMask) + + for _, node := range nodesToCreate { + if err := createDeviceNode(rootfs, node); err != nil { + return err + } + } + return nil +} + +// Creates the device node in the rootfs of the container. +func createDeviceNode(rootfs string, node *configs.Device) error { + var ( + dest = filepath.Join(rootfs, node.Path) + parent = filepath.Dir(dest) + ) + + if err := os.MkdirAll(parent, 0755); err != nil { + return err + } + + fileMode := node.FileMode + switch node.Type { + case 'c': + fileMode |= syscall.S_IFCHR + case 'b': + fileMode |= syscall.S_IFBLK + default: + return fmt.Errorf("%c is not a valid device type for device %s", node.Type, node.Path) + } + + if err := syscall.Mknod(dest, uint32(fileMode), node.Mkdev()); err != nil && !os.IsExist(err) { + return fmt.Errorf("mknod %s %s", node.Path, err) + } + + if err := syscall.Chown(dest, int(node.Uid), int(node.Gid)); err != nil { + return fmt.Errorf("chown %s to %d:%d", node.Path, node.Uid, node.Gid) + } + + return nil +} + +// setupUser changes the groups, gid, and uid for the user inside the container +// copy from libcontainer, cause not it's private +func setupUser(userSpec string) error { + // Set up defaults. + defaultExecUser := user.ExecUser{ + Uid: syscall.Getuid(), + Gid: syscall.Getgid(), + Home: "/", + } + passwdPath, err := user.GetPasswdPath() + if err != nil { + return err + } + groupPath, err := user.GetGroupPath() + if err != nil { + return err + } + execUser, err := user.GetExecUserPath(userSpec, &defaultExecUser, passwdPath, groupPath) + if err != nil { + return err + } + if err := syscall.Setgroups(execUser.Sgids); err != nil { + return err + } + if err := system.Setgid(execUser.Gid); err != nil { + return err + } + if err := system.Setuid(execUser.Uid); err != nil { + return err + } + // if we didn't get HOME already, set it based on the user's HOME + if envHome := os.Getenv("HOME"); envHome == "" { + if err := os.Setenv("HOME", execUser.Home); err != nil { + return err + } + } + return nil } /// Return the exit code of the process @@ -337,17 +579,25 @@ func (d *driver) Info(id string) execdriver.Info { } } +func findCgroupRootAndDir(subsystem string) (string, string, error) { + cgroupRoot, err := cgroups.FindCgroupMountpoint(subsystem) + if err != nil { + return "", "", err + } + + cgroupDir, err := cgroups.GetThisCgroupDir(subsystem) + if err != nil { + return "", "", err + } + return cgroupRoot, cgroupDir, nil +} + func (d *driver) GetPidsForContainer(id string) ([]int, error) { pids := []int{} // cpu is chosen because it is the only non optional subsystem in cgroups subsystem := "cpu" - cgroupRoot, err := cgroups.FindCgroupMountpoint(subsystem) - if err != nil { - return pids, err - } - - cgroupDir, err := cgroups.GetThisCgroupDir(subsystem) + cgroupRoot, cgroupDir, err := findCgroupRootAndDir(subsystem) if err != nil { return pids, err } @@ -407,8 +657,12 @@ func rootIsShared() bool { return true } +func (d *driver) containerDir(containerId string) string { + return path.Join(d.root, "containers", containerId) +} + func (d *driver) generateLXCConfig(c *execdriver.Command) (string, error) { - root := path.Join(d.root, "containers", c.ID, "config.lxc") + root := path.Join(d.containerDir(c.ID), "config.lxc") fo, err := os.Create(root) if err != nil { @@ -526,6 +780,5 @@ func (d *driver) Exec(c *execdriver.Command, processConfig *execdriver.ProcessCo } func (d *driver) Stats(id string) (*execdriver.ResourceStats, error) { - return nil, fmt.Errorf("container stats are not supported with LXC") - + return execdriver.Stats(d.containerDir(id), d.activeContainers[id].container.Cgroups.Memory, d.machineMemory) } diff --git a/daemon/execdriver/lxc/lxc_init_linux.go b/daemon/execdriver/lxc/lxc_init_linux.go index 956a283fc2..e7bc2b5f3a 100644 --- a/daemon/execdriver/lxc/lxc_init_linux.go +++ b/daemon/execdriver/lxc/lxc_init_linux.go @@ -3,8 +3,6 @@ package lxc import ( "fmt" - "github.com/docker/libcontainer" - "github.com/docker/libcontainer/namespaces" "github.com/docker/libcontainer/utils" ) @@ -12,9 +10,7 @@ func finalizeNamespace(args *InitArgs) error { if err := utils.CloseExecFrom(3); err != nil { return err } - if err := namespaces.SetupUser(&libcontainer.Config{ - User: args.User, - }); err != nil { + if err := setupUser(args.User); err != nil { return fmt.Errorf("setup user %s", err) } if err := setupWorkingDirectory(args); err != nil { diff --git a/daemon/execdriver/lxc/lxc_template.go b/daemon/execdriver/lxc/lxc_template.go index 4ed2a45c8c..e4a8ed6b5f 100644 --- a/daemon/execdriver/lxc/lxc_template.go +++ b/daemon/execdriver/lxc/lxc_template.go @@ -11,7 +11,6 @@ import ( nativeTemplate "github.com/docker/docker/daemon/execdriver/native/template" "github.com/docker/docker/utils" "github.com/docker/libcontainer/label" - "github.com/docker/libcontainer/security/capabilities" ) const LxcTemplate = ` @@ -52,7 +51,7 @@ lxc.cgroup.devices.allow = a lxc.cgroup.devices.deny = a #Allow the devices passed to us in the AllowedDevices list. {{range $allowedDevice := .AllowedDevices}} -lxc.cgroup.devices.allow = {{$allowedDevice.GetCgroupAllowString}} +lxc.cgroup.devices.allow = {{$allowedDevice.CgroupString}} {{end}} {{end}} @@ -108,8 +107,8 @@ lxc.cgroup.memory.memsw.limit_in_bytes = {{$memSwap}} {{if .Resources.CpuShares}} lxc.cgroup.cpu.shares = {{.Resources.CpuShares}} {{end}} -{{if .Resources.Cpuset}} -lxc.cgroup.cpuset.cpus = {{.Resources.Cpuset}} +{{if .Resources.CpusetCpus}} +lxc.cgroup.cpuset.cpus = {{.Resources.CpusetCpus}} {{end}} {{end}} @@ -126,7 +125,9 @@ lxc.network.ipv4 = {{.Network.Interface.IPAddress}}/{{.Network.Interface.IPPrefi {{if .Network.Interface.Gateway}} lxc.network.ipv4.gateway = {{.Network.Interface.Gateway}} {{end}} - +{{if .Network.Interface.MacAddress}} +lxc.network.hwaddr = {{.Network.Interface.MacAddress}} +{{end}} {{if .ProcessConfig.Env}} lxc.utsname = {{getHostname .ProcessConfig.Env}} {{end}} @@ -167,7 +168,7 @@ func keepCapabilities(adds []string, drops []string) ([]string, error) { var newCaps []string for _, cap := range caps { log.Debugf("cap %s\n", cap) - realCap := capabilities.GetCapability(cap) + realCap := execdriver.GetCapability(cap) numCap := fmt.Sprintf("%d", realCap.Value) newCaps = append(newCaps, numCap) } @@ -178,13 +179,10 @@ func keepCapabilities(adds []string, drops []string) ([]string, error) { func dropList(drops []string) ([]string, error) { if utils.StringsContainsNoCase(drops, "all") { var newCaps []string - for _, cap := range capabilities.GetAllCapabilities() { - log.Debugf("drop cap %s\n", cap) - realCap := capabilities.GetCapability(cap) - if realCap == nil { - return nil, fmt.Errorf("Invalid capability '%s'", cap) - } - numCap := fmt.Sprintf("%d", realCap.Value) + for _, capName := range execdriver.GetAllCapabilities() { + cap := execdriver.GetCapability(capName) + log.Debugf("drop cap %s\n", cap.Key) + numCap := fmt.Sprintf("%d", cap.Value) newCaps = append(newCaps, numCap) } return newCaps, nil @@ -194,6 +192,7 @@ func dropList(drops []string) ([]string, error) { func isDirectory(source string) string { f, err := os.Stat(source) + log.Debugf("dir: %s\n", source) if err != nil { if os.IsNotExist(err) { return "dir" diff --git a/daemon/execdriver/lxc/lxc_template_unit_test.go b/daemon/execdriver/lxc/lxc_template_unit_test.go index bb622d4bc5..65e7b6d551 100644 --- a/daemon/execdriver/lxc/lxc_template_unit_test.go +++ b/daemon/execdriver/lxc/lxc_template_unit_test.go @@ -5,11 +5,6 @@ package lxc import ( "bufio" "fmt" - "github.com/docker/docker/daemon/execdriver" - nativeTemplate "github.com/docker/docker/daemon/execdriver/native/template" - "github.com/docker/libcontainer/devices" - "github.com/docker/libcontainer/security/capabilities" - "github.com/syndtr/gocapability/capability" "io/ioutil" "math/rand" "os" @@ -17,6 +12,11 @@ import ( "strings" "testing" "time" + + "github.com/docker/docker/daemon/execdriver" + nativeTemplate "github.com/docker/docker/daemon/execdriver/native/template" + "github.com/docker/libcontainer/configs" + "github.com/syndtr/gocapability/capability" ) func TestLXCConfig(t *testing.T) { @@ -53,7 +53,7 @@ func TestLXCConfig(t *testing.T) { Mtu: 1500, Interface: nil, }, - AllowedDevices: make([]*devices.Device, 0), + AllowedDevices: make([]*configs.Device, 0), ProcessConfig: execdriver.ProcessConfig{}, } p, err := driver.generateLXCConfig(command) @@ -295,7 +295,7 @@ func TestCustomLxcConfigMisc(t *testing.T) { grepFile(t, p, "lxc.cgroup.cpuset.cpus = 0,1") container := nativeTemplate.New() for _, cap := range container.Capabilities { - realCap := capabilities.GetCapability(cap) + realCap := execdriver.GetCapability(cap) numCap := fmt.Sprintf("%d", realCap.Value) if cap != "MKNOD" && cap != "KILL" { grepFile(t, p, fmt.Sprintf("lxc.cap.keep = %s", numCap)) @@ -359,7 +359,7 @@ func TestCustomLxcConfigMiscOverride(t *testing.T) { grepFile(t, p, "lxc.cgroup.cpuset.cpus = 0,1") container := nativeTemplate.New() for _, cap := range container.Capabilities { - realCap := capabilities.GetCapability(cap) + realCap := execdriver.GetCapability(cap) numCap := fmt.Sprintf("%d", realCap.Value) if cap != "MKNOD" && cap != "KILL" { grepFile(t, p, fmt.Sprintf("lxc.cap.keep = %s", numCap)) diff --git a/daemon/execdriver/native/create.go b/daemon/execdriver/native/create.go index c5a8da75b7..a988fba529 100644 --- a/daemon/execdriver/native/create.go +++ b/daemon/execdriver/native/create.go @@ -3,39 +3,25 @@ package native import ( + "errors" "fmt" - "os" - "os/exec" + "net" "path/filepath" + "strings" + "syscall" "github.com/docker/docker/daemon/execdriver" - "github.com/docker/docker/daemon/execdriver/native/template" - "github.com/docker/libcontainer" + "github.com/docker/docker/pkg/symlink" "github.com/docker/libcontainer/apparmor" + "github.com/docker/libcontainer/configs" "github.com/docker/libcontainer/devices" - "github.com/docker/libcontainer/mount" - "github.com/docker/libcontainer/security/capabilities" + "github.com/docker/libcontainer/utils" ) // createContainer populates and configures the container type with the // data provided by the execdriver.Command -func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Config, error) { - container := template.New() - - container.Hostname = getEnv("HOSTNAME", c.ProcessConfig.Env) - container.Tty = c.ProcessConfig.Tty - container.User = c.ProcessConfig.User - container.WorkingDir = c.WorkingDir - container.Env = c.ProcessConfig.Env - container.Cgroups.Name = c.ID - container.Cgroups.AllowedDevices = c.AllowedDevices - container.MountConfig.DeviceNodes = c.AutoCreatedDevices - container.RootFs = c.Rootfs - container.MountConfig.ReadonlyFs = c.ReadonlyRootfs - - // check to see if we are running in ramdisk to disable pivot root - container.MountConfig.NoPivotRoot = os.Getenv("DOCKER_RAMDISK") != "" - container.RestrictSys = true +func (d *driver) createContainer(c *execdriver.Command) (*configs.Config, error) { + container := execdriver.InitContainer(c) if err := d.createIpc(container, c); err != nil { return nil, err @@ -50,6 +36,14 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Config, e } if c.ProcessConfig.Privileged { + // clear readonly for /sys + for i := range container.Mounts { + if container.Mounts[i].Destination == "/sys" { + container.Mounts[i].Flags &= ^syscall.MS_RDONLY + } + } + container.ReadonlyPaths = nil + container.MaskPaths = nil if err := d.setPrivileged(container); err != nil { return nil, err } @@ -63,7 +57,7 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Config, e container.AppArmorProfile = c.AppArmorProfile } - if err := d.setupCgroups(container, c); err != nil { + if err := execdriver.SetupCgroups(container, c); err != nil { return nil, err } @@ -74,41 +68,52 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Config, e if err := d.setupLabels(container, c); err != nil { return nil, err } - - cmds := make(map[string]*exec.Cmd) - d.Lock() - for k, v := range d.activeContainers { - cmds[k] = v.cmd - } - d.Unlock() - + d.setupRlimits(container, c) return container, nil } -func (d *driver) createNetwork(container *libcontainer.Config, c *execdriver.Command) error { +func generateIfaceName() (string, error) { + for i := 0; i < 10; i++ { + name, err := utils.GenerateRandomName("veth", 7) + if err != nil { + continue + } + if _, err := net.InterfaceByName(name); err != nil { + if strings.Contains(err.Error(), "no such") { + return name, nil + } + return "", err + } + } + return "", errors.New("Failed to find name for new interface") +} + +func (d *driver) createNetwork(container *configs.Config, c *execdriver.Command) error { if c.Network.HostNetworking { - container.Namespaces.Remove(libcontainer.NEWNET) + container.Namespaces.Remove(configs.NEWNET) return nil } - container.Networks = []*libcontainer.Network{ + container.Networks = []*configs.Network{ { - Mtu: c.Network.Mtu, - Address: fmt.Sprintf("%s/%d", "127.0.0.1", 0), - Gateway: "localhost", - Type: "loopback", + Type: "loopback", }, } + iName, err := generateIfaceName() + if err != nil { + return err + } if c.Network.Interface != nil { - vethNetwork := libcontainer.Network{ - Mtu: c.Network.Mtu, - Address: fmt.Sprintf("%s/%d", c.Network.Interface.IPAddress, c.Network.Interface.IPPrefixLen), - MacAddress: c.Network.Interface.MacAddress, - Gateway: c.Network.Interface.Gateway, - Type: "veth", - Bridge: c.Network.Interface.Bridge, - VethPrefix: "veth", + vethNetwork := configs.Network{ + Name: "eth0", + HostInterfaceName: iName, + Mtu: c.Network.Mtu, + Address: fmt.Sprintf("%s/%d", c.Network.Interface.IPAddress, c.Network.Interface.IPPrefixLen), + MacAddress: c.Network.Interface.MacAddress, + Gateway: c.Network.Interface.Gateway, + Type: "veth", + Bridge: c.Network.Interface.Bridge, } if c.Network.Interface.GlobalIPv6Address != "" { vethNetwork.IPv6Address = fmt.Sprintf("%s/%d", c.Network.Interface.GlobalIPv6Address, c.Network.Interface.GlobalIPv6PrefixLen) @@ -122,21 +127,24 @@ func (d *driver) createNetwork(container *libcontainer.Config, c *execdriver.Com active := d.activeContainers[c.Network.ContainerID] d.Unlock() - if active == nil || active.cmd.Process == nil { + if active == nil { return fmt.Errorf("%s is not a valid running container to join", c.Network.ContainerID) } - cmd := active.cmd - nspath := filepath.Join("/proc", fmt.Sprint(cmd.Process.Pid), "ns", "net") - container.Namespaces.Add(libcontainer.NEWNET, nspath) + state, err := active.State() + if err != nil { + return err + } + + container.Namespaces.Add(configs.NEWNET, state.NamespacePaths[configs.NEWNET]) } return nil } -func (d *driver) createIpc(container *libcontainer.Config, c *execdriver.Command) error { +func (d *driver) createIpc(container *configs.Config, c *execdriver.Command) error { if c.Ipc.HostIpc { - container.Namespaces.Remove(libcontainer.NEWIPC) + container.Namespaces.Remove(configs.NEWIPC) return nil } @@ -145,37 +153,38 @@ func (d *driver) createIpc(container *libcontainer.Config, c *execdriver.Command active := d.activeContainers[c.Ipc.ContainerID] d.Unlock() - if active == nil || active.cmd.Process == nil { + if active == nil { return fmt.Errorf("%s is not a valid running container to join", c.Ipc.ContainerID) } - cmd := active.cmd - container.Namespaces.Add(libcontainer.NEWIPC, filepath.Join("/proc", fmt.Sprint(cmd.Process.Pid), "ns", "ipc")) + state, err := active.State() + if err != nil { + return err + } + container.Namespaces.Add(configs.NEWIPC, state.NamespacePaths[configs.NEWIPC]) } return nil } -func (d *driver) createPid(container *libcontainer.Config, c *execdriver.Command) error { +func (d *driver) createPid(container *configs.Config, c *execdriver.Command) error { if c.Pid.HostPid { - container.Namespaces.Remove(libcontainer.NEWPID) + container.Namespaces.Remove(configs.NEWPID) return nil } return nil } -func (d *driver) setPrivileged(container *libcontainer.Config) (err error) { - container.Capabilities = capabilities.GetAllCapabilities() +func (d *driver) setPrivileged(container *configs.Config) (err error) { + container.Capabilities = execdriver.GetAllCapabilities() container.Cgroups.AllowAllDevices = true - hostDeviceNodes, err := devices.GetHostDeviceNodes() + hostDevices, err := devices.HostDevices() if err != nil { return err } - container.MountConfig.DeviceNodes = hostDeviceNodes - - container.RestrictSys = false + container.Devices = hostDevices if apparmor.IsEnabled() { container.AppArmorProfile = "unconfined" @@ -184,41 +193,66 @@ func (d *driver) setPrivileged(container *libcontainer.Config) (err error) { return nil } -func (d *driver) setCapabilities(container *libcontainer.Config, c *execdriver.Command) (err error) { +func (d *driver) setCapabilities(container *configs.Config, c *execdriver.Command) (err error) { container.Capabilities, err = execdriver.TweakCapabilities(container.Capabilities, c.CapAdd, c.CapDrop) return err } -func (d *driver) setupCgroups(container *libcontainer.Config, c *execdriver.Command) error { - if c.Resources != nil { - container.Cgroups.CpuShares = c.Resources.CpuShares - container.Cgroups.Memory = c.Resources.Memory - container.Cgroups.MemoryReservation = c.Resources.Memory - container.Cgroups.MemorySwap = c.Resources.MemorySwap - container.Cgroups.CpusetCpus = c.Resources.Cpuset +func (d *driver) setupRlimits(container *configs.Config, c *execdriver.Command) { + if c.Resources == nil { + return } - return nil -} - -func (d *driver) setupMounts(container *libcontainer.Config, c *execdriver.Command) error { - for _, m := range c.Mounts { - container.MountConfig.Mounts = append(container.MountConfig.Mounts, &mount.Mount{ - Type: "bind", - Source: m.Source, - Destination: m.Destination, - Writable: m.Writable, - Private: m.Private, - Slave: m.Slave, + for _, rlimit := range c.Resources.Rlimits { + container.Rlimits = append(container.Rlimits, configs.Rlimit{ + Type: rlimit.Type, + Hard: rlimit.Hard, + Soft: rlimit.Soft, }) } +} +func (d *driver) setupMounts(container *configs.Config, c *execdriver.Command) error { + userMounts := make(map[string]struct{}) + for _, m := range c.Mounts { + userMounts[m.Destination] = struct{}{} + } + + // Filter out mounts that are overriden by user supplied mounts + var defaultMounts []*configs.Mount + for _, m := range container.Mounts { + if _, ok := userMounts[m.Destination]; !ok { + defaultMounts = append(defaultMounts, m) + } + } + container.Mounts = defaultMounts + + for _, m := range c.Mounts { + dest, err := symlink.FollowSymlinkInScope(filepath.Join(c.Rootfs, m.Destination), c.Rootfs) + if err != nil { + return err + } + flags := syscall.MS_BIND | syscall.MS_REC + if !m.Writable { + flags |= syscall.MS_RDONLY + } + if m.Slave { + flags |= syscall.MS_SLAVE + } + + container.Mounts = append(container.Mounts, &configs.Mount{ + Source: m.Source, + Destination: dest, + Device: "bind", + Flags: flags, + }) + } return nil } -func (d *driver) setupLabels(container *libcontainer.Config, c *execdriver.Command) error { +func (d *driver) setupLabels(container *configs.Config, c *execdriver.Command) error { container.ProcessLabel = c.ProcessLabel - container.MountConfig.MountLabel = c.MountLabel + container.MountLabel = c.MountLabel return nil } diff --git a/daemon/execdriver/native/driver.go b/daemon/execdriver/native/driver.go index 533e6d61ef..99019d0f8e 100644 --- a/daemon/execdriver/native/driver.go +++ b/daemon/execdriver/native/driver.go @@ -17,16 +17,15 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/daemon/execdriver" + "github.com/docker/docker/pkg/reexec" sysinfo "github.com/docker/docker/pkg/system" "github.com/docker/docker/pkg/term" "github.com/docker/libcontainer" "github.com/docker/libcontainer/apparmor" - "github.com/docker/libcontainer/cgroups/fs" "github.com/docker/libcontainer/cgroups/systemd" - consolepkg "github.com/docker/libcontainer/console" - "github.com/docker/libcontainer/namespaces" - _ "github.com/docker/libcontainer/namespaces/nsenter" + "github.com/docker/libcontainer/configs" "github.com/docker/libcontainer/system" + "github.com/docker/libcontainer/utils" ) const ( @@ -34,16 +33,12 @@ const ( Version = "0.2" ) -type activeContainer struct { - container *libcontainer.Config - cmd *exec.Cmd -} - type driver struct { root string initPath string - activeContainers map[string]*activeContainer + activeContainers map[string]libcontainer.Container machineMemory int64 + factory libcontainer.Factory sync.Mutex } @@ -60,11 +55,27 @@ func NewDriver(root, initPath string) (*driver, error) { if err := apparmor.InstallDefaultProfile(); err != nil { return nil, err } + cgm := libcontainer.Cgroupfs + if systemd.UseSystemd() { + cgm = libcontainer.SystemdCgroups + } + + f, err := libcontainer.New( + root, + cgm, + libcontainer.InitPath(reexec.Self(), DriverName), + libcontainer.TmpfsRoot, + ) + if err != nil { + return nil, err + } + return &driver{ root: root, initPath: initPath, - activeContainers: make(map[string]*activeContainer), + activeContainers: make(map[string]libcontainer.Container), machineMemory: meminfo.MemTotal, + factory: f, }, nil } @@ -82,98 +93,141 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba var term execdriver.Terminal + p := &libcontainer.Process{ + Args: append([]string{c.ProcessConfig.Entrypoint}, c.ProcessConfig.Arguments...), + Env: c.ProcessConfig.Env, + Cwd: c.WorkingDir, + User: c.ProcessConfig.User, + } + if c.ProcessConfig.Tty { - term, err = NewTtyConsole(&c.ProcessConfig, pipes) + rootuid, err := container.HostUID() + if err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err + } + cons, err := p.NewConsole(rootuid) + if err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err + } + term, err = NewTtyConsole(cons, pipes, rootuid) } else { - term, err = execdriver.NewStdConsole(&c.ProcessConfig, pipes) + p.Stdout = pipes.Stdout + p.Stderr = pipes.Stderr + r, w, err := os.Pipe() + if err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err + } + if pipes.Stdin != nil { + go func() { + io.Copy(w, pipes.Stdin) + w.Close() + }() + p.Stdin = r + } + term = &execdriver.StdConsole{} } if err != nil { return execdriver.ExitStatus{ExitCode: -1}, err } c.ProcessConfig.Terminal = term + cont, err := d.factory.Create(c.ID, container) + if err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err + } d.Lock() - d.activeContainers[c.ID] = &activeContainer{ - container: container, - cmd: &c.ProcessConfig.Cmd, - } + d.activeContainers[c.ID] = cont d.Unlock() - - var ( - dataPath = filepath.Join(d.root, c.ID) - args = append([]string{c.ProcessConfig.Entrypoint}, c.ProcessConfig.Arguments...) - ) - - if err := d.createContainerRoot(c.ID); err != nil { - return execdriver.ExitStatus{ExitCode: -1}, err - } - defer d.cleanContainer(c.ID) - - if err := d.writeContainerFile(container, c.ID); err != nil { - return execdriver.ExitStatus{ExitCode: -1}, err - } - - execOutputChan := make(chan execOutput, 1) - waitForStart := make(chan struct{}) - - go func() { - exitCode, err := namespaces.Exec(container, c.ProcessConfig.Stdin, c.ProcessConfig.Stdout, c.ProcessConfig.Stderr, c.ProcessConfig.Console, dataPath, args, func(container *libcontainer.Config, console, dataPath, init string, child *os.File, args []string) *exec.Cmd { - c.ProcessConfig.Path = d.initPath - c.ProcessConfig.Args = append([]string{ - DriverName, - "-console", console, - "-pipe", "3", - "-root", filepath.Join(d.root, c.ID), - "--", - }, args...) - - // set this to nil so that when we set the clone flags anything else is reset - c.ProcessConfig.SysProcAttr = &syscall.SysProcAttr{ - Cloneflags: uintptr(namespaces.GetNamespaceFlags(container.Namespaces)), - } - c.ProcessConfig.ExtraFiles = []*os.File{child} - - c.ProcessConfig.Env = container.Env - c.ProcessConfig.Dir = container.RootFs - - return &c.ProcessConfig.Cmd - }, func() { - close(waitForStart) - if startCallback != nil { - c.ContainerPid = c.ProcessConfig.Process.Pid - startCallback(&c.ProcessConfig, c.ContainerPid) - } - }) - execOutputChan <- execOutput{exitCode, err} + defer func() { + cont.Destroy() + d.cleanContainer(c.ID) }() - select { - case execOutput := <-execOutputChan: - return execdriver.ExitStatus{ExitCode: execOutput.exitCode}, execOutput.err - case <-waitForStart: - break + if err := cont.Start(p); err != nil { + return execdriver.ExitStatus{ExitCode: -1}, err } - oomKill := false - state, err := libcontainer.GetState(filepath.Join(d.root, c.ID)) - if err == nil { - oomKillNotification, err := libcontainer.NotifyOnOOM(state) - if err == nil { - _, oomKill = <-oomKillNotification - } else { - log.Warnf("WARNING: Your kernel does not support OOM notifications: %s", err) + if startCallback != nil { + pid, err := p.Pid() + if err != nil { + p.Signal(os.Kill) + p.Wait() + return execdriver.ExitStatus{ExitCode: -1}, err } - } else { - log.Warnf("Failed to get container state, oom notify will not work: %s", err) + startCallback(&c.ProcessConfig, pid) } - // wait for the container to exit. - execOutput := <-execOutputChan - return execdriver.ExitStatus{ExitCode: execOutput.exitCode, OOMKilled: oomKill}, execOutput.err + oomKillNotification, err := cont.NotifyOOM() + if err != nil { + oomKillNotification = nil + log.Warnf("Your kernel does not support OOM notifications: %s", err) + } + waitF := p.Wait + if nss := cont.Config().Namespaces; nss.Contains(configs.NEWPID) { + // we need such hack for tracking processes with inerited fds, + // because cmd.Wait() waiting for all streams to be copied + waitF = waitInPIDHost(p, cont) + } + ps, err := waitF() + if err != nil { + if err, ok := err.(*exec.ExitError); !ok { + return execdriver.ExitStatus{ExitCode: -1}, err + } else { + ps = err.ProcessState + } + } + cont.Destroy() + + _, oomKill := <-oomKillNotification + + return execdriver.ExitStatus{ExitCode: utils.ExitStatus(ps.Sys().(syscall.WaitStatus)), OOMKilled: oomKill}, nil } -func (d *driver) Kill(p *execdriver.Command, sig int) error { - return syscall.Kill(p.ProcessConfig.Process.Pid, syscall.Signal(sig)) +func waitInPIDHost(p *libcontainer.Process, c libcontainer.Container) func() (*os.ProcessState, error) { + return func() (*os.ProcessState, error) { + pid, err := p.Pid() + if err != nil { + return nil, err + } + + process, err := os.FindProcess(pid) + s, err := process.Wait() + if err != nil { + if err, ok := err.(*exec.ExitError); !ok { + return s, err + } else { + s = err.ProcessState + } + } + processes, err := c.Processes() + if err != nil { + return s, err + } + + for _, pid := range processes { + process, err := os.FindProcess(pid) + if err != nil { + log.Errorf("Failed to kill process: %d", pid) + continue + } + process.Kill() + } + + p.Wait() + return s, err + } +} + +func (d *driver) Kill(c *execdriver.Command, sig int) error { + active := d.activeContainers[c.ID] + if active == nil { + return fmt.Errorf("active container for %s does not exist", c.ID) + } + state, err := active.State() + if err != nil { + return err + } + return syscall.Kill(state.InitProcessPid, syscall.Signal(sig)) } func (d *driver) Pause(c *execdriver.Command) error { @@ -181,11 +235,7 @@ func (d *driver) Pause(c *execdriver.Command) error { if active == nil { return fmt.Errorf("active container for %s does not exist", c.ID) } - active.container.Cgroups.Freezer = "FROZEN" - if systemd.UseSystemd() { - return systemd.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer) - } - return fs.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer) + return active.Pause() } func (d *driver) Unpause(c *execdriver.Command) error { @@ -193,44 +243,31 @@ func (d *driver) Unpause(c *execdriver.Command) error { if active == nil { return fmt.Errorf("active container for %s does not exist", c.ID) } - active.container.Cgroups.Freezer = "THAWED" - if systemd.UseSystemd() { - return systemd.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer) - } - return fs.Freeze(active.container.Cgroups, active.container.Cgroups.Freezer) + return active.Resume() } -func (d *driver) Terminate(p *execdriver.Command) error { +func (d *driver) Terminate(c *execdriver.Command) error { + defer d.cleanContainer(c.ID) // lets check the start time for the process - state, err := libcontainer.GetState(filepath.Join(d.root, p.ID)) - if err != nil { - if !os.IsNotExist(err) { - return err - } - // TODO: Remove this part for version 1.2.0 - // This is added only to ensure smooth upgrades from pre 1.1.0 to 1.1.0 - data, err := ioutil.ReadFile(filepath.Join(d.root, p.ID, "start")) - if err != nil { - // if we don't have the data on disk then we can assume the process is gone - // because this is only removed after we know the process has stopped - if os.IsNotExist(err) { - return nil - } - return err - } - state = &libcontainer.State{InitStartTime: string(data)} + active := d.activeContainers[c.ID] + if active == nil { + return fmt.Errorf("active container for %s does not exist", c.ID) } + state, err := active.State() + if err != nil { + return err + } + pid := state.InitProcessPid - currentStartTime, err := system.GetProcessStartTime(p.ProcessConfig.Process.Pid) + currentStartTime, err := system.GetProcessStartTime(pid) if err != nil { return err } - if state.InitStartTime == currentStartTime { - err = syscall.Kill(p.ProcessConfig.Process.Pid, 9) - syscall.Wait4(p.ProcessConfig.Process.Pid, nil, 0, nil) + if state.InitProcessStartTime == currentStartTime { + err = syscall.Kill(pid, 9) + syscall.Wait4(pid, nil, 0, nil) } - d.cleanContainer(p.ID) return err @@ -255,15 +292,10 @@ func (d *driver) GetPidsForContainer(id string) ([]int, error) { if active == nil { return nil, fmt.Errorf("active container for %s does not exist", id) } - c := active.container.Cgroups - - if systemd.UseSystemd() { - return systemd.GetPids(c) - } - return fs.GetPids(c) + return active.Processes() } -func (d *driver) writeContainerFile(container *libcontainer.Config, id string) error { +func (d *driver) writeContainerFile(container *configs.Config, id string) error { data, err := json.Marshal(container) if err != nil { return err @@ -275,7 +307,7 @@ func (d *driver) cleanContainer(id string) error { d.Lock() delete(d.activeContainers, id) d.Unlock() - return os.RemoveAll(filepath.Join(d.root, id, "container.json")) + return os.RemoveAll(filepath.Join(d.root, id)) } func (d *driver) createContainerRoot(id string) error { @@ -288,28 +320,24 @@ func (d *driver) Clean(id string) error { func (d *driver) Stats(id string) (*execdriver.ResourceStats, error) { c := d.activeContainers[id] - state, err := libcontainer.GetState(filepath.Join(d.root, id)) - if err != nil { - if os.IsNotExist(err) { - return nil, execdriver.ErrNotRunning - } - return nil, err + if c == nil { + return nil, execdriver.ErrNotRunning } now := time.Now() - stats, err := libcontainer.GetStats(nil, state) + stats, err := c.Stats() if err != nil { return nil, err } - memoryLimit := c.container.Cgroups.Memory + memoryLimit := c.Config().Cgroups.Memory // if the container does not have any memory limit specified set the // limit to the machines memory if memoryLimit == 0 { memoryLimit = d.machineMemory } return &execdriver.ResourceStats{ - Read: now, - ContainerStats: stats, - MemoryLimit: memoryLimit, + Stats: stats, + Read: now, + MemoryLimit: memoryLimit, }, nil } @@ -324,38 +352,31 @@ func getEnv(key string, env []string) string { } type TtyConsole struct { - MasterPty *os.File + console libcontainer.Console } -func NewTtyConsole(processConfig *execdriver.ProcessConfig, pipes *execdriver.Pipes) (*TtyConsole, error) { - ptyMaster, console, err := consolepkg.CreateMasterAndConsole() - if err != nil { - return nil, err - } - +func NewTtyConsole(console libcontainer.Console, pipes *execdriver.Pipes, rootuid int) (*TtyConsole, error) { tty := &TtyConsole{ - MasterPty: ptyMaster, + console: console, } - if err := tty.AttachPipes(&processConfig.Cmd, pipes); err != nil { + if err := tty.AttachPipes(pipes); err != nil { tty.Close() return nil, err } - processConfig.Console = console - return tty, nil } -func (t *TtyConsole) Master() *os.File { - return t.MasterPty +func (t *TtyConsole) Master() libcontainer.Console { + return t.console } func (t *TtyConsole) Resize(h, w int) error { - return term.SetWinsize(t.MasterPty.Fd(), &term.Winsize{Height: uint16(h), Width: uint16(w)}) + return term.SetWinsize(t.console.Fd(), &term.Winsize{Height: uint16(h), Width: uint16(w)}) } -func (t *TtyConsole) AttachPipes(command *exec.Cmd, pipes *execdriver.Pipes) error { +func (t *TtyConsole) AttachPipes(pipes *execdriver.Pipes) error { go func() { if wb, ok := pipes.Stdout.(interface { CloseWriters() error @@ -363,12 +384,12 @@ func (t *TtyConsole) AttachPipes(command *exec.Cmd, pipes *execdriver.Pipes) err defer wb.CloseWriters() } - io.Copy(pipes.Stdout, t.MasterPty) + io.Copy(pipes.Stdout, t.console) }() if pipes.Stdin != nil { go func() { - io.Copy(t.MasterPty, pipes.Stdin) + io.Copy(t.console, pipes.Stdin) pipes.Stdin.Close() }() @@ -378,5 +399,5 @@ func (t *TtyConsole) AttachPipes(command *exec.Cmd, pipes *execdriver.Pipes) err } func (t *TtyConsole) Close() error { - return t.MasterPty.Close() + return t.console.Close() } diff --git a/daemon/execdriver/native/exec.go b/daemon/execdriver/native/exec.go index 84ad096725..af6dcd2adb 100644 --- a/daemon/execdriver/native/exec.go +++ b/daemon/execdriver/native/exec.go @@ -4,67 +4,77 @@ package native import ( "fmt" - "log" "os" "os/exec" - "path/filepath" - "runtime" + "syscall" "github.com/docker/docker/daemon/execdriver" - "github.com/docker/docker/pkg/reexec" "github.com/docker/libcontainer" - "github.com/docker/libcontainer/namespaces" + _ "github.com/docker/libcontainer/nsenter" + "github.com/docker/libcontainer/utils" ) -const execCommandName = "nsenter-exec" - -func init() { - reexec.Register(execCommandName, nsenterExec) -} - -func nsenterExec() { - runtime.LockOSThread() - - // User args are passed after '--' in the command line. - userArgs := findUserArgs() - - config, err := loadConfigFromFd() - if err != nil { - log.Fatalf("docker-exec: unable to receive config from sync pipe: %s", err) - } - - if err := namespaces.FinalizeSetns(config, userArgs); err != nil { - log.Fatalf("docker-exec: failed to exec: %s", err) - } -} - // TODO(vishh): Add support for running in priviledged mode and running as a different user. func (d *driver) Exec(c *execdriver.Command, processConfig *execdriver.ProcessConfig, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error) { active := d.activeContainers[c.ID] if active == nil { return -1, fmt.Errorf("No active container exists with ID %s", c.ID) } - state, err := libcontainer.GetState(filepath.Join(d.root, c.ID)) - if err != nil { - return -1, fmt.Errorf("State unavailable for container with ID %s. The container may have been cleaned up already. Error: %s", c.ID, err) - } var term execdriver.Terminal + var err error + + p := &libcontainer.Process{ + Args: append([]string{processConfig.Entrypoint}, processConfig.Arguments...), + Env: c.ProcessConfig.Env, + Cwd: c.WorkingDir, + User: c.ProcessConfig.User, + } if processConfig.Tty { - term, err = NewTtyConsole(processConfig, pipes) + config := active.Config() + rootuid, err := config.HostUID() + if err != nil { + return -1, err + } + cons, err := p.NewConsole(rootuid) + if err != nil { + return -1, err + } + term, err = NewTtyConsole(cons, pipes, rootuid) } else { - term, err = execdriver.NewStdConsole(processConfig, pipes) + p.Stdout = pipes.Stdout + p.Stderr = pipes.Stderr + p.Stdin = pipes.Stdin + term = &execdriver.StdConsole{} + } + if err != nil { + return -1, err } processConfig.Terminal = term - args := append([]string{processConfig.Entrypoint}, processConfig.Arguments...) + if err := active.Start(p); err != nil { + return -1, err + } - return namespaces.ExecIn(active.container, state, args, os.Args[0], "exec", processConfig.Stdin, processConfig.Stdout, processConfig.Stderr, processConfig.Console, - func(cmd *exec.Cmd) { - if startCallback != nil { - startCallback(&c.ProcessConfig, cmd.Process.Pid) - } - }) + if startCallback != nil { + pid, err := p.Pid() + if err != nil { + p.Signal(os.Kill) + p.Wait() + return -1, err + } + startCallback(&c.ProcessConfig, pid) + } + + ps, err := p.Wait() + if err != nil { + exitErr, ok := err.(*exec.ExitError) + if !ok { + return -1, err + } + ps = exitErr.ProcessState + } + return utils.ExitStatus(ps.Sys().(syscall.WaitStatus)), nil } diff --git a/daemon/execdriver/native/info.go b/daemon/execdriver/native/info.go index 601b97e810..9d7342da86 100644 --- a/daemon/execdriver/native/info.go +++ b/daemon/execdriver/native/info.go @@ -2,13 +2,6 @@ package native -import ( - "os" - "path/filepath" - - "github.com/docker/libcontainer" -) - type info struct { ID string driver *driver @@ -18,13 +11,6 @@ type info struct { // pid file for a container. If the file exists then the // container is currently running func (i *info) IsRunning() bool { - if _, err := libcontainer.GetState(filepath.Join(i.driver.root, i.ID)); err == nil { - return true - } - // TODO: Remove this part for version 1.2.0 - // This is added only to ensure smooth upgrades from pre 1.1.0 to 1.1.0 - if _, err := os.Stat(filepath.Join(i.driver.root, i.ID, "pid")); err == nil { - return true - } - return false + _, ok := i.driver.activeContainers[i.ID] + return ok } diff --git a/daemon/execdriver/native/init.go b/daemon/execdriver/native/init.go index 754d842c3b..f57d6cddec 100644 --- a/daemon/execdriver/native/init.go +++ b/daemon/execdriver/native/init.go @@ -3,55 +3,40 @@ package native import ( - "encoding/json" - "flag" "fmt" "os" - "path/filepath" "runtime" "github.com/docker/docker/pkg/reexec" "github.com/docker/libcontainer" - "github.com/docker/libcontainer/namespaces" ) func init() { reexec.Register(DriverName, initializer) } +func fatal(err error) { + if lerr, ok := err.(libcontainer.Error); ok { + lerr.Detail(os.Stderr) + os.Exit(1) + } + + fmt.Fprintln(os.Stderr, err) + os.Exit(1) +} + func initializer() { + runtime.GOMAXPROCS(1) runtime.LockOSThread() - - var ( - pipe = flag.Int("pipe", 0, "sync pipe fd") - console = flag.String("console", "", "console (pty slave) path") - root = flag.String("root", ".", "root path for configuration files") - ) - - flag.Parse() - - var container *libcontainer.Config - f, err := os.Open(filepath.Join(*root, "container.json")) + factory, err := libcontainer.New("") if err != nil { - writeError(err) + fatal(err) + } + if err := factory.StartInitialization(3); err != nil { + fatal(err) } - if err := json.NewDecoder(f).Decode(&container); err != nil { - f.Close() - writeError(err) - } - f.Close() - - rootfs, err := os.Getwd() - if err != nil { - writeError(err) - } - - if err := namespaces.Init(container, rootfs, *console, os.NewFile(uintptr(*pipe), "child"), flag.Args()); err != nil { - writeError(err) - } - - panic("Unreachable") + panic("unreachable") } func writeError(err error) { diff --git a/daemon/execdriver/native/template/default_template.go b/daemon/execdriver/native/template/default_template.go index f7d6be746d..76e3cea787 100644 --- a/daemon/execdriver/native/template/default_template.go +++ b/daemon/execdriver/native/template/default_template.go @@ -1,14 +1,17 @@ package template import ( - "github.com/docker/libcontainer" + "syscall" + "github.com/docker/libcontainer/apparmor" - "github.com/docker/libcontainer/cgroups" + "github.com/docker/libcontainer/configs" ) +const defaultMountFlags = syscall.MS_NOEXEC | syscall.MS_NOSUID | syscall.MS_NODEV + // New returns the docker default configuration for libcontainer -func New() *libcontainer.Config { - container := &libcontainer.Config{ +func New() *configs.Config { + container := &configs.Config{ Capabilities: []string{ "CHOWN", "DAC_OVERRIDE", @@ -25,18 +28,64 @@ func New() *libcontainer.Config { "KILL", "AUDIT_WRITE", }, - Namespaces: libcontainer.Namespaces([]libcontainer.Namespace{ + Namespaces: configs.Namespaces([]configs.Namespace{ {Type: "NEWNS"}, {Type: "NEWUTS"}, {Type: "NEWIPC"}, {Type: "NEWPID"}, {Type: "NEWNET"}, }), - Cgroups: &cgroups.Cgroup{ + Cgroups: &configs.Cgroup{ Parent: "docker", AllowAllDevices: false, }, - MountConfig: &libcontainer.MountConfig{}, + Mounts: []*configs.Mount{ + { + Source: "proc", + Destination: "/proc", + Device: "proc", + Flags: defaultMountFlags, + }, + { + Source: "tmpfs", + Destination: "/dev", + Device: "tmpfs", + Flags: syscall.MS_NOSUID | syscall.MS_STRICTATIME, + Data: "mode=755", + }, + { + Source: "devpts", + Destination: "/dev/pts", + Device: "devpts", + Flags: syscall.MS_NOSUID | syscall.MS_NOEXEC, + Data: "newinstance,ptmxmode=0666,mode=0620,gid=5", + }, + { + Device: "tmpfs", + Source: "shm", + Destination: "/dev/shm", + Data: "mode=1777,size=65536k", + Flags: defaultMountFlags, + }, + { + Source: "mqueue", + Destination: "/dev/mqueue", + Device: "mqueue", + Flags: defaultMountFlags, + }, + { + Source: "sysfs", + Destination: "/sys", + Device: "sysfs", + Flags: defaultMountFlags | syscall.MS_RDONLY, + }, + }, + MaskPaths: []string{ + "/proc/kcore", + }, + ReadonlyPaths: []string{ + "/proc/sys", "/proc/sysrq-trigger", "/proc/irq", "/proc/bus", + }, } if apparmor.IsEnabled() { diff --git a/daemon/execdriver/native/utils.go b/daemon/execdriver/native/utils.go index 88aefaf382..a703926453 100644 --- a/daemon/execdriver/native/utils.go +++ b/daemon/execdriver/native/utils.go @@ -2,28 +2,21 @@ package native -import ( - "encoding/json" - "os" +//func findUserArgs() []string { +//for i, a := range os.Args { +//if a == "--" { +//return os.Args[i+1:] +//} +//} +//return []string{} +//} - "github.com/docker/libcontainer" -) - -func findUserArgs() []string { - for i, a := range os.Args { - if a == "--" { - return os.Args[i+1:] - } - } - return []string{} -} - -// loadConfigFromFd loads a container's config from the sync pipe that is provided by -// fd 3 when running a process -func loadConfigFromFd() (*libcontainer.Config, error) { - var config *libcontainer.Config - if err := json.NewDecoder(os.NewFile(3, "child")).Decode(&config); err != nil { - return nil, err - } - return config, nil -} +//// loadConfigFromFd loads a container's config from the sync pipe that is provided by +//// fd 3 when running a process +//func loadConfigFromFd() (*configs.Config, error) { +//var config *libcontainer.Config +//if err := json.NewDecoder(os.NewFile(3, "child")).Decode(&config); err != nil { +//return nil, err +//} +//return config, nil +//} diff --git a/daemon/execdriver/utils.go b/daemon/execdriver/utils.go index 37042ef83a..e1fc9b9014 100644 --- a/daemon/execdriver/utils.go +++ b/daemon/execdriver/utils.go @@ -5,13 +5,83 @@ import ( "strings" "github.com/docker/docker/utils" - "github.com/docker/libcontainer/security/capabilities" + "github.com/syndtr/gocapability/capability" ) +var capabilityList = Capabilities{ + {Key: "SETPCAP", Value: capability.CAP_SETPCAP}, + {Key: "SYS_MODULE", Value: capability.CAP_SYS_MODULE}, + {Key: "SYS_RAWIO", Value: capability.CAP_SYS_RAWIO}, + {Key: "SYS_PACCT", Value: capability.CAP_SYS_PACCT}, + {Key: "SYS_ADMIN", Value: capability.CAP_SYS_ADMIN}, + {Key: "SYS_NICE", Value: capability.CAP_SYS_NICE}, + {Key: "SYS_RESOURCE", Value: capability.CAP_SYS_RESOURCE}, + {Key: "SYS_TIME", Value: capability.CAP_SYS_TIME}, + {Key: "SYS_TTY_CONFIG", Value: capability.CAP_SYS_TTY_CONFIG}, + {Key: "MKNOD", Value: capability.CAP_MKNOD}, + {Key: "AUDIT_WRITE", Value: capability.CAP_AUDIT_WRITE}, + {Key: "AUDIT_CONTROL", Value: capability.CAP_AUDIT_CONTROL}, + {Key: "MAC_OVERRIDE", Value: capability.CAP_MAC_OVERRIDE}, + {Key: "MAC_ADMIN", Value: capability.CAP_MAC_ADMIN}, + {Key: "NET_ADMIN", Value: capability.CAP_NET_ADMIN}, + {Key: "SYSLOG", Value: capability.CAP_SYSLOG}, + {Key: "CHOWN", Value: capability.CAP_CHOWN}, + {Key: "NET_RAW", Value: capability.CAP_NET_RAW}, + {Key: "DAC_OVERRIDE", Value: capability.CAP_DAC_OVERRIDE}, + {Key: "FOWNER", Value: capability.CAP_FOWNER}, + {Key: "DAC_READ_SEARCH", Value: capability.CAP_DAC_READ_SEARCH}, + {Key: "FSETID", Value: capability.CAP_FSETID}, + {Key: "KILL", Value: capability.CAP_KILL}, + {Key: "SETGID", Value: capability.CAP_SETGID}, + {Key: "SETUID", Value: capability.CAP_SETUID}, + {Key: "LINUX_IMMUTABLE", Value: capability.CAP_LINUX_IMMUTABLE}, + {Key: "NET_BIND_SERVICE", Value: capability.CAP_NET_BIND_SERVICE}, + {Key: "NET_BROADCAST", Value: capability.CAP_NET_BROADCAST}, + {Key: "IPC_LOCK", Value: capability.CAP_IPC_LOCK}, + {Key: "IPC_OWNER", Value: capability.CAP_IPC_OWNER}, + {Key: "SYS_CHROOT", Value: capability.CAP_SYS_CHROOT}, + {Key: "SYS_PTRACE", Value: capability.CAP_SYS_PTRACE}, + {Key: "SYS_BOOT", Value: capability.CAP_SYS_BOOT}, + {Key: "LEASE", Value: capability.CAP_LEASE}, + {Key: "SETFCAP", Value: capability.CAP_SETFCAP}, + {Key: "WAKE_ALARM", Value: capability.CAP_WAKE_ALARM}, + {Key: "BLOCK_SUSPEND", Value: capability.CAP_BLOCK_SUSPEND}, +} + +type ( + CapabilityMapping struct { + Key string `json:"key,omitempty"` + Value capability.Cap `json:"value,omitempty"` + } + Capabilities []*CapabilityMapping +) + +func (c *CapabilityMapping) String() string { + return c.Key +} + +func GetCapability(key string) *CapabilityMapping { + for _, capp := range capabilityList { + if capp.Key == key { + cpy := *capp + return &cpy + } + } + return nil +} + +func GetAllCapabilities() []string { + output := make([]string, len(capabilityList)) + for i, capability := range capabilityList { + output[i] = capability.String() + } + return output +} + func TweakCapabilities(basics, adds, drops []string) ([]string, error) { var ( newCaps []string - allCaps = capabilities.GetAllCapabilities() + allCaps = GetAllCapabilities() ) // look for invalid cap in the drop list @@ -26,7 +96,7 @@ func TweakCapabilities(basics, adds, drops []string) ([]string, error) { // handle --cap-add=all if utils.StringsContainsNoCase(adds, "all") { - basics = capabilities.GetAllCapabilities() + basics = allCaps } if !utils.StringsContainsNoCase(drops, "all") { diff --git a/daemon/export.go b/daemon/export.go index bc0f14a3bb..859c80f9bb 100644 --- a/daemon/export.go +++ b/daemon/export.go @@ -11,20 +11,23 @@ func (daemon *Daemon) ContainerExport(job *engine.Job) engine.Status { return job.Errorf("Usage: %s container_id", job.Name) } name := job.Args[0] - if container := daemon.Get(name); container != nil { - data, err := container.Export() - if err != nil { - return job.Errorf("%s: %s", name, err) - } - defer data.Close() - // Stream the entire contents of the container (basically a volatile snapshot) - if _, err := io.Copy(job.Stdout, data); err != nil { - return job.Errorf("%s: %s", name, err) - } - // FIXME: factor job-specific LogEvent to engine.Job.Run() - container.LogEvent("export") - return engine.StatusOK + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } - return job.Errorf("No such container: %s", name) + + data, err := container.Export() + if err != nil { + return job.Errorf("%s: %s", name, err) + } + defer data.Close() + + // Stream the entire contents of the container (basically a volatile snapshot) + if _, err := io.Copy(job.Stdout, data); err != nil { + return job.Errorf("%s: %s", name, err) + } + // FIXME: factor job-specific LogEvent to engine.Job.Run() + container.LogEvent("export") + return engine.StatusOK } diff --git a/daemon/graphdriver/aufs/aufs.go b/daemon/graphdriver/aufs/aufs.go index 5e9d747f2a..4d0c71c7ec 100644 --- a/daemon/graphdriver/aufs/aufs.go +++ b/daemon/graphdriver/aufs/aufs.go @@ -34,8 +34,9 @@ import ( "github.com/docker/docker/daemon/graphdriver" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/chrootarchive" + "github.com/docker/docker/pkg/common" + "github.com/docker/docker/pkg/directory" mountpk "github.com/docker/docker/pkg/mount" - "github.com/docker/docker/utils" "github.com/docker/libcontainer/label" ) @@ -215,7 +216,7 @@ func (a *Driver) Remove(id string) error { defer a.Unlock() if a.active[id] != 0 { - log.Errorf("Warning: removing active id %s", id) + log.Errorf("Removing active id %s", id) } // Make sure the dir is umounted first @@ -319,7 +320,7 @@ func (a *Driver) applyDiff(id string, diff archive.ArchiveReader) error { // relative to its base filesystem directory. func (a *Driver) DiffSize(id, parent string) (size int64, err error) { // AUFS doesn't need the parent layer to calculate the diff size. - return utils.TreeSize(path.Join(a.rootPath(), "diff", id)) + return directory.Size(path.Join(a.rootPath(), "diff", id)) } // ApplyDiff extracts the changeset from the given diff into the @@ -377,7 +378,7 @@ func (a *Driver) mount(id, mountLabel string) error { } if err := a.aufsMount(layers, rw, target, mountLabel); err != nil { - return err + return fmt.Errorf("error creating aufs mount to %s: %v", target, err) } return nil } @@ -404,7 +405,7 @@ func (a *Driver) Cleanup() error { for _, id := range ids { if err := a.unmount(id); err != nil { - log.Errorf("Unmounting %s: %s", utils.TruncateID(id), err) + log.Errorf("Unmounting %s: %s", common.TruncateID(id), err) } } @@ -421,7 +422,7 @@ func (a *Driver) aufsMount(ro []string, rw, target, mountLabel string) (err erro // Mount options are clipped to page size(4096 bytes). If there are more // layers then these are remounted individually using append. - b := make([]byte, syscall.Getpagesize()-len(mountLabel)-50) // room for xino & mountLabel + b := make([]byte, syscall.Getpagesize()-len(mountLabel)-54) // room for xino & mountLabel bp := copy(b, fmt.Sprintf("br:%s=rw", rw)) firstMount := true @@ -445,7 +446,7 @@ func (a *Driver) aufsMount(ro []string, rw, target, mountLabel string) (err erro } if firstMount { - data := label.FormatMountLabel(fmt.Sprintf("%s,xino=/dev/shm/aufs.xino", string(b[:bp])), mountLabel) + data := label.FormatMountLabel(fmt.Sprintf("%s,dio,xino=/dev/shm/aufs.xino", string(b[:bp])), mountLabel) if err = mount("none", target, "aufs", 0, data); err != nil { return } diff --git a/daemon/graphdriver/aufs/mount.go b/daemon/graphdriver/aufs/mount.go index bb935f6919..a3a5a86595 100644 --- a/daemon/graphdriver/aufs/mount.go +++ b/daemon/graphdriver/aufs/mount.go @@ -9,7 +9,7 @@ import ( func Unmount(target string) error { if err := exec.Command("auplink", target, "flush").Run(); err != nil { - log.Errorf("[warning]: couldn't run auplink before unmount: %s", err) + log.Errorf("Couldn't run auplink before unmount: %s", err) } if err := syscall.Unmount(target, 0); err != nil { return err diff --git a/daemon/graphdriver/btrfs/MAINTAINERS b/daemon/graphdriver/btrfs/MAINTAINERS deleted file mode 100644 index 9e629d5fcc..0000000000 --- a/daemon/graphdriver/btrfs/MAINTAINERS +++ /dev/null @@ -1 +0,0 @@ -Alexander Larsson (@alexlarsson) diff --git a/daemon/graphdriver/devmapper/MAINTAINERS b/daemon/graphdriver/devmapper/MAINTAINERS deleted file mode 100644 index 9382fc3a42..0000000000 --- a/daemon/graphdriver/devmapper/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -Alexander Larsson (@alexlarsson) -Vincent Batts (@vbatts) diff --git a/daemon/graphdriver/devmapper/README.md b/daemon/graphdriver/devmapper/README.md index 8c6f1d6ac1..1dc918016d 100644 --- a/daemon/graphdriver/devmapper/README.md +++ b/daemon/graphdriver/devmapper/README.md @@ -42,8 +42,10 @@ will display something like: Metadata file: /dev/loop4 Data Space Used: 2.536 GB Data Space Total: 107.4 GB + Data Space Available: 104.8 GB Metadata Space Used: 7.93 MB Metadata Space Total: 2.147 GB + Metadata Space Available: 2.14 GB Udev Sync Supported: true Data loop file: /home/docker/devicemapper/devicemapper/data Metadata loop file: /home/docker/devicemapper/devicemapper/metadata @@ -60,8 +62,10 @@ status information about the driver. * `Metadata file` blockdevice file used for the devicemapper metadata * `Data Space Used` tells how much of `Data file` is currently used * `Data Space Total` tells max size the `Data file` + * `Data Space Available` tells how much free space there is in the `Data file`. If you are using a loop device this will report the actual space available to the loop device on the underlying filesystem. * `Metadata Space Used` tells how much of `Metadata file` is currently used * `Metadata Space Total` tells max size the `Metadata file` + * `Metadata Space Available` tells how much free space there is in the `Metadata file`. If you are using a loop device this will report the actual space available to the loop device on the underlying filesystem. * `Udev Sync Supported` tells whether devicemapper is able to sync with Udev. Should be `true`. * `Data loop file` file attached to `Data file`, if loopback device is used * `Metadata loop file` file attached to `Metadata file`, if loopback device is used @@ -146,7 +150,7 @@ Here is the list of supported options: If using a block device for device mapper storage, ideally lvm2 would be used to create/manage the thin-pool volume that is then handed to docker to exclusively create/manage the thin and thin - snapshot volumes needed for it's containers. Managing the thin-pool + snapshot volumes needed for its containers. Managing the thin-pool outside of docker makes for the most feature-rich method of having docker utilize device mapper thin provisioning as the backing storage for docker's containers. lvm2-based thin-pool management diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 51ce54941d..686d72b951 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -100,8 +100,9 @@ type DeviceSet struct { } type DiskUsage struct { - Used uint64 - Total uint64 + Used uint64 + Total uint64 + Available uint64 } type Status struct { @@ -323,6 +324,11 @@ func (devices *DeviceSet) deviceFileWalkFunction(path string, finfo os.FileInfo) return nil } + if strings.HasPrefix(finfo.Name(), ".") { + log.Debugf("Skipping file %s", path) + return nil + } + if finfo.Name() == deviceSetMetaFile { log.Debugf("Skipping file %s", path) return nil @@ -341,7 +347,7 @@ func (devices *DeviceSet) deviceFileWalkFunction(path string, finfo os.FileInfo) } if dinfo.DeviceId > MaxDeviceId { - log.Errorf("Warning: Ignoring Invalid DeviceId=%d", dinfo.DeviceId) + log.Errorf("Ignoring Invalid DeviceId=%d", dinfo.DeviceId) return nil } @@ -386,7 +392,7 @@ func (devices *DeviceSet) unregisterDevice(id int, hash string) error { devices.devicesLock.Unlock() if err := devices.removeMetadata(info); err != nil { - log.Debugf("Error removing meta data: %s", err) + log.Debugf("Error removing metadata: %s", err) return err } @@ -463,7 +469,7 @@ func (devices *DeviceSet) createFilesystem(info *DevInfo) error { } func (devices *DeviceSet) migrateOldMetaData() error { - // Migrate old metadatafile + // Migrate old metadata file jsonData, err := ioutil.ReadFile(devices.oldMetadataFile()) if err != nil && !os.IsNotExist(err) { return err @@ -548,7 +554,7 @@ func (devices *DeviceSet) createRegisterDevice(hash string) (*DevInfo, error) { // happen. Now we have a mechianism to find // a free device Id. So something is not right. // Give a warning and continue. - log.Errorf("Warning: Device Id %d exists in pool but it is supposed to be unused", deviceId) + log.Errorf("Device Id %d exists in pool but it is supposed to be unused", deviceId) deviceId, err = devices.getNextFreeDeviceId() if err != nil { return nil, err @@ -600,7 +606,7 @@ func (devices *DeviceSet) createRegisterSnapDevice(hash string, baseInfo *DevInf // happen. Now we have a mechianism to find // a free device Id. So something is not right. // Give a warning and continue. - log.Errorf("Warning: Device Id %d exists in pool but it is supposed to be unused", deviceId) + log.Errorf("Device Id %d exists in pool but it is supposed to be unused", deviceId) deviceId, err = devices.getNextFreeDeviceId() if err != nil { return err @@ -846,18 +852,18 @@ func (devices *DeviceSet) rollbackTransaction() error { // closed. In that case this call will fail. Just leave a message // in case of failure. if err := devicemapper.DeleteDevice(devices.getPoolDevName(), devices.DeviceId); err != nil { - log.Errorf("Warning: Unable to delete device: %s", err) + log.Errorf("Unable to delete device: %s", err) } dinfo := &DevInfo{Hash: devices.DeviceIdHash} if err := devices.removeMetadata(dinfo); err != nil { - log.Errorf("Warning: Unable to remove meta data: %s", err) + log.Errorf("Unable to remove metadata: %s", err) } else { devices.markDeviceIdFree(devices.DeviceId) } if err := devices.removeTransactionMetaData(); err != nil { - log.Errorf("Warning: Unable to remove transaction meta file %s: %s", devices.transactionMetaFile(), err) + log.Errorf("Unable to remove transaction meta file %s: %s", devices.transactionMetaFile(), err) } return nil @@ -877,7 +883,7 @@ func (devices *DeviceSet) processPendingTransaction() error { // If open transaction Id is less than pool transaction Id, something // is wrong. Bail out. if devices.OpenTransactionId < devices.TransactionId { - log.Errorf("Warning: Open Transaction id %d is less than pool transaction id %d", devices.OpenTransactionId, devices.TransactionId) + log.Errorf("Open Transaction id %d is less than pool transaction id %d", devices.OpenTransactionId, devices.TransactionId) return nil } @@ -919,7 +925,7 @@ func (devices *DeviceSet) openTransaction(hash string, DeviceId int) error { devices.DeviceIdHash = hash devices.DeviceId = DeviceId if err := devices.saveTransactionMetaData(); err != nil { - return fmt.Errorf("Error saving transaction meta data: %s", err) + return fmt.Errorf("Error saving transaction metadata: %s", err) } return nil } @@ -927,7 +933,7 @@ func (devices *DeviceSet) openTransaction(hash string, DeviceId int) error { func (devices *DeviceSet) refreshTransaction(DeviceId int) error { devices.DeviceId = DeviceId if err := devices.saveTransactionMetaData(); err != nil { - return fmt.Errorf("Error saving transaction meta data: %s", err) + return fmt.Errorf("Error saving transaction metadata: %s", err) } return nil } @@ -957,7 +963,7 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error { // https://github.com/docker/docker/issues/4036 if supported := devicemapper.UdevSetSyncSupport(true); !supported { - log.Warnf("WARNING: Udev sync is not supported. This will lead to unexpected behavior, data loss and errors") + log.Warnf("Udev sync is not supported. This will lead to unexpected behavior, data loss and errors") } log.Debugf("devicemapper: udev sync support: %v", devicemapper.UdevSyncSupported()) @@ -1087,7 +1093,7 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error { } } - // Right now this loads only NextDeviceId. If there is more metatadata + // Right now this loads only NextDeviceId. If there is more metadata // down the line, we might have to move it earlier. if err = devices.loadDeviceSetMetaData(); err != nil { return err @@ -1105,7 +1111,7 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error { } func (devices *DeviceSet) AddDevice(hash, baseHash string) error { - log.Debugf("[deviceset] AddDevice() hash=%s basehash=%s", hash, baseHash) + log.Debugf("[deviceset] AddDevice(hash=%s basehash=%s)", hash, baseHash) defer log.Debugf("[deviceset] AddDevice(hash=%s basehash=%s) END", hash, baseHash) baseInfo, err := devices.lookupDevice(baseHash) @@ -1215,7 +1221,7 @@ func (devices *DeviceSet) deactivateDevice(info *DevInfo) error { // Wait for the unmount to be effective, // by watching the value of Info.OpenCount for the device if err := devices.waitClose(info); err != nil { - log.Errorf("Warning: error waiting for device %s to close: %s", info.Hash, err) + log.Errorf("Error waiting for device %s to close: %s", info.Hash, err) } devinfo, err := devicemapper.GetInfo(info.Name()) @@ -1319,9 +1325,9 @@ func (devices *DeviceSet) waitClose(info *DevInfo) error { } func (devices *DeviceSet) Shutdown() error { - log.Debugf("[deviceset %s] shutdown()", devices.devicePrefix) + log.Debugf("[deviceset %s] Shutdown()", devices.devicePrefix) log.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root) - defer log.Debugf("[deviceset %s] shutdown END", devices.devicePrefix) + defer log.Debugf("[deviceset %s] Shutdown() END", devices.devicePrefix) var devs []*DevInfo @@ -1388,7 +1394,7 @@ func (devices *DeviceSet) MountDevice(hash, path, mountLabel string) error { if info.mountCount > 0 { if path != info.mountPath { - return fmt.Errorf("Trying to mount devmapper device in multple places (%s, %s)", info.mountPath, path) + return fmt.Errorf("Trying to mount devmapper device in multiple places (%s, %s)", info.mountPath, path) } info.mountCount++ @@ -1562,7 +1568,7 @@ func (devices *DeviceSet) poolStatus() (totalSizeInSectors, transactionId, dataU return } -// MetadataDevicePath returns the path to the metadata storage for this deviceset, +// DataDevicePath returns the path to the data storage for this deviceset, // regardless of loopback or block device func (devices *DeviceSet) DataDevicePath() string { return devices.dataDevice @@ -1574,6 +1580,28 @@ func (devices *DeviceSet) MetadataDevicePath() string { return devices.metadataDevice } +func (devices *DeviceSet) getUnderlyingAvailableSpace(loopFile string) (uint64, error) { + buf := new(syscall.Statfs_t) + err := syscall.Statfs(loopFile, buf) + if err != nil { + log.Warnf("Couldn't stat loopfile filesystem %v: %v", loopFile, err) + return 0, err + } + return buf.Bfree * uint64(buf.Bsize), nil +} + +func (devices *DeviceSet) isRealFile(loopFile string) (bool, error) { + if loopFile != "" { + fi, err := os.Stat(loopFile) + if err != nil { + log.Warnf("Couldn't stat loopfile %v: %v", loopFile, err) + return false, err + } + return fi.Mode().IsRegular(), nil + } + return false, nil +} + // Status returns the current status of this deviceset func (devices *DeviceSet) Status() *Status { devices.Lock() @@ -1595,12 +1623,28 @@ func (devices *DeviceSet) Status() *Status { status.Data.Used = dataUsed * blockSizeInSectors * 512 status.Data.Total = dataTotal * blockSizeInSectors * 512 + status.Data.Available = status.Data.Total - status.Data.Used // metadata blocks are always 4k status.Metadata.Used = metadataUsed * 4096 status.Metadata.Total = metadataTotal * 4096 + status.Metadata.Available = status.Metadata.Total - status.Metadata.Used status.SectorSize = blockSizeInSectors * 512 + + if check, _ := devices.isRealFile(devices.dataLoopFile); check { + actualSpace, err := devices.getUnderlyingAvailableSpace(devices.dataLoopFile) + if err == nil && actualSpace < status.Data.Available { + status.Data.Available = actualSpace + } + } + + if check, _ := devices.isRealFile(devices.metadataLoopFile); check { + actualSpace, err := devices.getUnderlyingAvailableSpace(devices.metadataLoopFile) + if err == nil && actualSpace < status.Metadata.Available { + status.Metadata.Available = actualSpace + } + } } return status diff --git a/daemon/graphdriver/devmapper/driver.go b/daemon/graphdriver/devmapper/driver.go index 2feed5720f..6dd05ca375 100644 --- a/daemon/graphdriver/devmapper/driver.go +++ b/daemon/graphdriver/devmapper/driver.go @@ -72,8 +72,10 @@ func (d *Driver) Status() [][2]string { {"Metadata file", s.MetadataFile}, {"Data Space Used", fmt.Sprintf("%s", units.HumanSize(float64(s.Data.Used)))}, {"Data Space Total", fmt.Sprintf("%s", units.HumanSize(float64(s.Data.Total)))}, + {"Data Space Available", fmt.Sprintf("%s", units.HumanSize(float64(s.Data.Available)))}, {"Metadata Space Used", fmt.Sprintf("%s", units.HumanSize(float64(s.Metadata.Used)))}, {"Metadata Space Total", fmt.Sprintf("%s", units.HumanSize(float64(s.Metadata.Total)))}, + {"Metadata Space Available", fmt.Sprintf("%s", units.HumanSize(float64(s.Metadata.Available)))}, {"Udev Sync Supported", fmt.Sprintf("%v", s.UdevSyncSupported)}, } if len(s.DataLoopback) > 0 { @@ -162,7 +164,7 @@ func (d *Driver) Get(id, mountLabel string) (string, error) { func (d *Driver) Put(id string) error { err := d.DeviceSet.UnmountDevice(id) if err != nil { - log.Errorf("Warning: error unmounting device %s: %s", id, err) + log.Errorf("Error unmounting device %s: %s", id, err) } return err } diff --git a/daemon/graphdriver/devmapper/mount.go b/daemon/graphdriver/devmapper/mount.go index f64e995744..dc9026e404 100644 --- a/daemon/graphdriver/devmapper/mount.go +++ b/daemon/graphdriver/devmapper/mount.go @@ -55,13 +55,14 @@ func ProbeFsType(device string) (string, error) { if err != nil { return "", err } + defer file.Close() buffer := make([]byte, maxLen) l, err := file.Read(buffer) if err != nil { return "", err } - file.Close() + if uint64(l) != maxLen { return "", fmt.Errorf("unable to detect filesystem type of %s, short read", device) } diff --git a/daemon/graphdriver/driver.go b/daemon/graphdriver/driver.go index c63e1b45db..9e7f92a0ed 100644 --- a/daemon/graphdriver/driver.go +++ b/daemon/graphdriver/driver.go @@ -25,6 +25,8 @@ const ( FsMagicReiserFs = FsMagic(0x52654973) FsMagicSmbFs = FsMagic(0x0000517B) FsMagicJffs2Fs = FsMagic(0x000072b6) + FsMagicZfs = FsMagic(0x2fc12fc1) + FsMagicXfs = FsMagic(0x58465342) FsMagicUnsupported = FsMagic(0x00000000) ) @@ -58,6 +60,8 @@ var ( FsMagicReiserFs: "reiserfs", FsMagicSmbFs: "smb", FsMagicJffs2Fs: "jffs2", + FsMagicZfs: "zfs", + FsMagicXfs: "xfs", FsMagicUnsupported: "unsupported", } ) @@ -180,6 +184,6 @@ func checkPriorDriver(name, root string) { } } if len(priorDrivers) > 0 { - log.Warnf("graphdriver %s selected. Warning: your graphdriver directory %s already contains data managed by other graphdrivers: %s", name, root, strings.Join(priorDrivers, ",")) + log.Warnf("Graphdriver %s selected. Your graphdriver directory %s already contains data managed by other graphdrivers: %s", name, root, strings.Join(priorDrivers, ",")) } } diff --git a/daemon/graphdriver/graphtest/graphtest.go b/daemon/graphdriver/graphtest/graphtest.go index af93ea829c..2bd30f6aeb 100644 --- a/daemon/graphdriver/graphtest/graphtest.go +++ b/daemon/graphdriver/graphtest/graphtest.go @@ -5,7 +5,6 @@ import ( "io/ioutil" "os" "path" - "strings" "syscall" "testing" @@ -74,7 +73,8 @@ func newDriver(t *testing.T, name string) *Driver { d, err := graphdriver.GetDriver(name, root, nil) if err != nil { - if err == graphdriver.ErrNotSupported || err == graphdriver.ErrPrerequisites || strings.Contains(err.Error(), "'overlay' is not supported over") { + t.Logf("graphdriver: %v\n", err) + if err == graphdriver.ErrNotSupported || err == graphdriver.ErrPrerequisites || err == graphdriver.ErrIncompatibleFS { t.Skipf("Driver %s not supported", name) } t.Fatal(err) diff --git a/daemon/graphdriver/overlay/overlay.go b/daemon/graphdriver/overlay/overlay.go index 27784c14a3..afe12c5091 100644 --- a/daemon/graphdriver/overlay/overlay.go +++ b/daemon/graphdriver/overlay/overlay.go @@ -118,6 +118,9 @@ func Init(home string, options []string) (graphdriver.Driver, error) { case graphdriver.FsMagicAufs: log.Error("'overlay' is not supported over aufs.") return nil, graphdriver.ErrIncompatibleFS + case graphdriver.FsMagicZfs: + log.Error("'overlay' is not supported over zfs.") + return nil, graphdriver.ErrIncompatibleFS } // Create the driver home dir @@ -298,7 +301,7 @@ func (d *Driver) Get(id string, mountLabel string) (string, error) { opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lowerDir, upperDir, workDir) if err := syscall.Mount("overlay", mergedDir, "overlay", 0, label.FormatMountLabel(opts, mountLabel)); err != nil { - return "", err + return "", fmt.Errorf("error creating overlay mount to %s: %v", mergedDir, err) } mount.path = mergedDir mount.mounted = true diff --git a/daemon/graphdriver/vfs/driver.go b/daemon/graphdriver/vfs/driver.go index fe4d38230e..47d70fde5c 100644 --- a/daemon/graphdriver/vfs/driver.go +++ b/daemon/graphdriver/vfs/driver.go @@ -47,7 +47,7 @@ func (d *Driver) Create(id, parent string) error { } opts := []string{"level:s0"} if _, mountLabel, err := label.InitLabels(opts); err == nil { - label.Relabel(dir, mountLabel, "") + label.SetFileLabel(dir, mountLabel) } if parent == "" { return nil diff --git a/daemon/image_delete.go b/daemon/image_delete.go index 19f81f11a5..0c0a534cfd 100644 --- a/daemon/image_delete.go +++ b/daemon/image_delete.go @@ -7,6 +7,7 @@ import ( "github.com/docker/docker/engine" "github.com/docker/docker/graph" "github.com/docker/docker/image" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/utils" ) @@ -41,10 +42,14 @@ func (daemon *Daemon) DeleteImage(eng *engine.Engine, name string, imgs *engine. tag = graph.DEFAULTTAG } + if name == "" { + return fmt.Errorf("Image name can not be blank") + } + img, err := daemon.Repositories().LookupImage(name) if err != nil { if r, _ := daemon.Repositories().Get(repoName); r != nil { - return fmt.Errorf("No such image: %s:%s", repoName, tag) + return fmt.Errorf("No such image: %s", utils.ImageReference(repoName, tag)) } return fmt.Errorf("No such image: %s", name) } @@ -70,7 +75,7 @@ func (daemon *Daemon) DeleteImage(eng *engine.Engine, name string, imgs *engine. if parsedTag != "" { tags = append(tags, parsedTag) } - } else if repoName != parsedRepo && !force { + } else if repoName != parsedRepo && !force && first { // the id belongs to multiple repos, like base:latest and user:test, // in that case return conflict return fmt.Errorf("Conflict, cannot delete image %s because it is tagged in multiple repositories, use -f to force", name) @@ -98,7 +103,7 @@ func (daemon *Daemon) DeleteImage(eng *engine.Engine, name string, imgs *engine. } if tagDeleted { out := &engine.Env{} - out.Set("Untagged", repoName+":"+tag) + out.Set("Untagged", utils.ImageReference(repoName, tag)) imgs.Add(out) eng.Job("log", "untag", img.ID, "").Run() } @@ -143,11 +148,11 @@ func (daemon *Daemon) canDeleteImage(imgID string, force bool) error { if imgID == p.ID { if container.IsRunning() { if force { - return fmt.Errorf("Conflict, cannot force delete %s because the running container %s is using it, stop it and retry", utils.TruncateID(imgID), utils.TruncateID(container.ID)) + return fmt.Errorf("Conflict, cannot force delete %s because the running container %s is using it, stop it and retry", common.TruncateID(imgID), common.TruncateID(container.ID)) } - return fmt.Errorf("Conflict, cannot delete %s because the running container %s is using it, stop it and use -f to force", utils.TruncateID(imgID), utils.TruncateID(container.ID)) + return fmt.Errorf("Conflict, cannot delete %s because the running container %s is using it, stop it and use -f to force", common.TruncateID(imgID), common.TruncateID(container.ID)) } else if !force { - return fmt.Errorf("Conflict, cannot delete %s because the container %s is using it, use -f to force", utils.TruncateID(imgID), utils.TruncateID(container.ID)) + return fmt.Errorf("Conflict, cannot delete %s because the container %s is using it, use -f to force", common.TruncateID(imgID), common.TruncateID(container.ID)) } } return nil diff --git a/daemon/info.go b/daemon/info.go index 8eb4358f4a..965c370328 100644 --- a/daemon/info.go +++ b/daemon/info.go @@ -3,9 +3,10 @@ package daemon import ( "os" "runtime" + "time" log "github.com/Sirupsen/logrus" - "github.com/docker/docker/dockerversion" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/engine" "github.com/docker/docker/pkg/parsers/kernel" "github.com/docker/docker/pkg/parsers/operatingsystem" @@ -76,6 +77,7 @@ func (daemon *Daemon) CmdInfo(job *engine.Job) engine.Status { v.SetBool("Debug", os.Getenv("DEBUG") != "") v.SetInt("NFd", utils.GetTotalUsedFds()) v.SetInt("NGoroutines", runtime.NumGoroutine()) + v.Set("SystemTime", time.Now().Format(time.RFC3339Nano)) v.Set("ExecutionDriver", daemon.ExecutionDriver().Name()) v.SetInt("NEventsListener", env.GetInt("count")) v.Set("KernelVersion", kernelVersion) @@ -87,6 +89,16 @@ func (daemon *Daemon) CmdInfo(job *engine.Job) engine.Status { v.SetInt("NCPU", runtime.NumCPU()) v.SetInt64("MemTotal", meminfo.MemTotal) v.Set("DockerRootDir", daemon.Config().Root) + if http_proxy := os.Getenv("http_proxy"); http_proxy != "" { + v.Set("HttpProxy", http_proxy) + } + if https_proxy := os.Getenv("https_proxy"); https_proxy != "" { + v.Set("HttpsProxy", https_proxy) + } + if no_proxy := os.Getenv("no_proxy"); no_proxy != "" { + v.Set("NoProxy", no_proxy) + } + if hostname, err := os.Hostname(); err == nil { v.SetJson("Name", hostname) } diff --git a/daemon/inspect.go b/daemon/inspect.go index 37d00573bc..08265795ec 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -13,60 +13,71 @@ func (daemon *Daemon) ContainerInspect(job *engine.Job) engine.Status { return job.Errorf("usage: %s NAME", job.Name) } name := job.Args[0] - if container := daemon.Get(name); container != nil { - container.Lock() - defer container.Unlock() - if job.GetenvBool("raw") { - b, err := json.Marshal(&struct { - *Container - HostConfig *runconfig.HostConfig - }{container, container.hostConfig}) - if err != nil { - return job.Error(err) - } - job.Stdout.Write(b) - return engine.StatusOK - } + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) + } - out := &engine.Env{} - out.SetJson("Id", container.ID) - out.SetAuto("Created", container.Created) - out.SetJson("Path", container.Path) - out.SetList("Args", container.Args) - out.SetJson("Config", container.Config) - out.SetJson("State", container.State) - out.Set("Image", container.ImageID) - out.SetJson("NetworkSettings", container.NetworkSettings) - out.Set("ResolvConfPath", container.ResolvConfPath) - out.Set("HostnamePath", container.HostnamePath) - out.Set("HostsPath", container.HostsPath) - out.SetJson("Name", container.Name) - out.SetInt("RestartCount", container.RestartCount) - out.Set("Driver", container.Driver) - out.Set("ExecDriver", container.ExecDriver) - out.Set("MountLabel", container.MountLabel) - out.Set("ProcessLabel", container.ProcessLabel) - out.SetJson("Volumes", container.Volumes) - out.SetJson("VolumesRW", container.VolumesRW) - out.SetJson("AppArmorProfile", container.AppArmorProfile) - - out.SetList("ExecIDs", container.GetExecIDs()) - - if children, err := daemon.Children(container.Name); err == nil { - for linkAlias, child := range children { - container.hostConfig.Links = append(container.hostConfig.Links, fmt.Sprintf("%s:%s", child.Name, linkAlias)) - } - } - - out.SetJson("HostConfig", container.hostConfig) - - container.hostConfig.Links = nil - if _, err := out.WriteTo(job.Stdout); err != nil { + container.Lock() + defer container.Unlock() + if job.GetenvBool("raw") { + b, err := json.Marshal(&struct { + *Container + HostConfig *runconfig.HostConfig + }{container, container.hostConfig}) + if err != nil { return job.Error(err) } + job.Stdout.Write(b) return engine.StatusOK } - return job.Errorf("No such container: %s", name) + + out := &engine.Env{} + out.SetJson("Id", container.ID) + out.SetAuto("Created", container.Created) + out.SetJson("Path", container.Path) + out.SetList("Args", container.Args) + out.SetJson("Config", container.Config) + out.SetJson("State", container.State) + out.Set("Image", container.ImageID) + out.SetJson("NetworkSettings", container.NetworkSettings) + out.Set("ResolvConfPath", container.ResolvConfPath) + out.Set("HostnamePath", container.HostnamePath) + out.Set("HostsPath", container.HostsPath) + out.Set("LogPath", container.LogPath) + out.SetJson("Name", container.Name) + out.SetInt("RestartCount", container.RestartCount) + out.Set("Driver", container.Driver) + out.Set("ExecDriver", container.ExecDriver) + out.Set("MountLabel", container.MountLabel) + out.Set("ProcessLabel", container.ProcessLabel) + out.SetJson("Volumes", container.Volumes) + out.SetJson("VolumesRW", container.VolumesRW) + out.SetJson("AppArmorProfile", container.AppArmorProfile) + + out.SetList("ExecIDs", container.GetExecIDs()) + + if children, err := daemon.Children(container.Name); err == nil { + for linkAlias, child := range children { + container.hostConfig.Links = append(container.hostConfig.Links, fmt.Sprintf("%s:%s", child.Name, linkAlias)) + } + } + // we need this trick to preserve empty log driver, so + // container will use daemon defaults even if daemon change them + if container.hostConfig.LogConfig.Type == "" { + container.hostConfig.LogConfig = daemon.defaultLogConfig + defer func() { + container.hostConfig.LogConfig = runconfig.LogConfig{} + }() + } + + out.SetJson("HostConfig", container.hostConfig) + + container.hostConfig.Links = nil + if _, err := out.WriteTo(job.Stdout); err != nil { + return job.Error(err) + } + return engine.StatusOK } func (daemon *Daemon) ContainerExecInspect(job *engine.Job) engine.Status { diff --git a/daemon/kill.go b/daemon/kill.go index f5f5897c88..84094f8fbf 100644 --- a/daemon/kill.go +++ b/daemon/kill.go @@ -38,22 +38,23 @@ func (daemon *Daemon) ContainerKill(job *engine.Job) engine.Status { } } - if container := daemon.Get(name); container != nil { - // If no signal is passed, or SIGKILL, perform regular Kill (SIGKILL + wait()) - if sig == 0 || syscall.Signal(sig) == syscall.SIGKILL { - if err := container.Kill(); err != nil { - return job.Errorf("Cannot kill container %s: %s", name, err) - } - container.LogEvent("kill") - } else { - // Otherwise, just send the requested signal - if err := container.KillSig(int(sig)); err != nil { - return job.Errorf("Cannot kill container %s: %s", name, err) - } - // FIXME: Add event for signals + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) + } + + // If no signal is passed, or SIGKILL, perform regular Kill (SIGKILL + wait()) + if sig == 0 || syscall.Signal(sig) == syscall.SIGKILL { + if err := container.Kill(); err != nil { + return job.Errorf("Cannot kill container %s: %s", name, err) } + container.LogEvent("kill") } else { - return job.Errorf("No such container: %s", name) + // Otherwise, just send the requested signal + if err := container.KillSig(int(sig)); err != nil { + return job.Errorf("Cannot kill container %s: %s", name, err) + } + // FIXME: Add event for signals } return engine.StatusOK } diff --git a/daemon/list.go b/daemon/list.go index 5197d9986c..130ac05376 100644 --- a/daemon/list.go +++ b/daemon/list.go @@ -6,9 +6,12 @@ import ( "strconv" "strings" + "github.com/docker/docker/graph" "github.com/docker/docker/pkg/graphdb" + "github.com/docker/docker/utils" "github.com/docker/docker/engine" + "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/parsers/filters" ) @@ -52,25 +55,24 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status { } } } - names := map[string][]string{} daemon.ContainerGraph().Walk("/", func(p string, e *graphdb.Entity) error { names[e.ID()] = append(names[e.ID()], p) return nil - }, -1) + }, 1) var beforeCont, sinceCont *Container if before != "" { - beforeCont = daemon.Get(before) - if beforeCont == nil { - return job.Error(fmt.Errorf("Could not find container with name or id %s", before)) + beforeCont, err = daemon.Get(before) + if err != nil { + return job.Error(err) } } if since != "" { - sinceCont = daemon.Get(since) - if sinceCont == nil { - return job.Error(fmt.Errorf("Could not find container with name or id %s", since)) + sinceCont, err = daemon.Get(since) + if err != nil { + return job.Error(err) } } @@ -89,6 +91,10 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status { return nil } + if !psFilters.MatchKVList("label", container.Config.Labels) { + return nil + } + if before != "" && !foundBefore { if container.ID == beforeCont.ID { foundBefore = true @@ -123,7 +129,12 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status { out := &engine.Env{} out.SetJson("Id", container.ID) out.SetList("Names", names[container.ID]) - out.SetJson("Image", daemon.Repositories().ImageName(container.ImageID)) + img := container.Config.Image + _, tag := parsers.ParseRepositoryTag(container.Config.Image) + if tag == "" { + img = utils.ImageReference(img, graph.DEFAULTTAG) + } + out.SetJson("Image", img) if len(container.Args) > 0 { args := []string{} for _, arg := range container.Args { @@ -151,6 +162,7 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status { out.SetInt64("SizeRw", sizeRw) out.SetInt64("SizeRootFs", sizeRootFs) } + out.SetJson("Labels", container.Config.Labels) outs.Add(out) return nil } diff --git a/daemon/logger/copier.go b/daemon/logger/copier.go new file mode 100644 index 0000000000..462e42346d --- /dev/null +++ b/daemon/logger/copier.go @@ -0,0 +1,57 @@ +package logger + +import ( + "bufio" + "io" + "sync" + "time" + + "github.com/Sirupsen/logrus" +) + +// Copier can copy logs from specified sources to Logger and attach +// ContainerID and Timestamp. +// Writes are concurrent, so you need implement some sync in your logger +type Copier struct { + // cid is container id for which we copying logs + cid string + // srcs is map of name -> reader pairs, for example "stdout", "stderr" + srcs map[string]io.Reader + dst Logger + copyJobs sync.WaitGroup +} + +// NewCopier creates new Copier +func NewCopier(cid string, srcs map[string]io.Reader, dst Logger) (*Copier, error) { + return &Copier{ + cid: cid, + srcs: srcs, + dst: dst, + }, nil +} + +// Run starts logs copying +func (c *Copier) Run() { + for src, w := range c.srcs { + c.copyJobs.Add(1) + go c.copySrc(src, w) + } +} + +func (c *Copier) copySrc(name string, src io.Reader) { + defer c.copyJobs.Done() + scanner := bufio.NewScanner(src) + for scanner.Scan() { + if err := c.dst.Log(&Message{ContainerID: c.cid, Line: scanner.Bytes(), Source: name, Timestamp: time.Now().UTC()}); err != nil { + logrus.Errorf("Failed to log msg %q for logger %s: %s", scanner.Bytes(), c.dst.Name(), err) + } + } + if err := scanner.Err(); err != nil { + logrus.Errorf("Error scanning log stream: %s", err) + } +} + +// Wait waits until all copying is done +func (c *Copier) Wait() { + c.copyJobs.Wait() +} diff --git a/daemon/logger/copier_test.go b/daemon/logger/copier_test.go new file mode 100644 index 0000000000..45f76ac8e8 --- /dev/null +++ b/daemon/logger/copier_test.go @@ -0,0 +1,109 @@ +package logger + +import ( + "bytes" + "encoding/json" + "io" + "testing" + "time" +) + +type TestLoggerJSON struct { + *json.Encoder +} + +func (l *TestLoggerJSON) Log(m *Message) error { + return l.Encode(m) +} + +func (l *TestLoggerJSON) Close() error { + return nil +} + +func (l *TestLoggerJSON) Name() string { + return "json" +} + +type TestLoggerText struct { + *bytes.Buffer +} + +func (l *TestLoggerText) Log(m *Message) error { + _, err := l.WriteString(m.ContainerID + " " + m.Source + " " + string(m.Line) + "\n") + return err +} + +func (l *TestLoggerText) Close() error { + return nil +} + +func (l *TestLoggerText) Name() string { + return "text" +} + +func TestCopier(t *testing.T) { + stdoutLine := "Line that thinks that it is log line from docker stdout" + stderrLine := "Line that thinks that it is log line from docker stderr" + var stdout bytes.Buffer + var stderr bytes.Buffer + for i := 0; i < 30; i++ { + if _, err := stdout.WriteString(stdoutLine + "\n"); err != nil { + t.Fatal(err) + } + if _, err := stderr.WriteString(stderrLine + "\n"); err != nil { + t.Fatal(err) + } + } + + var jsonBuf bytes.Buffer + + jsonLog := &TestLoggerJSON{Encoder: json.NewEncoder(&jsonBuf)} + + cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657" + c, err := NewCopier(cid, + map[string]io.Reader{ + "stdout": &stdout, + "stderr": &stderr, + }, + jsonLog) + if err != nil { + t.Fatal(err) + } + c.Run() + wait := make(chan struct{}) + go func() { + c.Wait() + close(wait) + }() + select { + case <-time.After(1 * time.Second): + t.Fatal("Copier failed to do its work in 1 second") + case <-wait: + } + dec := json.NewDecoder(&jsonBuf) + for { + var msg Message + if err := dec.Decode(&msg); err != nil { + if err == io.EOF { + break + } + t.Fatal(err) + } + if msg.Source != "stdout" && msg.Source != "stderr" { + t.Fatalf("Wrong Source: %q, should be %q or %q", msg.Source, "stdout", "stderr") + } + if msg.ContainerID != cid { + t.Fatalf("Wrong ContainerID: %q, expected %q", msg.ContainerID, cid) + } + if msg.Source == "stdout" { + if string(msg.Line) != stdoutLine { + t.Fatalf("Wrong Line: %q, expected %q", msg.Line, stdoutLine) + } + } + if msg.Source == "stderr" { + if string(msg.Line) != stderrLine { + t.Fatalf("Wrong Line: %q, expected %q", msg.Line, stderrLine) + } + } + } +} diff --git a/daemon/logger/jsonfilelog/jsonfilelog.go b/daemon/logger/jsonfilelog/jsonfilelog.go new file mode 100644 index 0000000000..faa6bf92e2 --- /dev/null +++ b/daemon/logger/jsonfilelog/jsonfilelog.go @@ -0,0 +1,58 @@ +package jsonfilelog + +import ( + "bytes" + "os" + "sync" + + "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/pkg/jsonlog" +) + +// JSONFileLogger is Logger implementation for default docker logging: +// JSON objects to file +type JSONFileLogger struct { + buf *bytes.Buffer + f *os.File // store for closing + mu sync.Mutex // protects buffer +} + +// New creates new JSONFileLogger which writes to filename +func New(filename string) (logger.Logger, error) { + log, err := os.OpenFile(filename, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0600) + if err != nil { + return nil, err + } + return &JSONFileLogger{ + f: log, + buf: bytes.NewBuffer(nil), + }, nil +} + +// Log converts logger.Message to jsonlog.JSONLog and serializes it to file +func (l *JSONFileLogger) Log(msg *logger.Message) error { + l.mu.Lock() + defer l.mu.Unlock() + err := (&jsonlog.JSONLog{Log: string(msg.Line) + "\n", Stream: msg.Source, Created: msg.Timestamp}).MarshalJSONBuf(l.buf) + if err != nil { + return err + } + l.buf.WriteByte('\n') + _, err = l.buf.WriteTo(l.f) + if err != nil { + // this buffer is screwed, replace it with another to avoid races + l.buf = bytes.NewBuffer(nil) + return err + } + return nil +} + +// Close closes underlying file +func (l *JSONFileLogger) Close() error { + return l.f.Close() +} + +// Name returns name of this logger +func (l *JSONFileLogger) Name() string { + return "JSONFile" +} diff --git a/daemon/logger/jsonfilelog/jsonfilelog_test.go b/daemon/logger/jsonfilelog/jsonfilelog_test.go new file mode 100644 index 0000000000..e951c1b869 --- /dev/null +++ b/daemon/logger/jsonfilelog/jsonfilelog_test.go @@ -0,0 +1,78 @@ +package jsonfilelog + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + "time" + + "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/pkg/jsonlog" +) + +func TestJSONFileLogger(t *testing.T) { + tmp, err := ioutil.TempDir("", "docker-logger-") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmp) + filename := filepath.Join(tmp, "container.log") + l, err := New(filename) + if err != nil { + t.Fatal(err) + } + defer l.Close() + cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657" + if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line1"), Source: "src1"}); err != nil { + t.Fatal(err) + } + if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line2"), Source: "src2"}); err != nil { + t.Fatal(err) + } + if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line3"), Source: "src3"}); err != nil { + t.Fatal(err) + } + res, err := ioutil.ReadFile(filename) + if err != nil { + t.Fatal(err) + } + expected := `{"log":"line1\n","stream":"src1","time":"0001-01-01T00:00:00Z"} +{"log":"line2\n","stream":"src2","time":"0001-01-01T00:00:00Z"} +{"log":"line3\n","stream":"src3","time":"0001-01-01T00:00:00Z"} +` + + if string(res) != expected { + t.Fatalf("Wrong log content: %q, expected %q", res, expected) + } +} + +func BenchmarkJSONFileLogger(b *testing.B) { + tmp, err := ioutil.TempDir("", "docker-logger-") + if err != nil { + b.Fatal(err) + } + defer os.RemoveAll(tmp) + filename := filepath.Join(tmp, "container.log") + l, err := New(filename) + if err != nil { + b.Fatal(err) + } + defer l.Close() + cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657" + testLine := "Line that thinks that it is log line from docker\n" + msg := &logger.Message{ContainerID: cid, Line: []byte(testLine), Source: "stderr", Timestamp: time.Now().UTC()} + jsonlog, err := (&jsonlog.JSONLog{Log: string(msg.Line) + "\n", Stream: msg.Source, Created: msg.Timestamp}).MarshalJSON() + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(jsonlog)+1) * 30) + b.ResetTimer() + for i := 0; i < b.N; i++ { + for j := 0; j < 30; j++ { + if err := l.Log(msg); err != nil { + b.Fatal(err) + } + } + } +} diff --git a/daemon/logger/logger.go b/daemon/logger/logger.go new file mode 100644 index 0000000000..078e67d8e9 --- /dev/null +++ b/daemon/logger/logger.go @@ -0,0 +1,18 @@ +package logger + +import "time" + +// Message is datastructure that represents record from some container +type Message struct { + ContainerID string + Line []byte + Source string + Timestamp time.Time +} + +// Logger is interface for docker logging drivers +type Logger interface { + Log(*Message) error + Name() string + Close() error +} diff --git a/daemon/logs.go b/daemon/logs.go index 6c9373f737..356d08c5c8 100644 --- a/daemon/logs.go +++ b/daemon/logs.go @@ -40,9 +40,12 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status { if tail == "" { tail = "all" } - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) + } + if container.LogDriverType() != "json-file" { + return job.Errorf("\"logs\" endpoint is supported only for \"json-file\" logging driver") } cLog, err := container.ReadLog("json") if err != nil && os.IsNotExist(err) { @@ -99,7 +102,8 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status { } logLine := l.Log if times { - logLine = fmt.Sprintf("%s %s", l.Created.Format(format), logLine) + // format can be "" or time format, so here can't be error + logLine, _ = l.Format(format) } if l.Stream == "stdout" && stdout { io.WriteString(job.Stdout, logLine) diff --git a/daemon/monitor.go b/daemon/monitor.go index 9e7d3062f0..7c18b7a38c 100644 --- a/daemon/monitor.go +++ b/daemon/monitor.go @@ -8,8 +8,8 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/daemon/execdriver" + "github.com/docker/docker/pkg/common" "github.com/docker/docker/runconfig" - "github.com/docker/docker/utils" ) const defaultTimeIncrement = 100 @@ -123,7 +123,7 @@ func (m *containerMonitor) Start() error { for { m.container.RestartCount++ - if err := m.container.startLoggingToDisk(); err != nil { + if err := m.container.startLogging(); err != nil { m.resetContainer(false) return err @@ -168,12 +168,10 @@ func (m *containerMonitor) Start() error { // we need to check this before reentering the loop because the waitForNextRestart could have // been terminated by a request from a user if m.shouldStop { - m.container.ExitCode = exitStatus.ExitCode return err } continue } - m.container.ExitCode = exitStatus.ExitCode if exitStatus.OOMKilled { m.container.LogEvent("oom") } @@ -184,7 +182,7 @@ func (m *containerMonitor) Start() error { } // resetMonitor resets the stateful fields on the containerMonitor based on the -// previous runs success or failure. Reguardless of success, if the container had +// previous runs success or failure. Regardless of success, if the container had // an execution time of more than 10s then reset the timer back to the default func (m *containerMonitor) resetMonitor(successful bool) { executionTime := time.Now().Sub(m.lastStartTime).Seconds() @@ -232,7 +230,7 @@ func (m *containerMonitor) shouldRestart(exitCode int) bool { // the default value of 0 for MaximumRetryCount means that we will not enforce a maximum count if max := m.restartPolicy.MaximumRetryCount; max != 0 && m.failureCount > max { log.Debugf("stopping restart of container %s because maximum failure could of %d has been reached", - utils.TruncateID(m.container.ID), max) + common.TruncateID(m.container.ID), max) return false } @@ -304,6 +302,24 @@ func (m *containerMonitor) resetContainer(lock bool) { container.stdin, container.stdinPipe = io.Pipe() } + if container.logDriver != nil { + if container.logCopier != nil { + exit := make(chan struct{}) + go func() { + container.logCopier.Wait() + close(exit) + }() + select { + case <-time.After(1 * time.Second): + log.Warnf("Logger didn't exit in time: logs may be truncated") + case <-exit: + } + } + container.logDriver.Close() + container.logCopier = nil + container.logDriver = nil + } + c := container.command.ProcessConfig.Cmd container.command.ProcessConfig.Cmd = exec.Cmd{ diff --git a/daemon/networkdriver/bridge/driver.go b/daemon/networkdriver/bridge/driver.go index e7ddfd2106..aa139b9a39 100644 --- a/daemon/networkdriver/bridge/driver.go +++ b/daemon/networkdriver/bridge/driver.go @@ -31,7 +31,7 @@ const ( type networkInterface struct { IP net.IP IPv6 net.IP - PortMappings []net.Addr // there are mappings to the host interfaces + PortMappings []net.Addr // There are mappings to the host interfaces } type ifaces struct { @@ -113,7 +113,7 @@ func InitDriver(job *engine.Job) engine.Status { addrv4, addrsv6, err := networkdriver.GetIfaceAddr(bridgeIface) if err != nil { - // No Bridge existent. Create one + // No Bridge existent, create one // If we're not using the default bridge, fail without trying to create it if !usingDefaultBridge { return job.Error(err) @@ -137,8 +137,8 @@ func InitDriver(job *engine.Job) engine.Status { } } } else { - // Bridge exists already. Getting info... - // validate that the bridge ip matches the ip specified by BridgeIP + // Bridge exists already, getting info... + // Validate that the bridge ip matches the ip specified by BridgeIP if bridgeIP != "" { networkv4 = addrv4.(*net.IPNet) bip, _, err := net.ParseCIDR(bridgeIP) @@ -146,11 +146,11 @@ func InitDriver(job *engine.Job) engine.Status { return job.Error(err) } if !networkv4.IP.Equal(bip) { - return job.Errorf("bridge ip (%s) does not match existing bridge configuration %s", networkv4.IP, bip) + return job.Errorf("Bridge ip (%s) does not match existing bridge configuration %s", networkv4.IP, bip) } } - // a bridge might exist but not have any IPv6 addr associated with it yet + // A bridge might exist but not have any IPv6 addr associated with it yet // (for example, an existing Docker installation that has only been used // with IPv4 and docker0 already is set up) In that case, we can perform // the bridge init for IPv6 here, else we will error out below if --ipv6=true @@ -158,7 +158,7 @@ func InitDriver(job *engine.Job) engine.Status { if err := setupIPv6Bridge(bridgeIPv6); err != nil { return job.Error(err) } - // recheck addresses now that IPv6 is setup on the bridge + // Recheck addresses now that IPv6 is setup on the bridge addrv4, addrsv6, err = networkdriver.GetIfaceAddr(bridgeIface) if err != nil { return job.Error(err) @@ -182,7 +182,7 @@ func InitDriver(job *engine.Job) engine.Status { } } if !found { - return job.Errorf("bridge IPv6 does not match existing bridge configuration %s", bip6) + return job.Errorf("Bridge IPv6 does not match existing bridge configuration %s", bip6) } } @@ -284,10 +284,11 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { // Enable NAT if ipmasq { - natArgs := []string{"POSTROUTING", "-t", "nat", "-s", addr.String(), "!", "-o", bridgeIface, "-j", "MASQUERADE"} + natArgs := []string{"-s", addr.String(), "!", "-o", bridgeIface, "-j", "MASQUERADE"} - if !iptables.Exists(natArgs...) { - if output, err := iptables.Raw(append([]string{"-I"}, natArgs...)...); err != nil { + if !iptables.Exists(iptables.Nat, "POSTROUTING", natArgs...) { + if output, err := iptables.Raw(append([]string{ + "-t", string(iptables.Nat), "-I", "POSTROUTING"}, natArgs...)...); err != nil { return fmt.Errorf("Unable to enable network bridge NAT: %s", err) } else if len(output) != 0 { return &iptables.ChainError{Chain: "POSTROUTING", Output: output} @@ -296,28 +297,28 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { } var ( - args = []string{"FORWARD", "-i", bridgeIface, "-o", bridgeIface, "-j"} + args = []string{"-i", bridgeIface, "-o", bridgeIface, "-j"} acceptArgs = append(args, "ACCEPT") dropArgs = append(args, "DROP") ) if !icc { - iptables.Raw(append([]string{"-D"}, acceptArgs...)...) + iptables.Raw(append([]string{"-D", "FORWARD"}, acceptArgs...)...) - if !iptables.Exists(dropArgs...) { + if !iptables.Exists(iptables.Filter, "FORWARD", dropArgs...) { log.Debugf("Disable inter-container communication") - if output, err := iptables.Raw(append([]string{"-I"}, dropArgs...)...); err != nil { + if output, err := iptables.Raw(append([]string{"-I", "FORWARD"}, dropArgs...)...); err != nil { return fmt.Errorf("Unable to prevent intercontainer communication: %s", err) } else if len(output) != 0 { return fmt.Errorf("Error disabling intercontainer communication: %s", output) } } } else { - iptables.Raw(append([]string{"-D"}, dropArgs...)...) + iptables.Raw(append([]string{"-D", "FORWARD"}, dropArgs...)...) - if !iptables.Exists(acceptArgs...) { + if !iptables.Exists(iptables.Filter, "FORWARD", acceptArgs...) { log.Debugf("Enable inter-container communication") - if output, err := iptables.Raw(append([]string{"-I"}, acceptArgs...)...); err != nil { + if output, err := iptables.Raw(append([]string{"-I", "FORWARD"}, acceptArgs...)...); err != nil { return fmt.Errorf("Unable to allow intercontainer communication: %s", err) } else if len(output) != 0 { return fmt.Errorf("Error enabling intercontainer communication: %s", output) @@ -326,9 +327,9 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { } // Accept all non-intercontainer outgoing packets - outgoingArgs := []string{"FORWARD", "-i", bridgeIface, "!", "-o", bridgeIface, "-j", "ACCEPT"} - if !iptables.Exists(outgoingArgs...) { - if output, err := iptables.Raw(append([]string{"-I"}, outgoingArgs...)...); err != nil { + outgoingArgs := []string{"-i", bridgeIface, "!", "-o", bridgeIface, "-j", "ACCEPT"} + if !iptables.Exists(iptables.Filter, "FORWARD", outgoingArgs...) { + if output, err := iptables.Raw(append([]string{"-I", "FORWARD"}, outgoingArgs...)...); err != nil { return fmt.Errorf("Unable to allow outgoing packets: %s", err) } else if len(output) != 0 { return &iptables.ChainError{Chain: "FORWARD outgoing", Output: output} @@ -336,10 +337,10 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { } // Accept incoming packets for existing connections - existingArgs := []string{"FORWARD", "-o", bridgeIface, "-m", "conntrack", "--ctstate", "RELATED,ESTABLISHED", "-j", "ACCEPT"} + existingArgs := []string{"-o", bridgeIface, "-m", "conntrack", "--ctstate", "RELATED,ESTABLISHED", "-j", "ACCEPT"} - if !iptables.Exists(existingArgs...) { - if output, err := iptables.Raw(append([]string{"-I"}, existingArgs...)...); err != nil { + if !iptables.Exists(iptables.Filter, "FORWARD", existingArgs...) { + if output, err := iptables.Raw(append([]string{"-I", "FORWARD"}, existingArgs...)...); err != nil { return fmt.Errorf("Unable to allow incoming packets: %s", err) } else if len(output) != 0 { return &iptables.ChainError{Chain: "FORWARD incoming", Output: output} @@ -356,7 +357,7 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { func configureBridge(bridgeIP string, bridgeIPv6 string, enableIPv6 bool) error { nameservers := []string{} resolvConf, _ := resolvconf.Get() - // we don't check for an error here, because we don't really care + // We don't check for an error here, because we don't really care // if we can't read /etc/resolv.conf. So instead we skip the append // if resolvConf is nil. It either doesn't exist, or we can't read it // for some reason. @@ -394,7 +395,7 @@ func configureBridge(bridgeIP string, bridgeIPv6 string, enableIPv6 bool) error log.Debugf("Creating bridge %s with network %s", bridgeIface, ifaceAddr) if err := createBridgeIface(bridgeIface); err != nil { - // the bridge may already exist, therefore we can ignore an "exists" error + // The bridge may already exist, therefore we can ignore an "exists" error if !os.IsExist(err) { return err } @@ -452,7 +453,7 @@ func setupIPv6Bridge(bridgeIPv6 string) error { func createBridgeIface(name string) error { kv, err := kernel.GetKernelVersion() - // only set the bridge's mac address if the kernel version is > 3.3 + // Only set the bridge's mac address if the kernel version is > 3.3 // before that it was not supported setBridgeMacAddr := err == nil && (kv.Kernel >= 3 && kv.Major >= 3) log.Debugf("setting bridge mac address = %v", setBridgeMacAddr) @@ -508,11 +509,7 @@ func Allocate(job *engine.Job) engine.Status { globalIPv6 net.IP ) - if requestedIP != nil { - ip, err = ipallocator.RequestIP(bridgeIPv4Network, requestedIP) - } else { - ip, err = ipallocator.RequestIP(bridgeIPv4Network, nil) - } + ip, err = ipallocator.RequestIP(bridgeIPv4Network, requestedIP) if err != nil { return job.Error(err) } @@ -523,10 +520,11 @@ func Allocate(job *engine.Job) engine.Status { } if globalIPv6Network != nil { - // if globalIPv6Network Size is at least a /80 subnet generate IPv6 address from MAC address + // If globalIPv6Network Size is at least a /80 subnet generate IPv6 address from MAC address netmask_ones, _ := globalIPv6Network.Mask.Size() if requestedIPv6 == nil && netmask_ones <= 80 { - requestedIPv6 = globalIPv6Network.IP + requestedIPv6 = make(net.IP, len(globalIPv6Network.IP)) + copy(requestedIPv6, globalIPv6Network.IP) for i, h := range mac { requestedIPv6[i+10] = h } @@ -534,7 +532,7 @@ func Allocate(job *engine.Job) engine.Status { globalIPv6, err = ipallocator.RequestIP(globalIPv6Network, requestedIPv6) if err != nil { - log.Errorf("Allocator: RequestIP v6: %s", err.Error()) + log.Errorf("Allocator: RequestIP v6: %v", err) return job.Error(err) } log.Infof("Allocated IPv6 %s", globalIPv6) @@ -550,7 +548,7 @@ func Allocate(job *engine.Job) engine.Status { size, _ := bridgeIPv4Network.Mask.Size() out.SetInt("IPPrefixLen", size) - // if linklocal IPv6 + // If linklocal IPv6 localIPv6Net, err := linkLocalIPv6FromMac(mac.String()) if err != nil { return job.Error(err) @@ -576,7 +574,7 @@ func Allocate(job *engine.Job) engine.Status { return engine.StatusOK } -// release an interface for a select ip +// Release an interface for a select ip func Release(job *engine.Job) engine.Status { var ( id = job.Args[0] @@ -702,11 +700,11 @@ func LinkContainers(job *engine.Job) engine.Status { ip1 := net.ParseIP(parentIP) if ip1 == nil { - return job.Errorf("parent IP '%s' is invalid", parentIP) + return job.Errorf("Parent IP '%s' is invalid", parentIP) } ip2 := net.ParseIP(childIP) if ip2 == nil { - return job.Errorf("child IP '%s' is invalid", childIP) + return job.Errorf("Child IP '%s' is invalid", childIP) } chain := iptables.Chain{Name: "DOCKER", Bridge: bridgeIface} diff --git a/daemon/networkdriver/bridge/driver_test.go b/daemon/networkdriver/bridge/driver_test.go index 02bea9ce13..8c20dffb85 100644 --- a/daemon/networkdriver/bridge/driver_test.go +++ b/daemon/networkdriver/bridge/driver_test.go @@ -1,6 +1,7 @@ package bridge import ( + "fmt" "net" "strconv" "testing" @@ -104,6 +105,123 @@ func TestHostnameFormatChecking(t *testing.T) { } } +func newInterfaceAllocation(t *testing.T, input engine.Env) (output engine.Env) { + eng := engine.New() + eng.Logging = false + + done := make(chan bool) + + // set IPv6 global if given + if input.Exists("globalIPv6Network") { + _, globalIPv6Network, _ = net.ParseCIDR(input.Get("globalIPv6Network")) + } + + job := eng.Job("allocate_interface", "container_id") + job.Env().Init(&input) + reader, _ := job.Stdout.AddPipe() + go func() { + output.Decode(reader) + done <- true + }() + + res := Allocate(job) + job.Stdout.Close() + <-done + + if input.Exists("expectFail") && input.GetBool("expectFail") { + if res == engine.StatusOK { + t.Fatal("Doesn't fail to allocate network interface") + } + } else { + if res != engine.StatusOK { + t.Fatal("Failed to allocate network interface") + } + } + + if input.Exists("globalIPv6Network") { + // check for bug #11427 + _, subnet, _ := net.ParseCIDR(input.Get("globalIPv6Network")) + if globalIPv6Network.IP.String() != subnet.IP.String() { + t.Fatal("globalIPv6Network was modified during allocation") + } + // clean up IPv6 global + globalIPv6Network = nil + } + + return +} + +func TestIPv6InterfaceAllocationAutoNetmaskGt80(t *testing.T) { + + input := engine.Env{} + + _, subnet, _ := net.ParseCIDR("2001:db8:1234:1234:1234::/81") + + // set global ipv6 + input.Set("globalIPv6Network", subnet.String()) + + output := newInterfaceAllocation(t, input) + + // ensure low manually assigend global ip + ip := net.ParseIP(output.Get("GlobalIPv6")) + _, subnet, _ = net.ParseCIDR(fmt.Sprintf("%s/%d", subnet.IP.String(), 120)) + if !subnet.Contains(ip) { + t.Fatalf("Error ip %s not in subnet %s", ip.String(), subnet.String()) + } +} + +func TestIPv6InterfaceAllocationAutoNetmaskLe80(t *testing.T) { + + input := engine.Env{} + + _, subnet, _ := net.ParseCIDR("2001:db8:1234:1234:1234::/80") + + // set global ipv6 + input.Set("globalIPv6Network", subnet.String()) + input.Set("RequestedMac", "ab:cd:ab:cd:ab:cd") + + output := newInterfaceAllocation(t, input) + + // ensure global ip with mac + ip := net.ParseIP(output.Get("GlobalIPv6")) + expected_ip := net.ParseIP("2001:db8:1234:1234:1234:abcd:abcd:abcd") + if ip.String() != expected_ip.String() { + t.Fatalf("Error ip %s should be %s", ip.String(), expected_ip.String()) + } + + // ensure link local format + ip = net.ParseIP(output.Get("LinkLocalIPv6")) + expected_ip = net.ParseIP("fe80::a9cd:abff:fecd:abcd") + if ip.String() != expected_ip.String() { + t.Fatalf("Error ip %s should be %s", ip.String(), expected_ip.String()) + } + +} + +func TestIPv6InterfaceAllocationRequest(t *testing.T) { + + input := engine.Env{} + + _, subnet, _ := net.ParseCIDR("2001:db8:1234:1234:1234::/80") + expected_ip := net.ParseIP("2001:db8:1234:1234:1234::1328") + + // set global ipv6 + input.Set("globalIPv6Network", subnet.String()) + input.Set("RequestedIPv6", expected_ip.String()) + + output := newInterfaceAllocation(t, input) + + // ensure global ip with mac + ip := net.ParseIP(output.Get("GlobalIPv6")) + if ip.String() != expected_ip.String() { + t.Fatalf("Error ip %s should be %s", ip.String(), expected_ip.String()) + } + + // retry -> fails for duplicated address + input.SetBool("expectFail", true) + output = newInterfaceAllocation(t, input) +} + func TestMacAddrGeneration(t *testing.T) { ip := net.ParseIP("192.168.0.1") mac := generateMacAddr(ip).String() diff --git a/daemon/networkdriver/ipallocator/allocator.go b/daemon/networkdriver/ipallocator/allocator.go index 40c3eb823e..a728d1bac4 100644 --- a/daemon/networkdriver/ipallocator/allocator.go +++ b/daemon/networkdriver/ipallocator/allocator.go @@ -23,11 +23,6 @@ func newAllocatedMap(network *net.IPNet) *allocatedMap { begin := big.NewInt(0).Add(ipToBigInt(firstIP), big.NewInt(1)) end := big.NewInt(0).Sub(ipToBigInt(lastIP), big.NewInt(1)) - // if IPv4 network, then allocation range starts at begin + 1 because begin is bridge IP - if len(firstIP) == 4 { - begin = begin.Add(begin, big.NewInt(1)) - } - return &allocatedMap{ p: make(map[string]struct{}), begin: begin, diff --git a/daemon/networkdriver/ipallocator/allocator_test.go b/daemon/networkdriver/ipallocator/allocator_test.go index 8e0e853fac..8e0d8fdca6 100644 --- a/daemon/networkdriver/ipallocator/allocator_test.go +++ b/daemon/networkdriver/ipallocator/allocator_test.go @@ -61,7 +61,7 @@ func TestRequestNewIps(t *testing.T) { var ip net.IP var err error - for i := 2; i < 10; i++ { + for i := 1; i < 10; i++ { ip, err = RequestIP(network, nil) if err != nil { t.Fatal(err) @@ -167,7 +167,7 @@ func TestGetReleasedIp(t *testing.T) { t.Fatal(err) } - for i := 0; i < 252; i++ { + for i := 0; i < 253; i++ { _, err = RequestIP(network, nil) if err != nil { t.Fatal(err) @@ -278,23 +278,24 @@ func TestRequestSpecificIpV6(t *testing.T) { func TestIPAllocator(t *testing.T) { expectedIPs := []net.IP{ - 0: net.IPv4(127, 0, 0, 2), - 1: net.IPv4(127, 0, 0, 3), - 2: net.IPv4(127, 0, 0, 4), - 3: net.IPv4(127, 0, 0, 5), - 4: net.IPv4(127, 0, 0, 6), + 0: net.IPv4(127, 0, 0, 1), + 1: net.IPv4(127, 0, 0, 2), + 2: net.IPv4(127, 0, 0, 3), + 3: net.IPv4(127, 0, 0, 4), + 4: net.IPv4(127, 0, 0, 5), + 5: net.IPv4(127, 0, 0, 6), } gwIP, n, _ := net.ParseCIDR("127.0.0.1/29") network := &net.IPNet{IP: gwIP, Mask: n.Mask} // Pool after initialisation (f = free, u = used) - // 2(f) - 3(f) - 4(f) - 5(f) - 6(f) + // 1(f) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f) // ↑ - // Check that we get 5 IPs, from 127.0.0.2–127.0.0.6, in that + // Check that we get 6 IPs, from 127.0.0.1–127.0.0.6, in that // order. - for i := 0; i < 5; i++ { + for i := 0; i < 6; i++ { ip, err := RequestIP(network, nil) if err != nil { t.Fatal(err) @@ -303,27 +304,31 @@ func TestIPAllocator(t *testing.T) { assertIPEquals(t, expectedIPs[i], ip) } // Before loop begin - // 2(f) - 3(f) - 4(f) - 5(f) - 6(f) + // 1(f) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f) // ↑ // After i = 0 - // 2(u) - 3(f) - 4(f) - 5(f) - 6(f) + // 1(u) - 2(f) - 3(f) - 4(f) - 5(f) - 6(f) // ↑ // After i = 1 - // 2(u) - 3(u) - 4(f) - 5(f) - 6(f) + // 1(u) - 2(u) - 3(f) - 4(f) - 5(f) - 6(f) // ↑ // After i = 2 - // 2(u) - 3(u) - 4(u) - 5(f) - 6(f) + // 1(u) - 2(u) - 3(u) - 4(f) - 5(f) - 6(f) // ↑ // After i = 3 - // 2(u) - 3(u) - 4(u) - 5(u) - 6(f) + // 1(u) - 2(u) - 3(u) - 4(u) - 5(f) - 6(f) // ↑ // After i = 4 - // 2(u) - 3(u) - 4(u) - 5(u) - 6(u) + // 1(u) - 2(u) - 3(u) - 4(u) - 5(u) - 6(f) + // ↑ + + // After i = 5 + // 1(u) - 2(u) - 3(u) - 4(u) - 5(u) - 6(u) // ↑ // Check that there are no more IPs @@ -336,20 +341,20 @@ func TestIPAllocator(t *testing.T) { if err := ReleaseIP(network, expectedIPs[3]); err != nil { t.Fatal(err) } - // 2(u) - 3(u) - 4(u) - 5(f) - 6(u) + // 1(u) - 2(u) - 3(u) - 4(f) - 5(u) - 6(u) // ↑ if err := ReleaseIP(network, expectedIPs[2]); err != nil { t.Fatal(err) } - // 2(u) - 3(u) - 4(f) - 5(f) - 6(u) - // ↑ + // 1(u) - 2(u) - 3(f) - 4(f) - 5(u) - 6(u) + // ↑ if err := ReleaseIP(network, expectedIPs[4]); err != nil { t.Fatal(err) } - // 2(u) - 3(u) - 4(f) - 5(f) - 6(f) - // ↑ + // 1(u) - 2(u) - 3(f) - 4(f) - 5(f) - 6(u) + // ↑ // Make sure that IPs are reused in sequential order, starting // with the first released IP @@ -512,10 +517,10 @@ func TestAllocateDifferentSubnets(t *testing.T) { Mask: []byte{255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0}, // /64 netmask } expectedIPs := []net.IP{ - 0: net.IPv4(192, 168, 0, 2), - 1: net.IPv4(192, 168, 0, 3), - 2: net.IPv4(127, 0, 0, 2), - 3: net.IPv4(127, 0, 0, 3), + 0: net.IPv4(192, 168, 0, 1), + 1: net.IPv4(192, 168, 0, 2), + 2: net.IPv4(127, 0, 0, 1), + 3: net.IPv4(127, 0, 0, 2), 4: net.ParseIP("2a00:1450::1"), 5: net.ParseIP("2a00:1450::2"), 6: net.ParseIP("2a00:1450::3"), diff --git a/daemon/networkdriver/portallocator/portallocator.go b/daemon/networkdriver/portallocator/portallocator.go index 3414d11e7a..da9f987397 100644 --- a/daemon/networkdriver/portallocator/portallocator.go +++ b/daemon/networkdriver/portallocator/portallocator.go @@ -1,10 +1,24 @@ package portallocator import ( + "bufio" "errors" "fmt" "net" + "os" "sync" + + log "github.com/Sirupsen/logrus" +) + +const ( + DefaultPortRangeStart = 49153 + DefaultPortRangeEnd = 65535 +) + +var ( + beginPortRange = DefaultPortRangeStart + endPortRange = DefaultPortRangeEnd ) type portMap struct { @@ -15,7 +29,7 @@ type portMap struct { func newPortMap() *portMap { return &portMap{ p: map[int]struct{}{}, - last: EndPortRange, + last: endPortRange, } } @@ -30,11 +44,6 @@ func newProtoMap() protoMap { type ipMapping map[string]protoMap -const ( - BeginPortRange = 49153 - EndPortRange = 65535 -) - var ( ErrAllPortsAllocated = errors.New("all ports are allocated") ErrUnknownProtocol = errors.New("unknown protocol") @@ -59,6 +68,31 @@ func NewErrPortAlreadyAllocated(ip string, port int) ErrPortAlreadyAllocated { } } +func init() { + const portRangeKernelParam = "/proc/sys/net/ipv4/ip_local_port_range" + + file, err := os.Open(portRangeKernelParam) + if err != nil { + log.Warnf("Failed to read %s kernel parameter: %v", portRangeKernelParam, err) + return + } + var start, end int + n, err := fmt.Fscanf(bufio.NewReader(file), "%d\t%d", &start, &end) + if n != 2 || err != nil { + if err == nil { + err = fmt.Errorf("unexpected count of parsed numbers (%d)", n) + } + log.Errorf("Failed to parse port range from %s: %v", portRangeKernelParam, err) + return + } + beginPortRange = start + endPortRange = end +} + +func PortRange() (int, int) { + return beginPortRange, endPortRange +} + func (e ErrPortAlreadyAllocated) IP() string { return e.ip } @@ -137,10 +171,10 @@ func ReleaseAll() error { func (pm *portMap) findPort() (int, error) { port := pm.last - for i := 0; i <= EndPortRange-BeginPortRange; i++ { + for i := 0; i <= endPortRange-beginPortRange; i++ { port++ - if port > EndPortRange { - port = BeginPortRange + if port > endPortRange { + port = beginPortRange } if _, ok := pm.p[port]; !ok { diff --git a/daemon/networkdriver/portallocator/portallocator_test.go b/daemon/networkdriver/portallocator/portallocator_test.go index 72581f1040..bac558fa41 100644 --- a/daemon/networkdriver/portallocator/portallocator_test.go +++ b/daemon/networkdriver/portallocator/portallocator_test.go @@ -5,6 +5,11 @@ import ( "testing" ) +func init() { + beginPortRange = DefaultPortRangeStart + endPortRange = DefaultPortRangeEnd +} + func reset() { ReleaseAll() } @@ -17,7 +22,7 @@ func TestRequestNewPort(t *testing.T) { t.Fatal(err) } - if expected := BeginPortRange; port != expected { + if expected := beginPortRange; port != expected { t.Fatalf("Expected port %d got %d", expected, port) } } @@ -102,13 +107,13 @@ func TestUnknowProtocol(t *testing.T) { func TestAllocateAllPorts(t *testing.T) { defer reset() - for i := 0; i <= EndPortRange-BeginPortRange; i++ { + for i := 0; i <= endPortRange-beginPortRange; i++ { port, err := RequestPort(defaultIP, "tcp", 0) if err != nil { t.Fatal(err) } - if expected := BeginPortRange + i; port != expected { + if expected := beginPortRange + i; port != expected { t.Fatalf("Expected port %d got %d", expected, port) } } @@ -123,7 +128,7 @@ func TestAllocateAllPorts(t *testing.T) { } // release a port in the middle and ensure we get another tcp port - port := BeginPortRange + 5 + port := beginPortRange + 5 if err := ReleasePort(defaultIP, "tcp", port); err != nil { t.Fatal(err) } @@ -153,13 +158,13 @@ func BenchmarkAllocatePorts(b *testing.B) { defer reset() for i := 0; i < b.N; i++ { - for i := 0; i <= EndPortRange-BeginPortRange; i++ { + for i := 0; i <= endPortRange-beginPortRange; i++ { port, err := RequestPort(defaultIP, "tcp", 0) if err != nil { b.Fatal(err) } - if expected := BeginPortRange + i; port != expected { + if expected := beginPortRange + i; port != expected { b.Fatalf("Expected port %d got %d", expected, port) } } @@ -231,15 +236,15 @@ func TestPortAllocation(t *testing.T) { func TestNoDuplicateBPR(t *testing.T) { defer reset() - if port, err := RequestPort(defaultIP, "tcp", BeginPortRange); err != nil { + if port, err := RequestPort(defaultIP, "tcp", beginPortRange); err != nil { t.Fatal(err) - } else if port != BeginPortRange { - t.Fatalf("Expected port %d got %d", BeginPortRange, port) + } else if port != beginPortRange { + t.Fatalf("Expected port %d got %d", beginPortRange, port) } if port, err := RequestPort(defaultIP, "tcp", 0); err != nil { t.Fatal(err) - } else if port == BeginPortRange { + } else if port == beginPortRange { t.Fatalf("Acquire(0) allocated the same port twice: %d", port) } } diff --git a/daemon/networkdriver/portmapper/mapper_test.go b/daemon/networkdriver/portmapper/mapper_test.go index 42e44a11df..fa7bdecdbf 100644 --- a/daemon/networkdriver/portmapper/mapper_test.go +++ b/daemon/networkdriver/portmapper/mapper_test.go @@ -129,7 +129,8 @@ func TestMapAllPortsSingleInterface(t *testing.T) { }() for i := 0; i < 10; i++ { - for i := portallocator.BeginPortRange; i < portallocator.EndPortRange; i++ { + start, end := portallocator.PortRange() + for i := start; i < end; i++ { if host, err = Map(srcAddr1, dstIp1, 0); err != nil { t.Fatal(err) } @@ -137,8 +138,8 @@ func TestMapAllPortsSingleInterface(t *testing.T) { hosts = append(hosts, host) } - if _, err := Map(srcAddr1, dstIp1, portallocator.BeginPortRange); err == nil { - t.Fatalf("Port %d should be bound but is not", portallocator.BeginPortRange) + if _, err := Map(srcAddr1, dstIp1, start); err == nil { + t.Fatalf("Port %d should be bound but is not", start) } for _, val := range hosts { diff --git a/daemon/pause.go b/daemon/pause.go index 0e4323d9a8..af943de103 100644 --- a/daemon/pause.go +++ b/daemon/pause.go @@ -9,9 +9,9 @@ func (daemon *Daemon) ContainerPause(job *engine.Job) engine.Status { return job.Errorf("Usage: %s CONTAINER", job.Name) } name := job.Args[0] - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } if err := container.Pause(); err != nil { return job.Errorf("Cannot pause container %s: %s", name, err) @@ -25,9 +25,9 @@ func (daemon *Daemon) ContainerUnpause(job *engine.Job) engine.Status { return job.Errorf("Usage: %s CONTAINER", job.Name) } name := job.Args[0] - container := daemon.Get(name) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } if err := container.Unpause(); err != nil { return job.Errorf("Cannot unpause container %s: %s", name, err) diff --git a/daemon/rename.go b/daemon/rename.go index 1dedc7d3a7..6d8293f127 100644 --- a/daemon/rename.go +++ b/daemon/rename.go @@ -1,8 +1,6 @@ package daemon -import ( - "github.com/docker/docker/engine" -) +import "github.com/docker/docker/engine" func (daemon *Daemon) ContainerRename(job *engine.Job) engine.Status { if len(job.Args) != 2 { @@ -11,24 +9,36 @@ func (daemon *Daemon) ContainerRename(job *engine.Job) engine.Status { oldName := job.Args[0] newName := job.Args[1] - container := daemon.Get(oldName) - if container == nil { - return job.Errorf("No such container: %s", oldName) + container, err := daemon.Get(oldName) + if err != nil { + return job.Error(err) } oldName = container.Name container.Lock() defer container.Unlock() - if _, err := daemon.reserveName(container.ID, newName); err != nil { + if newName, err = daemon.reserveName(container.ID, newName); err != nil { return job.Errorf("Error when allocating new name: %s", err) } container.Name = newName + undo := func() { + container.Name = oldName + daemon.reserveName(container.ID, oldName) + daemon.containerGraph.Delete(newName) + } + if err := daemon.containerGraph.Delete(oldName); err != nil { + undo() return job.Errorf("Failed to delete container %q: %v", oldName, err) } + if err := container.toDisk(); err != nil { + undo() + return job.Error(err) + } + return engine.StatusOK } diff --git a/daemon/resize.go b/daemon/resize.go index 68c070370a..860f79eba4 100644 --- a/daemon/resize.go +++ b/daemon/resize.go @@ -19,14 +19,14 @@ func (daemon *Daemon) ContainerResize(job *engine.Job) engine.Status { if err != nil { return job.Error(err) } - - if container := daemon.Get(name); container != nil { - if err := container.Resize(height, width); err != nil { - return job.Error(err) - } - return engine.StatusOK + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } - return job.Errorf("No such container: %s", name) + if err := container.Resize(height, width); err != nil { + return job.Error(err) + } + return engine.StatusOK } func (daemon *Daemon) ContainerExecResize(job *engine.Job) engine.Status { diff --git a/daemon/restart.go b/daemon/restart.go index bcc057156d..bcde628d38 100644 --- a/daemon/restart.go +++ b/daemon/restart.go @@ -15,13 +15,13 @@ func (daemon *Daemon) ContainerRestart(job *engine.Job) engine.Status { if job.EnvExists("t") { t = job.GetenvInt("t") } - if container := daemon.Get(name); container != nil { - if err := container.Restart(int(t)); err != nil { - return job.Errorf("Cannot restart container %s: %s\n", name, err) - } - container.LogEvent("restart") - } else { - return job.Errorf("No such container: %s\n", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } + if err := container.Restart(int(t)); err != nil { + return job.Errorf("Cannot restart container %s: %s\n", name, err) + } + container.LogEvent("restart") return engine.StatusOK } diff --git a/daemon/start.go b/daemon/start.go index d6655189d7..e51ada22a2 100644 --- a/daemon/start.go +++ b/daemon/start.go @@ -14,12 +14,12 @@ func (daemon *Daemon) ContainerStart(job *engine.Job) engine.Status { return job.Errorf("Usage: %s container_id", job.Name) } var ( - name = job.Args[0] - container = daemon.Get(name) + name = job.Args[0] ) - if container == nil { - return job.Errorf("No such container: %s", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } if container.IsPaused() { @@ -66,7 +66,7 @@ func (daemon *Daemon) setHostConfig(container *Container, hostConfig *runconfig. if err != nil && os.IsNotExist(err) { err = os.MkdirAll(source, 0755) if err != nil { - return fmt.Errorf("Could not create local directory '%s' for bind mount: %s!", source, err.Error()) + return fmt.Errorf("Could not create local directory '%s' for bind mount: %v!", source, err) } } } @@ -74,6 +74,7 @@ func (daemon *Daemon) setHostConfig(container *Container, hostConfig *runconfig. if err := daemon.RegisterLinks(container, hostConfig); err != nil { return err } + container.hostConfig = hostConfig container.toDisk() diff --git a/daemon/stats.go b/daemon/stats.go index e047497ec6..85d4a08550 100644 --- a/daemon/stats.go +++ b/daemon/stats.go @@ -3,7 +3,7 @@ package daemon import ( "encoding/json" - "github.com/docker/docker/api/stats" + "github.com/docker/docker/api/types" "github.com/docker/docker/daemon/execdriver" "github.com/docker/docker/engine" "github.com/docker/libcontainer" @@ -18,7 +18,7 @@ func (daemon *Daemon) ContainerStats(job *engine.Job) engine.Status { enc := json.NewEncoder(job.Stdout) for v := range updates { update := v.(*execdriver.ResourceStats) - ss := convertToAPITypes(update.ContainerStats) + ss := convertToAPITypes(update.Stats) ss.MemoryStats.Limit = uint64(update.MemoryLimit) ss.Read = update.Read ss.CpuStats.SystemUsage = update.SystemUsage @@ -31,25 +31,26 @@ func (daemon *Daemon) ContainerStats(job *engine.Job) engine.Status { return engine.StatusOK } -// convertToAPITypes converts the libcontainer.ContainerStats to the api specific +// convertToAPITypes converts the libcontainer.Stats to the api specific // structs. This is done to preserve API compatibility and versioning. -func convertToAPITypes(ls *libcontainer.ContainerStats) *stats.Stats { - s := &stats.Stats{} - if ls.NetworkStats != nil { - s.Network = stats.Network{ - RxBytes: ls.NetworkStats.RxBytes, - RxPackets: ls.NetworkStats.RxPackets, - RxErrors: ls.NetworkStats.RxErrors, - RxDropped: ls.NetworkStats.RxDropped, - TxBytes: ls.NetworkStats.TxBytes, - TxPackets: ls.NetworkStats.TxPackets, - TxErrors: ls.NetworkStats.TxErrors, - TxDropped: ls.NetworkStats.TxDropped, +func convertToAPITypes(ls *libcontainer.Stats) *types.Stats { + s := &types.Stats{} + if ls.Interfaces != nil { + s.Network = types.Network{} + for _, iface := range ls.Interfaces { + s.Network.RxBytes += iface.RxBytes + s.Network.RxPackets += iface.RxPackets + s.Network.RxErrors += iface.RxErrors + s.Network.RxDropped += iface.RxDropped + s.Network.TxBytes += iface.TxBytes + s.Network.TxPackets += iface.TxPackets + s.Network.TxErrors += iface.TxErrors + s.Network.TxDropped += iface.TxDropped } } cs := ls.CgroupStats if cs != nil { - s.BlkioStats = stats.BlkioStats{ + s.BlkioStats = types.BlkioStats{ IoServiceBytesRecursive: copyBlkioEntry(cs.BlkioStats.IoServiceBytesRecursive), IoServicedRecursive: copyBlkioEntry(cs.BlkioStats.IoServicedRecursive), IoQueuedRecursive: copyBlkioEntry(cs.BlkioStats.IoQueuedRecursive), @@ -60,21 +61,21 @@ func convertToAPITypes(ls *libcontainer.ContainerStats) *stats.Stats { SectorsRecursive: copyBlkioEntry(cs.BlkioStats.SectorsRecursive), } cpu := cs.CpuStats - s.CpuStats = stats.CpuStats{ - CpuUsage: stats.CpuUsage{ + s.CpuStats = types.CpuStats{ + CpuUsage: types.CpuUsage{ TotalUsage: cpu.CpuUsage.TotalUsage, PercpuUsage: cpu.CpuUsage.PercpuUsage, UsageInKernelmode: cpu.CpuUsage.UsageInKernelmode, UsageInUsermode: cpu.CpuUsage.UsageInUsermode, }, - ThrottlingData: stats.ThrottlingData{ + ThrottlingData: types.ThrottlingData{ Periods: cpu.ThrottlingData.Periods, ThrottledPeriods: cpu.ThrottlingData.ThrottledPeriods, ThrottledTime: cpu.ThrottlingData.ThrottledTime, }, } mem := cs.MemoryStats - s.MemoryStats = stats.MemoryStats{ + s.MemoryStats = types.MemoryStats{ Usage: mem.Usage, MaxUsage: mem.MaxUsage, Stats: mem.Stats, @@ -84,10 +85,10 @@ func convertToAPITypes(ls *libcontainer.ContainerStats) *stats.Stats { return s } -func copyBlkioEntry(entries []cgroups.BlkioStatEntry) []stats.BlkioStatEntry { - out := make([]stats.BlkioStatEntry, len(entries)) +func copyBlkioEntry(entries []cgroups.BlkioStatEntry) []types.BlkioStatEntry { + out := make([]types.BlkioStatEntry, len(entries)) for i, re := range entries { - out[i] = stats.BlkioStatEntry{ + out[i] = types.BlkioStatEntry{ Major: re.Major, Minor: re.Minor, Op: re.Op, diff --git a/daemon/stop.go b/daemon/stop.go index 1a098a1ad3..e2f1d284a8 100644 --- a/daemon/stop.go +++ b/daemon/stop.go @@ -15,16 +15,16 @@ func (daemon *Daemon) ContainerStop(job *engine.Job) engine.Status { if job.EnvExists("t") { t = job.GetenvInt("t") } - if container := daemon.Get(name); container != nil { - if !container.IsRunning() { - return job.Errorf("Container already stopped") - } - if err := container.Stop(int(t)); err != nil { - return job.Errorf("Cannot stop container %s: %s\n", name, err) - } - container.LogEvent("stop") - } else { - return job.Errorf("No such container: %s\n", name) + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } + if !container.IsRunning() { + return job.Errorf("Container already stopped") + } + if err := container.Stop(int(t)); err != nil { + return job.Errorf("Cannot stop container %s: %s\n", name, err) + } + container.LogEvent("stop") return engine.StatusOK } diff --git a/daemon/top.go b/daemon/top.go index 4d916ee5dc..782cc83dcf 100644 --- a/daemon/top.go +++ b/daemon/top.go @@ -21,59 +21,59 @@ func (daemon *Daemon) ContainerTop(job *engine.Job) engine.Status { psArgs = job.Args[1] } - if container := daemon.Get(name); container != nil { - if !container.IsRunning() { - return job.Errorf("Container %s is not running", name) - } - pids, err := daemon.ExecutionDriver().GetPidsForContainer(container.ID) - if err != nil { - return job.Error(err) - } - output, err := exec.Command("ps", strings.Split(psArgs, " ")...).Output() - if err != nil { - return job.Errorf("Error running ps: %s", err) - } - - lines := strings.Split(string(output), "\n") - header := strings.Fields(lines[0]) - out := &engine.Env{} - out.SetList("Titles", header) - - pidIndex := -1 - for i, name := range header { - if name == "PID" { - pidIndex = i - } - } - if pidIndex == -1 { - return job.Errorf("Couldn't find PID field in ps output") - } - - processes := [][]string{} - for _, line := range lines[1:] { - if len(line) == 0 { - continue - } - fields := strings.Fields(line) - p, err := strconv.Atoi(fields[pidIndex]) - if err != nil { - return job.Errorf("Unexpected pid '%s': %s", fields[pidIndex], err) - } - - for _, pid := range pids { - if pid == p { - // Make sure number of fields equals number of header titles - // merging "overhanging" fields - process := fields[:len(header)-1] - process = append(process, strings.Join(fields[len(header)-1:], " ")) - processes = append(processes, process) - } - } - } - out.SetJson("Processes", processes) - out.WriteTo(job.Stdout) - return engine.StatusOK - + container, err := daemon.Get(name) + if err != nil { + return job.Error(err) } - return job.Errorf("No such container: %s", name) + if !container.IsRunning() { + return job.Errorf("Container %s is not running", name) + } + pids, err := daemon.ExecutionDriver().GetPidsForContainer(container.ID) + if err != nil { + return job.Error(err) + } + output, err := exec.Command("ps", strings.Split(psArgs, " ")...).Output() + if err != nil { + return job.Errorf("Error running ps: %s", err) + } + + lines := strings.Split(string(output), "\n") + header := strings.Fields(lines[0]) + out := &engine.Env{} + out.SetList("Titles", header) + + pidIndex := -1 + for i, name := range header { + if name == "PID" { + pidIndex = i + } + } + if pidIndex == -1 { + return job.Errorf("Couldn't find PID field in ps output") + } + + processes := [][]string{} + for _, line := range lines[1:] { + if len(line) == 0 { + continue + } + fields := strings.Fields(line) + p, err := strconv.Atoi(fields[pidIndex]) + if err != nil { + return job.Errorf("Unexpected pid '%s': %s", fields[pidIndex], err) + } + + for _, pid := range pids { + if pid == p { + // Make sure number of fields equals number of header titles + // merging "overhanging" fields + process := fields[:len(header)-1] + process = append(process, strings.Join(fields[len(header)-1:], " ")) + processes = append(processes, process) + } + } + } + out.SetJson("Processes", processes) + out.WriteTo(job.Stdout) + return engine.StatusOK } diff --git a/daemon/volumes.go b/daemon/volumes.go index 7b49733839..b389ad0b86 100644 --- a/daemon/volumes.go +++ b/daemon/volumes.go @@ -8,14 +8,13 @@ import ( "path/filepath" "sort" "strings" - "syscall" log "github.com/Sirupsen/logrus" "github.com/docker/docker/daemon/execdriver" "github.com/docker/docker/pkg/chrootarchive" "github.com/docker/docker/pkg/symlink" + "github.com/docker/docker/pkg/system" "github.com/docker/docker/volumes" - "github.com/docker/libcontainer/label" ) type Mount struct { @@ -89,9 +88,10 @@ func (m *Mount) initialize() error { // Make sure we remove these old volumes we don't actually want now. // Ignore any errors here since this is just cleanup, maybe someone volumes-from'd this volume - v := m.container.daemon.volumes.Get(hostPath) - v.RemoveContainer(m.container.ID) - m.container.daemon.volumes.Delete(v.Path) + if v := m.container.daemon.volumes.Get(hostPath); v != nil { + v.RemoveContainer(m.container.ID) + m.container.daemon.volumes.Delete(v.Path) + } } // This is the full path to container fs + mntToPath @@ -158,6 +158,10 @@ func (container *Container) parseVolumeMountConfig() (map[string]*Mount, error) if err != nil { return nil, err } + // Check if a bind mount has already been specified for the same container path + if m, exists := mounts[mountToPath]; exists { + return nil, fmt.Errorf("Duplicate volume %q: %q already in use, mounted from %q", path, mountToPath, m.volume.Path) + } // Check if a volume already exists for this and use it vol, err := container.daemon.volumes.FindOrCreateVolume(path, writable) if err != nil { @@ -184,6 +188,12 @@ func (container *Container) parseVolumeMountConfig() (map[string]*Mount, error) continue } + if stat, err := os.Stat(filepath.Join(container.basefs, path)); err == nil { + if !stat.IsDir() { + return nil, fmt.Errorf("file exists at %s, can't create volume there") + } + } + vol, err := container.daemon.volumes.FindOrCreateVolume("", true) if err != nil { return nil, err @@ -266,9 +276,9 @@ func (container *Container) applyVolumesFrom() error { continue } - c := container.daemon.Get(id) - if c == nil { - return fmt.Errorf("container %s not found, impossible to mount its volumes", id) + c, err := container.daemon.Get(id) + if err != nil { + return fmt.Errorf("Could not apply volumes of non-existent container %q.", id) } var ( @@ -306,23 +316,7 @@ func validMountMode(mode string) bool { } func (container *Container) setupMounts() error { - mounts := []execdriver.Mount{ - {Source: container.ResolvConfPath, Destination: "/etc/resolv.conf", Writable: true, Private: true}, - } - - if container.HostnamePath != "" { - mounts = append(mounts, execdriver.Mount{Source: container.HostnamePath, Destination: "/etc/hostname", Writable: true, Private: true}) - } - - if container.HostsPath != "" { - mounts = append(mounts, execdriver.Mount{Source: container.HostsPath, Destination: "/etc/hosts", Writable: true, Private: true}) - } - - for _, m := range mounts { - if err := label.SetFileLabel(m.Source, container.MountLabel); err != nil { - return err - } - } + mounts := []execdriver.Mount{} // Mount user specified volumes // Note, these are not private because you may want propagation of (un)mounts from host @@ -337,6 +331,18 @@ func (container *Container) setupMounts() error { }) } + if container.ResolvConfPath != "" { + mounts = append(mounts, execdriver.Mount{Source: container.ResolvConfPath, Destination: "/etc/resolv.conf", Writable: true, Private: true}) + } + + if container.HostnamePath != "" { + mounts = append(mounts, execdriver.Mount{Source: container.HostnamePath, Destination: "/etc/hostname", Writable: true, Private: true}) + } + + if container.HostsPath != "" { + mounts = append(mounts, execdriver.Mount{Source: container.HostsPath, Destination: "/etc/hosts", Writable: true, Private: true}) + } + container.command.Mounts = mounts return nil } @@ -379,15 +385,14 @@ func copyExistingContents(source, destination string) error { // copyOwnership copies the permissions and uid:gid of the source file // into the destination file func copyOwnership(source, destination string) error { - var stat syscall.Stat_t - - if err := syscall.Stat(source, &stat); err != nil { + stat, err := system.Stat(source) + if err != nil { return err } - if err := os.Chown(destination, int(stat.Uid), int(stat.Gid)); err != nil { + if err := os.Chown(destination, int(stat.Uid()), int(stat.Gid())); err != nil { return err } - return os.Chmod(destination, os.FileMode(stat.Mode)) + return os.Chmod(destination, os.FileMode(stat.Mode())) } diff --git a/daemon/wait.go b/daemon/wait.go index a1f657c353..7579467a00 100644 --- a/daemon/wait.go +++ b/daemon/wait.go @@ -11,10 +11,11 @@ func (daemon *Daemon) ContainerWait(job *engine.Job) engine.Status { return job.Errorf("Usage: %s", job.Name) } name := job.Args[0] - if container := daemon.Get(name); container != nil { - status, _ := container.WaitStop(-1 * time.Second) - job.Printf("%d\n", status) - return engine.StatusOK + container, err := daemon.Get(name) + if err != nil { + return job.Errorf("%s: %v", job.Name, err) } - return job.Errorf("%s: No such container: %s", job.Name, name) + status, _ := container.WaitStop(-1 * time.Second) + job.Printf("%d\n", status) + return engine.StatusOK } diff --git a/docker/daemon.go b/docker/daemon.go index 0923997375..b2a985b221 100644 --- a/docker/daemon.go +++ b/docker/daemon.go @@ -7,15 +7,17 @@ import ( "io" "os" "path/filepath" + "strings" log "github.com/Sirupsen/logrus" + "github.com/docker/docker/autogen/dockerversion" "github.com/docker/docker/builder" "github.com/docker/docker/builtins" "github.com/docker/docker/daemon" _ "github.com/docker/docker/daemon/execdriver/lxc" _ "github.com/docker/docker/daemon/execdriver/native" - "github.com/docker/docker/dockerversion" "github.com/docker/docker/engine" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/registry" @@ -36,7 +38,7 @@ func init() { func migrateKey() (err error) { // Migrate trust key if exists at ~/.docker/key.json and owned by current user - oldPath := filepath.Join(getHomeDir(), ".docker", defaultTrustKeyFile) + oldPath := filepath.Join(homedir.Get(), ".docker", defaultTrustKeyFile) newPath := filepath.Join(getDaemonConfDir(), defaultTrustKeyFile) if _, statErr := os.Stat(newPath); os.IsNotExist(statErr) && utils.IsFileOwner(oldPath) { defer func() { @@ -100,11 +102,14 @@ func mainDaemon() { // load the daemon in the background so we can immediately start // the http api so that connections don't fail while the daemon // is booting + daemonInitWait := make(chan error) go func() { d, err := daemon.NewDaemon(daemonCfg, eng) if err != nil { - log.Fatal(err) + daemonInitWait <- err + return } + log.Infof("docker daemon: %s %s; execdriver: %s; graphdriver: %s", dockerversion.VERSION, dockerversion.GITCOMMIT, @@ -113,7 +118,8 @@ func mainDaemon() { ) if err := d.Install(eng); err != nil { - log.Fatal(err) + daemonInitWait <- err + return } b := &builder.BuilderJob{eng, d} @@ -122,16 +128,19 @@ func mainDaemon() { // after the daemon is done setting up we can tell the api to start // accepting connections if err := eng.Job("acceptconnections").Run(); err != nil { - log.Fatal(err) + daemonInitWait <- err + return } + daemonInitWait <- nil }() // Serve api job := eng.Job("serveapi", flHosts...) job.SetenvBool("Logging", true) - job.SetenvBool("EnableCors", *flEnableCors) + job.SetenvBool("EnableCors", daemonCfg.EnableCors) + job.Setenv("CorsHeaders", daemonCfg.CorsHeaders) job.Setenv("Version", dockerversion.VERSION) - job.Setenv("SocketGroup", *flSocketGroup) + job.Setenv("SocketGroup", daemonCfg.SocketGroup) job.SetenvBool("Tls", *flTls) job.SetenvBool("TlsVerify", *flTlsVerify) @@ -139,7 +148,47 @@ func mainDaemon() { job.Setenv("TlsCert", *flCert) job.Setenv("TlsKey", *flKey) job.SetenvBool("BufferRequests", true) - if err := job.Run(); err != nil { - log.Fatal(err) + + // The serve API job never exits unless an error occurs + // We need to start it as a goroutine and wait on it so + // daemon doesn't exit + serveAPIWait := make(chan error) + go func() { + if err := job.Run(); err != nil { + log.Errorf("ServeAPI error: %v", err) + serveAPIWait <- err + return + } + serveAPIWait <- nil + }() + + // Wait for the daemon startup goroutine to finish + // This makes sure we can actually cleanly shutdown the daemon + log.Debug("waiting for daemon to initialize") + errDaemon := <-daemonInitWait + if errDaemon != nil { + eng.Shutdown() + outStr := fmt.Sprintf("Shutting down daemon due to errors: %v", errDaemon) + if strings.Contains(errDaemon.Error(), "engine is shutdown") { + // if the error is "engine is shutdown", we've already reported (or + // will report below in API server errors) the error + outStr = "Shutting down daemon due to reported errors" + } + // we must "fatal" exit here as the API server may be happy to + // continue listening forever if the error had no impact to API + log.Fatal(outStr) + } else { + log.Info("Daemon has completed initialization") } + + // Daemon is fully initialized and handling API traffic + // Wait for serve API job to complete + errAPI := <-serveAPIWait + // If we have an error here it is unique to API (as daemonErr would have + // exited the daemon process above) + eng.Shutdown() + if errAPI != nil { + log.Fatalf("Shutting down due to ServeAPI error: %v", errAPI) + } + } diff --git a/docker/docker.go b/docker/docker.go index 80d5e13f10..347424432b 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -11,9 +11,10 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/api" "github.com/docker/docker/api/client" - "github.com/docker/docker/dockerversion" + "github.com/docker/docker/autogen/dockerversion" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/reexec" + "github.com/docker/docker/pkg/term" "github.com/docker/docker/utils" ) @@ -29,6 +30,11 @@ func main() { return } + // Set terminal emulation based on platform as required. + stdin, stdout, stderr := term.StdStreams() + + initLogging(stderr) + flag.Parse() // FIXME: validate daemon flags here @@ -42,16 +48,16 @@ func main() { if err != nil { log.Fatalf("Unable to parse logging level: %s", *flLogLevel) } - initLogging(lvl) + setLogLevel(lvl) } else { - initLogging(log.InfoLevel) + setLogLevel(log.InfoLevel) } // -D, --debug, -l/--log-level=debug processing // When/if -D is removed this block can be deleted if *flDebug { os.Setenv("DEBUG", "1") - initLogging(log.DebugLevel) + setLogLevel(log.DebugLevel) } if len(flHosts) == 0 { @@ -70,6 +76,10 @@ func main() { setDefaultConfFlag(flTrustKey, defaultTrustKeyFile) if *flDaemon { + if *flHelp { + flag.Usage() + return + } mainDaemon() return } @@ -111,7 +121,7 @@ func main() { *flTls = true cert, err := tls.LoadX509KeyPair(*flCert, *flKey) if err != nil { - log.Fatalf("Couldn't load X509 key pair: %s. Key encrypted?", err) + log.Fatalf("Couldn't load X509 key pair: %q. Make sure the key is encrypted", err) } tlsConfig.Certificates = []tls.Certificate{cert} } @@ -120,9 +130,9 @@ func main() { } if *flTls || *flTlsVerify { - cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, *flTrustKey, protoAddrParts[0], protoAddrParts[1], &tlsConfig) + cli = client.NewDockerCli(stdin, stdout, stderr, *flTrustKey, protoAddrParts[0], protoAddrParts[1], &tlsConfig) } else { - cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, *flTrustKey, protoAddrParts[0], protoAddrParts[1], nil) + cli = client.NewDockerCli(stdin, stdout, stderr, *flTrustKey, protoAddrParts[0], protoAddrParts[1], nil) } if err := cli.Cmd(flag.Args()...); err != nil { diff --git a/docker/flags.go b/docker/flags.go index d91a9a1de7..7f0c10d2d3 100644 --- a/docker/flags.go +++ b/docker/flags.go @@ -7,6 +7,7 @@ import ( "runtime" "github.com/docker/docker/opts" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" ) @@ -17,35 +18,26 @@ var ( func init() { if dockerCertPath == "" { - dockerCertPath = filepath.Join(getHomeDir(), ".docker") + dockerCertPath = filepath.Join(homedir.Get(), ".docker") } } -func getHomeDir() string { - if runtime.GOOS == "windows" { - return os.Getenv("USERPROFILE") - } - return os.Getenv("HOME") -} - func getDaemonConfDir() string { // TODO: update for Windows daemon if runtime.GOOS == "windows" { - return filepath.Join(os.Getenv("USERPROFILE"), ".docker") + return filepath.Join(homedir.Get(), ".docker") } return "/etc/docker" } var ( - flVersion = flag.Bool([]string{"v", "-version"}, false, "Print version information and quit") - flDaemon = flag.Bool([]string{"d", "-daemon"}, false, "Enable daemon mode") - flDebug = flag.Bool([]string{"D", "-debug"}, false, "Enable debug mode") - flSocketGroup = flag.String([]string{"G", "-group"}, "docker", "Group to assign the unix socket specified by -H when running in daemon mode\nuse '' (the empty string) to disable setting of a group") - flLogLevel = flag.String([]string{"l", "-log-level"}, "info", "Set the logging level (debug, info, warn, error, fatal)") - flEnableCors = flag.Bool([]string{"#api-enable-cors", "-api-enable-cors"}, false, "Enable CORS headers in the remote API") - flTls = flag.Bool([]string{"-tls"}, false, "Use TLS; implied by --tlsverify flag") - flHelp = flag.Bool([]string{"h", "-help"}, false, "Print usage") - flTlsVerify = flag.Bool([]string{"-tlsverify"}, dockerTlsVerify, "Use TLS and verify the remote (daemon: verify client, client: verify daemon)") + flVersion = flag.Bool([]string{"v", "-version"}, false, "Print version information and quit") + flDaemon = flag.Bool([]string{"d", "-daemon"}, false, "Enable daemon mode") + flDebug = flag.Bool([]string{"D", "-debug"}, false, "Enable debug mode") + flLogLevel = flag.String([]string{"l", "-log-level"}, "info", "Set the logging level") + flTls = flag.Bool([]string{"-tls"}, false, "Use TLS; implied by --tlsverify") + flHelp = flag.Bool([]string{"h", "-help"}, false, "Print usage") + flTlsVerify = flag.Bool([]string{"-tlsverify"}, dockerTlsVerify, "Use TLS and verify the remote") // these are initialized in init() below since their default values depend on dockerCertPath which isn't fully initialized until init() runs flTrustKey *string @@ -60,7 +52,7 @@ func setDefaultConfFlag(flag *string, def string) { if *flDaemon { *flag = filepath.Join(getDaemonConfDir(), def) } else { - *flag = filepath.Join(getHomeDir(), ".docker", def) + *flag = filepath.Join(homedir.Get(), ".docker", def) } } } @@ -70,10 +62,10 @@ func init() { // TODO use flag flag.String([]string{"i", "-identity"}, "", "Path to libtrust key file") flTrustKey = &placeholderTrustKey - flCa = flag.String([]string{"-tlscacert"}, filepath.Join(dockerCertPath, defaultCaFile), "Trust only remotes providing a certificate signed by the CA given here") + flCa = flag.String([]string{"-tlscacert"}, filepath.Join(dockerCertPath, defaultCaFile), "Trust certs signed only by this CA") flCert = flag.String([]string{"-tlscert"}, filepath.Join(dockerCertPath, defaultCertFile), "Path to TLS certificate file") flKey = flag.String([]string{"-tlskey"}, filepath.Join(dockerCertPath, defaultKeyFile), "Path to TLS key file") - opts.HostListVar(&flHosts, []string{"H", "-host"}, "The socket(s) to bind to in daemon mode or connect to in client mode, specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd.") + opts.HostListVar(&flHosts, []string{"H", "-host"}, "Daemon socket(s) to connect to") flag.Usage = func() { fmt.Fprint(os.Stdout, "Usage: docker [OPTIONS] COMMAND [arg...]\n\nA self-sufficient runtime for linux containers.\n\nOptions:\n") @@ -116,7 +108,7 @@ func init() { {"save", "Save an image to a tar archive"}, {"search", "Search for an image on the Docker Hub"}, {"start", "Start a stopped container"}, - {"stats", "Display a live stream of one or more containers' resource usage statistics"}, + {"stats", "Display a stream of a containers' resource usage statistics"}, {"stop", "Stop a running container"}, {"tag", "Tag an image into a repository"}, {"top", "Lookup the running processes of a container"}, diff --git a/docker/log.go b/docker/log.go index cdbbd4408f..0dd9a70eeb 100644 --- a/docker/log.go +++ b/docker/log.go @@ -1,12 +1,14 @@ package main import ( - "os" - log "github.com/Sirupsen/logrus" + "io" ) -func initLogging(lvl log.Level) { - log.SetOutput(os.Stderr) +func setLogLevel(lvl log.Level) { log.SetLevel(lvl) } + +func initLogging(stderr io.Writer) { + log.SetOutput(stderr) +} diff --git a/dockerversion/dockerversion.go b/dockerversion/dockerversion.go deleted file mode 100644 index 1898d5c61f..0000000000 --- a/dockerversion/dockerversion.go +++ /dev/null @@ -1,15 +0,0 @@ -package dockerversion - -// FIXME: this should be embedded in the docker/docker.go, -// but we can't because distro policy requires us to -// package a separate dockerinit binary, and that binary needs -// to know its version too. - -var ( - GITCOMMIT string - VERSION string - - IAMSTATIC string // whether or not Docker itself was compiled statically via ./hack/make.sh binary ("true" or not "true") - INITSHA1 string // sha1sum of separate static dockerinit, if Docker itself was compiled dynamically via ./hack/make.sh dynbinary - INITPATH string // custom location to search for a valid dockerinit binary (available for packagers as a last resort escape hatch) -) diff --git a/docs/Dockerfile b/docs/Dockerfile index ad23d33896..dd61fa8df0 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,86 +1,67 @@ # # See the top level Makefile in https://github.com/docker/docker for usage. # -FROM debian:jessie +FROM docs/base:latest MAINTAINER Sven Dowideit (@SvenDowideit) -RUN apt-get update \ - && apt-get install -y \ - gettext \ - git \ - libssl-dev \ - make \ - python-dev \ - python-pip \ - python-setuptools \ - vim-tiny +# TODO: need the full repo source to get the git version info +COPY . /src -RUN pip install mkdocs +# Reset the /docs dir so we can replace the theme meta with the new repo's git info +RUN git reset --hard -# add MarkdownTools to get transclusion -# (future development) -#RUN easy_install -U setuptools -#RUN pip install MarkdownTools2 +# Then copy the desired docs into the /docs/sources/ dir +COPY ./sources/ /docs/sources -# this version works, the current versions fail in different ways -RUN pip install awscli==1.4.4 pyopenssl==0.12 +COPY ./VERSION VERSION -# get my sitemap.xml branch of mkdocs and use that for now -# commit hash of the newest commit of SvenDowideit/mkdocs on -# docker-markdown-merge branch, it is used to break docker cache -# see: https://github.com/SvenDowideit/mkdocs/tree/docker-markdown-merge -RUN git clone -b docker-markdown-merge https://github.com/SvenDowideit/mkdocs \ - && cd mkdocs/ \ - && git checkout ad32549c452963b8854951d6783f4736c0f7c5d5 \ - && ./setup.py install +# adding the image spec will require Docker 1.5 and `docker build -f docs/Dockerfile .` +#COPY ./image/spec/v1.md /docs/sources/reference/image-spec-v1.md -COPY . /docs -COPY MAINTAINERS /docs/sources/humans.txt -WORKDIR /docs - -RUN VERSION=$(cat VERSION) \ - && MAJOR_MINOR="${VERSION%.*}" \ - && for i in $(seq $MAJOR_MINOR -0.1 1.0); do \ - echo "
  • Version v$i
  • "; \ - done > sources/versions.html_fragment \ - && GIT_BRANCH=$(cat GIT_BRANCH) \ - && GITCOMMIT=$(cat GITCOMMIT) \ - && AWS_S3_BUCKET=$(cat AWS_S3_BUCKET) \ - && BUILD_DATE=$(date) \ - && sed -i "s/\$VERSION/$VERSION/g" theme/mkdocs/base.html \ - && sed -i "s/\$MAJOR_MINOR/v$MAJOR_MINOR/g" theme/mkdocs/base.html \ - && sed -i "s/\$GITCOMMIT/$GITCOMMIT/g" theme/mkdocs/base.html \ - && sed -i "s/\$GIT_BRANCH/$GIT_BRANCH/g" theme/mkdocs/base.html \ - && sed -i "s/\$BUILD_DATE/$BUILD_DATE/g" theme/mkdocs/base.html \ - && sed -i "s/\$AWS_S3_BUCKET/$AWS_S3_BUCKET/g" theme/mkdocs/base.html - -EXPOSE 8000 - -RUN cd sources && rgrep --files-with-matches '{{ include ".*" }}' | xargs sed -i~ 's/{{ include "\(.*\)" }}/cat include\/\1/ge' - -CMD ["mkdocs", "serve"] - -# Initial Dockerfile driven documenation aggregation -# Sven plans to move each Dockerfile into the respective repository +# TODO: don't do this - look at merging the yml file in build.sh +COPY ./mkdocs.yml mkdocs.yml +COPY ./s3_website.json s3_website.json +COPY ./release.sh release.sh # Docker Swarm -#ADD https://raw.githubusercontent.com/docker/swarm/master/userguide.md /docs/sources/swarm/README.md -#ADD https://raw.githubusercontent.com/docker/swarm/master/discovery/README.md /docs/sources/swarm/discovery.md -#ADD https://raw.githubusercontent.com/docker/swarm/master/api/README.md /docs/sources/swarm/API.md -#ADD https://raw.githubusercontent.com/docker/swarm/master/scheduler/filter/README.md /docs/sources/swarm/scheduler/filter.md -#ADD https://raw.githubusercontent.com/docker/swarm/master/scheduler/strategy/README.md /docs/sources/swarm/scheduler/strategy.md +#ADD https://raw.githubusercontent.com/docker/swarm/master/docs/mkdocs.yml /docs/mkdocs-swarm.yml +ADD https://raw.githubusercontent.com/docker/swarm/master/docs/index.md /docs/sources/swarm/index.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/swarm/index.md +ADD https://raw.githubusercontent.com/docker/swarm/master/discovery/README.md /docs/sources/swarm/discovery.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/swarm/discovery.md +ADD https://raw.githubusercontent.com/docker/swarm/master/api/README.md /docs/sources/swarm/API.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/swarm/API.md +ADD https://raw.githubusercontent.com/docker/swarm/master/scheduler/filter/README.md /docs/sources/swarm/scheduler/filter.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/swarm/scheduler/filter.md +ADD https://raw.githubusercontent.com/docker/swarm/master/scheduler/strategy/README.md /docs/sources/swarm/scheduler/strategy.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/swarm/scheduler/strategy.md # Docker Machine -# ADD https://raw.githubusercontent.com/docker/machine/master/docs/dockermachine.md /docs/sources/machine/userguide.md +#ADD https://raw.githubusercontent.com/docker/machine/master/docs/mkdocs.yml /docs/mkdocs-machine.yml +ADD https://raw.githubusercontent.com/docker/machine/master/docs/index.md /docs/sources/machine/index.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/machine/index.md # Docker Compose -# ADD https://raw.githubusercontent.com/docker/fig/master/docs/index.md /docs/sources/compose/userguide.md -# ADD https://raw.githubusercontent.com/docker/fig/master/docs/install.md /docs/sources/compose/install.md -# ADD https://raw.githubusercontent.com/docker/fig/master/docs/cli.md /docs/sources/compose/cli.md -# ADD https://raw.githubusercontent.com/docker/fig/master/docs/yml.md /docs/sources/compose/yml.md +#ADD https://raw.githubusercontent.com/docker/compose/master/docs/mkdocs.yml /docs/mkdocs-compose.yml +ADD https://raw.githubusercontent.com/docker/compose/master/docs/index.md /docs/sources/compose/index.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/index.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/install.md /docs/sources/compose/install.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/install.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/cli.md /docs/sources/compose/cli.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/cli.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/yml.md /docs/sources/compose/yml.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/yml.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/env.md /docs/sources/compose/env.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/env.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/completion.md /docs/sources/compose/completion.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/completion.md -# add the project docs from the `mkdocs-.yml` files -# RUN cd /docs && ./build.sh +ADD https://raw.githubusercontent.com/docker/compose/master/docs/django.md /docs/sources/compose/django.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/django.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/rails.md /docs/sources/compose/rails.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/rails.md +ADD https://raw.githubusercontent.com/docker/compose/master/docs/wordpress.md /docs/sources/compose/wordpress.md +RUN sed -i.old '1s;^;no_version_dropdown: true;' /docs/sources/compose/wordpress.md -# remove `^---*` lines from md's -# RUN cd /docs/sources && find . -name "*.md" | xargs sed -i~ -n '/^---*/!p' +# Then build everything together, ready for mkdocs +RUN /docs/build.sh diff --git a/docs/MAINTAINERS b/docs/MAINTAINERS deleted file mode 100644 index ecf56752c2..0000000000 --- a/docs/MAINTAINERS +++ /dev/null @@ -1,3 +0,0 @@ -Fred Lifton (@fredlf) -James Turnbull (@jamtur01) -Sven Dowideit (@SvenDowideit) diff --git a/docs/README.md b/docs/README.md index 3b471555cd..5feb496a73 100755 --- a/docs/README.md +++ b/docs/README.md @@ -1,159 +1,282 @@ # Docker Documentation -The source for Docker documentation is here under `sources/` and uses extended -Markdown, as implemented by [MkDocs](http://mkdocs.org). +The source for Docker documentation is in this directory under `sources/`. Our +documentation uses extended Markdown, as implemented by +[MkDocs](http://mkdocs.org). The current release of the Docker documentation +resides on [http://docs.docker.com](http://docs.docker.com). -The HTML files are built and hosted on `https://docs.docker.com`, and update -automatically after each change to the master or release branch of [Docker on -GitHub](https://github.com/docker/docker) thanks to post-commit hooks. The -`docs` branch maps to the "latest" documentation and the `master` (unreleased -development) branch maps to the "master" documentation. +## Understanding the documentation branches and processes -## Contributing +Docker has two primary branches for documentation: -Be sure to follow the [contribution guidelines](../CONTRIBUTING.md). -In particular, [remember to sign your work!](../CONTRIBUTING.md#sign-your-work) +| Branch | Description | URL (published via commit-hook) | +|----------|--------------------------------|------------------------------------------------------------------------------| +| `docs` | Official release documentation | [http://docs.docker.com](http://docs.docker.com) | +| `master` | Merged but unreleased development work | [http://docs.master.dockerproject.com](http://docs.master.dockerproject.com) | -## Getting Started +Additions and updates to upcoming releases are made in a feature branch off of +the `master` branch. The Docker maintainers also support a `docs` branch that +contains the last release of documentation. -Docker documentation builds are done in a Docker container, which installs all -the required tools, adds the local `docs/` directory and builds the HTML docs. -It then starts a HTTP server on port 8000 so that you can connect and see your -changes. +After a release, documentation updates are continually merged into `master` as +they occur. This work includes new documentation for forthcoming features, bug +fixes, and other updates. Docker's CI system automatically builds and updates +the `master` documentation after each merge and posts it to +[http://docs.master.dockerproject.com](http://docs.master.dockerproject.com). -In the root of the `docker` source directory: +Periodically, the Docker maintainers update `docs.docker.com` between official +releases of Docker. They do this by cherry-picking commits from `master`, +merging them into `docs`, and then publishing the result. - $ make docs - .... (lots of output) .... - docker run --rm -it -e AWS_S3_BUCKET -p 8000:8000 "docker-docs:master" mkdocs serve - Running at: http://0.0.0.0:8000/ - Live reload enabled. - Hold ctrl+c to quit. +In the rare case where a change is not forward-compatible, changes may be made +on other branches by special arrangement with the Docker maintainers. + +### Quickstart for documentation contributors + +If you are a new or beginner contributor, we encourage you to read through the +[our detailed contributors +guide](https://docs.docker.com/project/who-written-for/). The guide explains in +detail, with examples, how to contribute. If you are an experienced contributor +this quickstart should be enough to get you started. + +The following is the essential workflow for contributing to the documentation: + +1. Fork the `docker/docker` repository. + +2. Clone the repository to your local machine. + +3. Select an issue from `docker/docker` to work on or submit a proposal of your +own. + +4. Create a feature branch from `master` in which to work. + + By basing from `master` your work is automatically included in the next + release. It also allows docs maintainers to easily cherry-pick your changes + into the `docs` release branch. + +4. Modify existing or add new `.md` files to the `docs/sources` directory. + + If you add a new document (`.md`) file, you must also add it to the + appropriate section of the `docs/mkdocs.yml` file in this repository. + + +5. As you work, build the documentation site locally to see your changes. + + The `docker/docker` repository contains a `Dockerfile` and a `Makefile`. + Together, these create a development environment in which you can build and + run a container running the Docker documentation website. To build the + documentation site, enter `make docs` at the root of your `docker/docker` + fork: + + $ make docs + .... (lots of output) .... + docker run --rm -it -e AWS_S3_BUCKET -p 8000:8000 "docker-docs:master" mkdocs serve + Running at: http://0.0.0.0:8000/ + Live reload enabled. + Hold ctrl+c to quit. + + + The build creates an image containing all the required tools, adds the local + `docs/` directory and generates the HTML files. Then, it runs a Docker + container with this image. + + The container exposes port 8000 on the localhost so that you can connect and + see your changes. If you are running Boot2Docker, use the `boot2docker ip` + to get the address of your server. + +6. Check your writing for style and mechanical errors. + + Use our [documentation style + guide](https://docs.docker.com/project/doc-style/) to check style. There are + several [good grammar and spelling online + checkers](http://www.hemingwayapp.com/) that can check your writing + mechanics. + +7. Squash your commits on your branch. + +8. Make a pull request from your fork back to Docker's `master` branch. + +9. Work with the reviewers until your change is approved and merged. + +### Debugging and testing If you have any issues you need to debug, you can use `make docs-shell` and then -run `mkdocs serve` - -## Testing the links - -You can use `make docs-test` to generate a report of missing links that are referenced in -the documentation - there should be none. - -## Adding a new document - -New document (`.md`) files are added to the documentation builds by adding them -to the menu definition in the `docs/mkdocs.yml` file. +run `mkdocs serve`. You can use `make docs-test` to generate a report of missing +links that are referenced in the documentation—there should be none. ## Style guide -If you have questions about how to write for Docker's documentation (e.g., -questions about grammar, syntax, formatting, styling, language, or tone) please -see the [style guide](sources/contributing/docs_style-guide.md). If something -isn't clear in the guide, please submit a PR to help us improve it. +If you have questions about how to write for Docker's documentation, please see +the [style guide](sources/project/doc-style.md). The style guide provides +guidance about grammar, syntax, formatting, styling, language, or tone. If +something isn't clear in the guide, please submit an issue to let us know or +submit a pull request to help us improve it. -## Working using GitHub's file editor -Alternatively, for small changes and typos you might want to use GitHub's built- -in file editor. It allows you to preview your changes right on-line (though -there can be some differences between GitHub Markdown and [MkDocs -Markdown](http://www.mkdocs.org/user-guide/writing-your-docs/)). Just be -careful not to create many commits. And you must still [sign your -work!](../CONTRIBUTING.md#sign-your-work) +## Publishing documentation (for Docker maintainers) -## Branches +To publish Docker's documentation you need to have Docker up and running on your +machine. You'll also need a `docs/awsconfig` file containing the settings you +need to access the AWS bucket you'll be deploying to. -**There are two branches related to editing docs**: `master` and `docs`. You -should always edit the documentation on a local branch of the `master` -branch, and send a PR against `master`. +The process for publishing is to build first to an AWS bucket, verify the build, +and then publish the final release. -That way your fixes will automatically get included in later releases, and docs -maintainers can easily cherry-pick your changes into the `docs` release branch. -In the rare case where your change is not forward-compatible, you may need to -base your changes on the `docs` branch. +1. Have Docker installed and running on your machine. -Also, now that we have a `docs` branch, we can keep the -[http://docs.docker.com](http://docs.docker.com) docs up to date with any bugs -found between Docker code releases. +2. Ask the core maintainers for the `awsconfig` file. -> **Warning**: When *reading* the docs, the -> [http://docs-stage.docker.com](http://docs-stage.docker.com) documentation may -> include features not yet part of any official Docker release. The `beta-docs` -> site should be used only for understanding bleeding-edge development and -> `docs.docker.com` (which points to the `docs` branch`) should be used for the -> latest official release. +3. Copy the `awsconfig` file to the `docs/` directory. -## Publishing Documentation + The `awsconfig` file contains the profiles of the S3 buckets for our + documentation sites. (If needed, the release script creates an S3 bucket and + pushes the files to it.) Each profile has this format: -To publish a copy of the documentation you need to have Docker up and running on -your machine. You'll also need a `docs/awsconfig` file containing the settings -you need to access the AWS bucket you'll be deploying to. + [profile dowideit-docs] + aws_access_key_id = IHOIUAHSIDH234rwf.... + aws_secret_access_key = OIUYSADJHLKUHQWIUHE...... + region = ap-southeast-2 -The release script will create an s3 if needed, and will then push the files to it. + The `profile` name must be the same as the name of the bucket you are + deploying to. - [profile dowideit-docs] - aws_access_key_id = IHOIUAHSIDH234rwf.... - aws_secret_access_key = OIUYSADJHLKUHQWIUHE...... - region = ap-southeast-2 +4. Call the `make` from the `docker` directory. -The `profile` name must be the same as the name of the bucket you are deploying -to - which you call from the `docker` directory: + $ make AWS_S3_BUCKET=dowideit-docs docs-release - make AWS_S3_BUCKET=dowideit-docs docs-release + This publishes _only_ to the `http://bucket-url/v1.2/` version of the + documentation. -This will publish _only_ to the `http://bucket-url/v1.2/` version of the -documentation. +5. If you're publishing the current release's documentation, you need to also +update the root docs pages by running -If you're publishing the current release's documentation, you need to -also update the root docs pages by running + $ make AWS_S3_BUCKET=dowideit-docs BUILD_ROOT=yes docs-release - make AWS_S3_BUCKET=dowideit-docs BUILD_ROOT=yes docs-release +### Errors publishing using Boot2Docker -> **Note:** -> if you are using Boot2Docker on OSX and the above command returns an error, -> `Post http:///var/run/docker.sock/build?rm=1&t=docker-docs%3Apost-1.2.0-docs_update-2: -> dial unix /var/run/docker.sock: no such file or directory', you need to set the Docker -> host. Run `$(boot2docker shellinit)` to see the correct variable to set. The command -> will return the full `export` command, so you can just cut and paste. +Sometimes, in a Boot2Docker environment, the publishing procedure returns this +error: + + Post http:///var/run/docker.sock/build?rm=1&t=docker-docs%3Apost-1.2.0-docs_update-2: + dial unix /var/run/docker.sock: no such file or directory. + +If this happens, set the Docker host. Run the following command to set the +variables in your shell: + + $ eval "$(boot2docker shellinit)" ## Cherry-picking documentation changes to update an existing release. -Whenever the core team makes a release, they publish the documentation based -on the `release` branch (which is copied into the `docs` branch). The -documentation team can make updates in the meantime, by cherry-picking changes -from `master` into any of the docs branches. +Whenever the core team makes a release, they publish the documentation based on +the `release` branch. At that time, the `release` branch is copied into the +`docs` branch. The documentation team makes updates between Docker releases by +cherry-picking changes from `master` into any of the documentation branches. +Typically, we cherry-pick into the `docs` branch. -For example, to update the current release's docs: +For example, to update the current release's docs, do the following: - git fetch upstream - git checkout -b post-1.2.0-docs-update-1 upstream/docs - # Then go through the Merge commit linked to PR's (making sure they apply - to that release) - # see https://github.com/docker/docker/commits/master - git cherry-pick -x fe845c4 - # Repeat until you have cherry picked everything you will propose to be merged - git push upstream post-1.2.0-docs-update-1 +1. Go to your `docker/docker` fork and get the latest from master. -Then make a pull request to merge into the `docs` branch, __NOT__ into master. + $ git fetch upstream + +2. Checkout a new branch based on `upstream/docs`. -Once the PR has the needed `LGTM`s, merge it, then publish to our beta server -to test: + You should give your new branch a descriptive name. - git fetch upstream - git checkout docs - git reset --hard upstream/docs - make AWS_S3_BUCKET=beta-docs.docker.io BUILD_ROOT=yes docs-release + $ git checkout -b post-1.2.0-docs-update-1 upstream/docs + +3. In a browser window, open [https://github.com/docker/docker/commits/master]. -Then go to http://beta-docs.docker.io.s3-website-us-west-2.amazonaws.com/ -to view your results and make sure what you published is what you wanted. +4. Locate the merges you want to publish. -When you're happy with it, publish the docs to our live site: + You should only cherry-pick individual commits; do not cherry-pick merge + commits. To minimize merge conflicts, start with the oldest commit and work + your way forward in time. - make AWS_S3_BUCKET=docs.docker.com BUILD_ROOT=yes DISTRIBUTION_ID=C2K6......FL2F docs-release +5. Copy the commit SHA from GitHub. -Test the uncached version of the live docs at http://docs.docker.com.s3-website-us-east-1.amazonaws.com/ +6. Cherry-pick the commit. + + $ git cherry-pick -x fe845c4 + +7. Repeat until you have cherry-picked everything you want to merge. + +8. Push your changes to your fork. + + $ git push origin post-1.2.0-docs-update-1 + +9. Make a pull request to merge into the `docs` branch. + + Do __NOT__ merge into `master`. + +10. Have maintainers review your pull request. + +11. Once the PR has the needed "LGTMs", merge it on GitHub. + +12. Return to your local fork and make sure you are still on the `docs` branch. + + $ git checkout docs + +13. Fetch your merged pull request from `docs`. + + $ git fetch upstream/docs + +14. Ensure your branch is clean and set to the latest. + + $ git reset --hard upstream/docs -Note that the new docs will not appear live on the site until the cache (a complex, -distributed CDN system) is flushed. The `make docs-release` command will do this -_if_ the `DISTRIBUTION_ID` is set to the Cloudfront distribution ID (ask the meta -team) - this will take at least 15 minutes to run and you can check its progress -with the CDN Cloudfront Chrome addin. +15. Copy the `awsconfig` file into the `docs` directory. + +16. Make the beta documentation + + $ make AWS_S3_BUCKET=beta-docs.docker.io BUILD_ROOT=yes docs-release + +17. Open [the beta +website](http://beta-docs.docker.io.s3-website-us-west-2.amazonaws.com/) site +and make sure what you published is correct. + +19. When you're happy with your content, publish the docs to our live site: + + $ make AWS_S3_BUCKET=docs.docker.com BUILD_ROOT=yes +DISTRIBUTION_ID=C2K6......FL2F docs-release + +20. Test the uncached version of the live docs at [http://docs.docker.com.s3-website-us-east-1.amazonaws.com/] + + +### Caching and the docs + +New docs do not appear live on the site until the cache (a complex, distributed +CDN system) is flushed. The `make docs-release` command flushes the cache _if_ +the `DISTRIBUTION_ID` is set to the Cloudfront distribution ID. The cache flush +can take at least 15 minutes to run and you can check its progress with the CDN +Cloudfront Purge Tool Chrome app. + +## Removing files from the docs.docker.com site + +Sometimes it becomes necessary to remove files from the historical published documentation. +The most reliable way to do this is to do it directly using `aws s3` commands running in a +docs container: + +Start the docs container like `make docs-shell`, but bind mount in your `awsconfig`: + +``` +docker run --rm -it -v $(CURDIR)/docs/awsconfig:/docs/awsconfig docker-docs:master bash +``` + +and then the following example shows deleting 2 documents from s3, and then requesting the +CloudFlare cache to invalidate them: + + +``` +export BUCKET BUCKET=docs.docker.com +export AWS_CONFIG_FILE=$(pwd)/awsconfig +aws s3 --profile $BUCKET ls s3://$BUCKET +aws s3 --profile $BUCKET rm s3://$BUCKET/v1.0/reference/api/docker_io_oauth_api/index.html +aws s3 --profile $BUCKET rm s3://$BUCKET/v1.1/reference/api/docker_io_oauth_api/index.html + +aws configure set preview.cloudfront true +export DISTRIBUTION_ID=YUTIYUTIUTIUYTIUT +aws cloudfront create-invalidation --profile docs.docker.com --distribution-id $DISTRIBUTION_ID --invalidation-batch '{"Paths":{"Quantity":1, "Items":["/v1.0/reference/api/docker_io_oauth_api/"]},"CallerReference":"6Mar2015sventest1"}' +aws cloudfront create-invalidation --profile docs.docker.com --distribution-id $DISTRIBUTION_ID --invalidation-batch '{"Paths":{"Quantity":1, "Items":["/v1.1/reference/api/docker_io_oauth_api/"]},"CallerReference":"6Mar2015sventest1"}' +``` diff --git a/docs/build.sh b/docs/build.sh deleted file mode 100755 index 033820c67d..0000000000 --- a/docs/build.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -set -e - -set -o pipefail - -usage() { - exit 1 -} - - -extrafiles=($(find . -name "mkdocs-*.yml")) -extralines=() - -for file in "${extrafiles[@]}" -do - #echo "LOADING $file" - while read line - do - if [[ "$line" != "" ]] - then - extralines+=("$line") - - #echo "LINE (${#extralines[@]}): $line" - fi - done < <(cat "$file") -done - -#echo "extra count (${#extralines[@]})" -mv mkdocs.yml mkdocs.yml.bak -echo "# Generated mkdocs.yml from ${extrafiles[@]}" -echo "# Generated mkdocs.yml from ${extrafiles[@]}" > mkdocs.yml - -while read line -do - menu=$(echo $line | sed "s/^- \['\([^']*\)', '\([^']*\)'.*/\2/") - if [[ "$menu" != "**HIDDEN**" ]] - # or starts with a '#'? - then - if [[ "$lastmenu" != "" && "$lastmenu" != "$menu" ]] - then - # insert extra elements here - for extra in "${extralines[@]}" - do - #echo "EXTRA $extra" - extramenu=$(echo $extra | sed "s/^- \['\([^']*\)', '\([^']*\)'.*/\2/") - if [[ "$extramenu" == "$lastmenu" ]] - then - echo "$extra" >> mkdocs.yml - fi - done - #echo "# JUST FINISHED $lastmenu" - fi - lastmenu="$menu" - fi - echo "$line" >> mkdocs.yml - -done < <(cat "mkdocs.yml.bak") diff --git a/docs/docs-update.py b/docs/docs-update.py deleted file mode 100755 index c40da773e3..0000000000 --- a/docs/docs-update.py +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env python - -# -# Sven's quick hack script to update the documentation -# -# call with: -# ./docs/update.py /usr/bin/docker -# - -import datetime -import re -from sys import argv -import subprocess -import os -import os.path - -script, docker_cmd = argv - -date_string = datetime.date.today().strftime('%B %Y') - - -def print_usage(outtext, docker_cmd, command): - try: - help_string = subprocess.check_output( - "".join((docker_cmd, " ", command, " --help")), - stderr=subprocess.STDOUT, - shell=True - ) - except subprocess.CalledProcessError, e: - help_string = e.output - for l in str(help_string).strip().split("\n"): - l = l.rstrip() - if l == '': - outtext.write("\n") - else: - # `docker --help` tells the user the path they called it with - l = re.sub(docker_cmd, "docker", l) - outtext.write(" {}\n".format(l)) - outtext.write("\n") - - -# TODO: look for an complain about any missing commands -def update_cli_reference(): - originalFile = "docs/sources/reference/commandline/cli.md" - os.rename(originalFile, originalFile+".bak") - - intext = open("{}.bak".format(originalFile), "r") - outtext = open(originalFile, "w") - - mode = 'p' - space = " " - command = "" - # 2 mode line-by line parser - for line in intext: - if mode == 'p': - # Prose - match = re.match("( \s*)Usage: docker ([a-z]+)", line) - if match: - # the beginning of a Docker command usage block - space = match.group(1) - command = match.group(2) - mode = 'c' - else: - match = re.match("( \s*)Usage of .*docker.*:", line) - if match: - # the beginning of the Docker --help usage block - space = match.group(1) - command = "" - mode = 'c' - else: - outtext.write(line) - else: - # command usage block - match = re.match("("+space+")(.*)|^$", line) - if not match: - # The end of the current usage block - # Shell out to run docker to see the new output - print_usage(outtext, docker_cmd, command) - outtext.write(line) - mode = 'p' - if mode == 'c': - print_usage(outtext, docker_cmd, command) - - -def update_man_pages(): - cmds = [] - try: - help_string = subprocess.check_output( - "".join((docker_cmd)), - stderr=subprocess.STDOUT, - shell=True - ) - except subprocess.CalledProcessError, e: - help_string = e.output - for l in str(help_string).strip().split("\n"): - l = l.rstrip() - if l != "": - match = re.match(" (.*?) .*", l) - if match: - cmds.append(match.group(1)) - - desc_re = re.compile( - r".*# DESCRIPTION(.*?)# (OPTIONS|EXAMPLES?).*", - re.MULTILINE | re.DOTALL - ) - - options_re = re.compile( - r".*# OPTIONS(.*?)# (HISTORY|EXAMPLES?).*", - re.MULTILINE | re.DOTALL - ) - - example_re = re.compile( - r".*# EXAMPLES?(.*)# HISTORY.*", - re.MULTILINE | re.DOTALL - ) - - history_re = re.compile( - r".*# HISTORY(.*)", - re.MULTILINE | re.DOTALL - ) - - for command in cmds: - print "COMMAND: "+command - if command == "": - print "SKIPPING" - continue - history = "" - description = "" - original_options = "" - examples = "" - if os.path.isfile("docs/man/docker-"+command+".1.md"): - intext = open("docs/man/docker-"+command+".1.md", "r") - txt = intext.read() - intext.close() - match = desc_re.match(txt) - if match: - description = match.group(1) - match = options_re.match(txt) - if match: - original_options = match.group(1) - #print "MATCHED OPTIONS\n" + original_options - match = example_re.match(txt) - if match: - examples = match.group(1) - match = history_re.match(txt) - if match: - history = match.group(1).strip() - - usage = "" - usage_description = "" - params = {} - key_params = {} - - try: - help_string = subprocess.check_output( - "".join((docker_cmd, " ", command, " --help")), - stderr=subprocess.STDOUT, - shell=True - ) - except subprocess.CalledProcessError, e: - help_string = e.output - - last_key = "" - for l in str(help_string).split("\n"): - l = l.rstrip() - if l != "": - match = re.match("Usage: docker {}(.*)".format(command), l) - if match: - usage = match.group(1).strip() - else: - match = re.match(" (-+)(.*) \s+(.*)", l) - if match: - last_key = match.group(2).rstrip() - key_params[last_key] = match.group(1)+last_key - params[last_key] = match.group(3) - else: - if last_key != "": - params[last_key] = "{}\n{}".format(params[last_key], l) - else: - if usage_description != "": - usage_description = usage_description + "\n" - usage_description = usage_description + l - - # replace [OPTIONS] with the list of params - options = "" - match = re.match("\[OPTIONS\]\s*(.*)", usage) - if match: - usage = match.group(1) - - new_usage = "" - # TODO: sort without the `-`'s - for key in sorted(params.keys(), key=lambda s: s.lower()): - # split on commas, remove --?.*=.*, put in *'s mumble - flags = [] - ps = [] - opts = [] - for k in key_params[key].split(","): - match = re.match("(-+)([A-Za-z-0-9]*)(?:=(.*))?", k.lstrip()) - if match: - flags.append("{}{}".format(match.group(1), match.group(2))) - p = "**{}{}**".format(match.group(1), match.group(2)) - o = "**{}{}**".format(match.group(1), match.group(2)) - if match.group(3): - val = match.group(3) - if val == "\"\"": - val = match.group(2).upper() - p = "{}[=*{}*]".format(p, val) - val = match.group(3) - if val in ("true", "false"): - params[key] = params[key].rstrip() - if not params[key].endswith('.'): - params[key] = params[key]+ "." - params[key] = "{} The default is *{}*.".format(params[key], val) - val = "*true*|*false*" - o = "{}={}".format(o, val) - ps.append(p) - opts.append(o) - else: - print "nomatch:{}".format(k) - new_usage = "{}\n[{}]".format(new_usage, "|".join(ps)) - - options = "{}{}\n {}\n\n".format(options, ", ".join(opts), params[key]) - - # look at the original options documentation and if its hand written, add it too. - print "SVEN_re: "+flags[0] - singleoption_re = re.compile( - r".*[\r\n]\*\*"+flags[0]+"\*\*([^\r\n]*)[\r\n]+(.*?)[\r\n](\*\*-|# [A-Z]|\*\*[A-Z]+\*\*).*", - #r""+flags[0]+"(.*)(^\*\*-.*)?", - re.MULTILINE | re.DOTALL - ) - match = singleoption_re.match(original_options) - if match: - info = match.group(2).strip() - print "MATCHED: " + match.group(1).strip() - if info != params[key].strip(): - #info = re.sub(params[key].strip(), '', info, flags=re.MULTILINE) - print "INFO changed: " +info - options = "{} {}\n\n".format(options, info.strip()) - - if new_usage != "": - new_usage = "{}\n".format(new_usage.strip()) - usage = new_usage + usage - - outtext = open("docs/man/docker-{}.1.md".format(command), "w") - outtext.write("""% DOCKER(1) Docker User Manuals -% Docker Community -% JUNE 2014 -# NAME -""") - outtext.write("docker-{} - {}\n\n".format(command, usage_description)) - outtext.write("# SYNOPSIS\n**docker {}**\n{}\n\n".format(command, usage)) - if description != "": - outtext.write("# DESCRIPTION{}".format(description)) - if options == "": - options = "There are no available options.\n\n" - outtext.write("# OPTIONS\n{}".format(options)) - if examples != "": - outtext.write("# EXAMPLES{}".format(examples)) - outtext.write("# HISTORY\n") - if history != "": - outtext.write("{}\n".format(history)) - recent_history_re = re.compile( - ".*{}.*".format(date_string), - re.MULTILINE | re.DOTALL - ) -# if not recent_history_re.match(history): -# outtext.write("{}, updated by Sven Dowideit \n".format(date_string)) - outtext.close() - -# main -update_cli_reference() -update_man_pages() diff --git a/docs/docvalidate.py b/docs/docvalidate.py deleted file mode 100755 index 582b8521da..0000000000 --- a/docs/docvalidate.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python - -""" I honestly don't even know how the hell this works, just use it. """ -__author__ = "Scott Stamp " - -from HTMLParser import HTMLParser -from urlparse import urljoin -from sys import setrecursionlimit -import re -import requests - -setrecursionlimit(10000) -root = 'http://localhost:8000' - - -class DataHolder: - - def __init__(self, value=None, attr_name='value'): - self._attr_name = attr_name - self.set(value) - - def __call__(self, value): - return self.set(value) - - def set(self, value): - setattr(self, self._attr_name, value) - return value - - def get(self): - return getattr(self, self._attr_name) - - -class Parser(HTMLParser): - global root - - ids = set() - crawled = set() - anchors = {} - pages = set() - save_match = DataHolder(attr_name='match') - - def __init__(self, origin): - self.origin = origin - HTMLParser.__init__(self) - - def handle_starttag(self, tag, attrs): - attrs = dict(attrs) - if 'href' in attrs: - href = attrs['href'] - - if re.match('^{0}|\/|\#[\S]{{1,}}'.format(root), href): - if self.save_match(re.search('.*\#(.*?)$', href)): - if self.origin not in self.anchors: - self.anchors[self.origin] = set() - self.anchors[self.origin].add( - self.save_match.match.groups(1)[0]) - - url = urljoin(root, href) - - if url not in self.crawled and not re.match('^\#', href): - self.crawled.add(url) - Parser(url).feed(requests.get(url).content) - - if 'id' in attrs: - self.ids.add(attrs['id']) - # explicit references - if 'name' in attrs: - self.ids.add(attrs['name']) - - -r = requests.get(root) -parser = Parser(root) -parser.feed(r.content) -for anchor in sorted(parser.anchors): - if not re.match('.*/\#.*', anchor): - for anchor_name in parser.anchors[anchor]: - if anchor_name not in parser.ids: - print 'Missing - ({0}): #{1}'.format( - anchor.replace(root, ''), anchor_name) diff --git a/docs/man/Dockerfile.5.md b/docs/man/Dockerfile.5.md index dd1d8b2ce1..7f884888e2 100644 --- a/docs/man/Dockerfile.5.md +++ b/docs/man/Dockerfile.5.md @@ -6,12 +6,14 @@ Dockerfile - automate the steps of creating a Docker image # INTRODUCTION + The **Dockerfile** is a configuration file that automates the steps of creating a Docker image. It is similar to a Makefile. Docker reads instructions from the **Dockerfile** to automate the steps otherwise performed manually to create an -image. To build an image, create a file called **Dockerfile**. The -**Dockerfile** describes the steps taken to assemble the image. When the -**Dockerfile** has been created, call the **docker build** command, using the +image. To build an image, create a file called **Dockerfile**. + +The **Dockerfile** describes the steps taken to assemble the image. When the +**Dockerfile** has been created, call the `docker build` command, using the path of directory that contains **Dockerfile** as the argument. # SYNOPSIS @@ -20,7 +22,7 @@ INSTRUCTION arguments For example: -FROM image + FROM image # DESCRIPTION @@ -29,198 +31,292 @@ A Dockerfile is similar to a Makefile. # USAGE -**sudo docker build .** - -- runs the steps and commits them, building a final image - The path to the source repository defines where to find the context of the - build. The build is run by the docker daemon, not the CLI. The whole - context must be transferred to the daemon. The Docker CLI reports - "Sending build context to Docker daemon" when the context is sent to the daemon. - -**sudo docker build -t repository/tag .** - -- specifies a repository and tag at which to save the new image if the build - succeeds. The Docker daemon runs the steps one-by-one, committing the result - to a new image if necessary before finally outputting the ID of the new - image. The Docker daemon automatically cleans up the context it is given. + sudo docker build . + + -- Runs the steps and commits them, building a final image. + The path to the source repository defines where to find the context of the + build. The build is run by the Docker daemon, not the CLI. The whole + context must be transferred to the daemon. The Docker CLI reports + `"Sending build context to Docker daemon"` when the context is sent to the + daemon. + + ``` + sudo docker build -t repository/tag . + ``` + + -- specifies a repository and tag at which to save the new image if the build + succeeds. The Docker daemon runs the steps one-by-one, committing the result + to a new image if necessary, before finally outputting the ID of the new + image. The Docker daemon automatically cleans up the context it is given. + + Docker re-uses intermediate images whenever possible. This significantly + accelerates the *docker build* process. -Docker re-uses intermediate images whenever possible. This significantly -accelerates the *docker build* process. - # FORMAT -**FROM image** -or -**FROM image:tag** - -- The FROM instruction sets the base image for subsequent instructions. A - valid Dockerfile must have FROM as its first instruction. The image can be any - valid image. It is easy to start by pulling an image from the public - repositories. - -- FROM must be he first non-comment instruction in Dockerfile. - -- FROM may appear multiple times within a single Dockerfile in order to create - multiple images. Make a note of the last image id output by the commit before - each new FROM command. - -- If no tag is given to the FROM instruction, latest is assumed. If the used - tag does not exist, an error is returned. + `FROM image` + + `FROM image:tag` + + -- The **FROM** instruction sets the base image for subsequent instructions. A + valid Dockerfile must have **FROM** as its first instruction. The image can be any + valid image. It is easy to start by pulling an image from the public + repositories. + + -- **FROM** must be the first non-comment instruction in Dockerfile. + + -- **FROM** may appear multiple times within a single Dockerfile in order to create + multiple images. Make a note of the last image ID output by the commit before + each new **FROM** command. + + -- If no tag is given to the **FROM** instruction, latest is assumed. If the + used tag does not exist, an error is returned. **MAINTAINER** - --The MAINTAINER instruction sets the Author field for the generated images. + -- **MAINTAINER** sets the Author field for the generated images. **RUN** - --RUN has two forms: - **RUN ** - -- (the command is run in a shell - /bin/sh -c) - **RUN ["executable", "param1", "param2"]** - --The above is executable form. - --The RUN instruction executes any commands in a new layer on top of the - current image and commits the results. The committed image is used for the next - step in Dockerfile. - --Layering RUN instructions and generating commits conforms to the core - concepts of Docker where commits are cheap and containers can be created from - any point in the history of an image. This is similar to source control. The - exec form makes it possible to avoid shell string munging. The exec form makes - it possible to RUN commands using a base image that does not contain /bin/sh. + -- **RUN** has two forms: + + ``` + # the command is run in a shell - /bin/sh -c + RUN + + # Executable form + RUN ["executable", "param1", "param2"] + ``` + + + -- The **RUN** instruction executes any commands in a new layer on top of the current + image and commits the results. The committed image is used for the next step in + Dockerfile. + + -- Layering **RUN** instructions and generating commits conforms to the core + concepts of Docker where commits are cheap and containers can be created from + any point in the history of an image. This is similar to source control. The + exec form makes it possible to avoid shell string munging. The exec form makes + it possible to **RUN** commands using a base image that does not contain `/bin/sh`. + + Note that the exec form is parsed as a JSON array, which means that you must + use double-quotes (") around words not single-quotes ('). **CMD** - --CMD has three forms: - **CMD ["executable", "param1", "param2"]** This is the preferred form, the - exec form. - **CMD ["param1", "param2"]** This command provides default parameters to - ENTRYPOINT) - **CMD command param1 param2** This command is run as a shell. - --There can be only one CMD in a Dockerfile. If more than one CMD is listed, only - the last CMD takes effect. - The main purpose of a CMD is to provide defaults for an executing container. + -- **CMD** has three forms: + + ``` + # Executable form + CMD ["executable", "param1", "param2"]` + + # Provide default arguments to ENTRYPOINT + CMD ["param1", "param2"]` + + # the command is run in a shell - /bin/sh -c + CMD command param1 param2 + ``` + + -- There can be only one **CMD** in a Dockerfile. If more than one **CMD** is listed, only + the last **CMD** takes effect. + The main purpose of a **CMD** is to provide defaults for an executing container. These defaults may include an executable, or they can omit the executable. If - they omit the executable, an ENTRYPOINT must be specified. - When used in the shell or exec formats, the CMD instruction sets the command to + they omit the executable, an **ENTRYPOINT** must be specified. + When used in the shell or exec formats, the **CMD** instruction sets the command to be executed when running the image. - If you use the shell form of the CMD, the executes in /bin/sh -c: - **FROM ubuntu** - **CMD echo "This is a test." | wc -** - If you run without a shell, then you must express the command as a + If you use the shell form of the **CMD**, the `` executes in `/bin/sh -c`: + + Note that the exec form is parsed as a JSON array, which means that you must + use double-quotes (") around words not single-quotes ('). + + ``` + FROM ubuntu + CMD echo "This is a test." | wc - + ``` + + -- If you run **command** without a shell, then you must express the command as a JSON array and give the full path to the executable. This array form is the - preferred form of CMD. All additional parameters must be individually expressed + preferred form of **CMD**. All additional parameters must be individually expressed as strings in the array: - **FROM ubuntu** - **CMD ["/usr/bin/wc","--help"]** - To make the container run the same executable every time, use ENTRYPOINT in - combination with CMD. - If the user specifies arguments to docker run, the specified commands override - the default in CMD. - Do not confuse **RUN** with **CMD**. RUN runs a command and commits the result. CMD - executes nothing at build time, but specifies the intended command for the - image. + + ``` + FROM ubuntu + CMD ["/usr/bin/wc","--help"] + ``` + + -- To make the container run the same executable every time, use **ENTRYPOINT** in + combination with **CMD**. + If the user specifies arguments to `docker run`, the specified commands + override the default in **CMD**. + Do not confuse **RUN** with **CMD**. **RUN** runs a command and commits the result. + **CMD** executes nothing at build time, but specifies the intended command for + the image. + +**LABEL** + -- `LABEL [=] [[=] ...]` + The **LABEL** instruction adds metadata to an image. A **LABEL** is a + key-value pair. To include spaces within a **LABEL** value, use quotes and + backslashes as you would in command-line parsing. + + ``` + LABEL "com.example.vendor"="ACME Incorporated" + ``` + + An image can have more than one label. To specify multiple labels, separate + each key-value pair by a space. + + Labels are additive including `LABEL`s in `FROM` images. As the system + encounters and then applies a new label, new `key`s override any previous + labels with identical keys. + + To display an image's labels, use the `docker inspect` command. **EXPOSE** - --**EXPOSE [...]** - The **EXPOSE** instruction informs Docker that the container listens on the - specified network ports at runtime. Docker uses this information to - interconnect containers using links, and to set up port redirection on the host - system. + -- `EXPOSE [...]` + The **EXPOSE** instruction informs Docker that the container listens on the + specified network ports at runtime. Docker uses this information to + interconnect containers using links, and to set up port redirection on the host + system. **ENV** - --**ENV ** - The ENV instruction sets the environment variable to - the value . This value is passed to all future - RUN, ENTRYPOINT, and CMD instructions. This is - functionally equivalent to prefixing the command with **=**. The - environment variables that are set with ENV persist when a container is run - from the resulting image. Use docker inspect to inspect these values, and - change them using docker run **--env =.** + -- `ENV ` + The **ENV** instruction sets the environment variable to + the value ``. This value is passed to all future + RUN, **ENTRYPOINT**, and **CMD** instructions. This is + functionally equivalent to prefixing the command with `=`. The + environment variables that are set with **ENV** persist when a container is run + from the resulting image. Use `docker inspect` to inspect these values, and + change them using `docker run --env =`. - Note that setting Setting **ENV DEBIAN_FRONTEND noninteractive** may cause - unintended consequences, because it will persist when the container is run - interactively, as with the following command: **docker run -t -i image bash** + Note that setting "`ENV DEBIAN_FRONTEND noninteractive`" may cause + unintended consequences, because it will persist when the container is run + interactively, as with the following command: `docker run -t -i image bash` **ADD** - --ADD has two forms: - **ADD ... ** - **ADD [""... ""]** This form is required for paths containing - whitespace. - The ADD instruction copies new files, directories - or remote file URLs to the filesystem of the container at path . - Multiple resources may be specified but if they are files or directories - then they must be relative to the source directory that is being built - (the context of the build). The is the absolute path, or path relative - to `WORKDIR`, into which the source is copied inside the target container. - All new files and directories are created with mode 0755 and with the uid - and gid of 0. + -- **ADD** has two forms: + + ``` + ADD + + # Required for paths with whitespace + ADD ["", ""] + ``` + + The **ADD** instruction copies new files, directories + or remote file URLs to the filesystem of the container at path ``. + Multiple `` resources may be specified but if they are files or directories + then they must be relative to the source directory that is being built + (the context of the build). The `` is the absolute path, or path relative + to **WORKDIR**, into which the source is copied inside the target container. + All new files and directories are created with mode 0755 and with the uid + and gid of **0**. **COPY** - --COPY has two forms: - **COPY ... ** - **COPY [""... ""]** This form is required for paths containing - whitespace. - The COPY instruction copies new files from and - adds them to the filesystem of the container at path . The must be - the path to a file or directory relative to the source directory that is - being built (the context of the build) or a remote file URL. The `` is an - absolute path, or a path relative to `WORKDIR`, into which the source will - be copied inside the target container. All new files and directories are - created with mode 0755 and with the uid and gid of 0. + -- **COPY** has two forms: + + ``` + COPY + + # Required for paths with whitespace + COPY ["", ""] + ``` + + The **COPY** instruction copies new files from `` and + adds them to the filesystem of the container at path . The `` must be + the path to a file or directory relative to the source directory that is + being built (the context of the build) or a remote file URL. The `` is an + absolute path, or a path relative to **WORKDIR**, into which the source will + be copied inside the target container. All new files and directories are + created with mode **0755** and with the uid and gid of **0**. **ENTRYPOINT** - --**ENTRYPOINT** has two forms: ENTRYPOINT ["executable", "param1", "param2"] - (This is like an exec, and is the preferred form.) ENTRYPOINT command param1 - param2 (This is running as a shell.) An ENTRYPOINT helps you configure a - container that can be run as an executable. When you specify an ENTRYPOINT, - the whole container runs as if it was only that executable. The ENTRYPOINT - instruction adds an entry command that is not overwritten when arguments are - passed to docker run. This is different from the behavior of CMD. This allows - arguments to be passed to the entrypoint, for instance docker run -d - passes the -d argument to the ENTRYPOINT. Specify parameters either in the - ENTRYPOINT JSON array (as in the preferred exec form above), or by using a CMD - statement. Parameters in the ENTRYPOINT are not overwritten by the docker run - arguments. Parameters specifies via CMD are overwritten by docker run - arguments. Specify a plain string for the ENTRYPOINT, and it will execute in - /bin/sh -c, like a CMD instruction: - FROM ubuntu - ENTRYPOINT wc -l - - This means that the Dockerfile's image always takes stdin as input (that's - what "-" means), and prints the number of lines (that's what "-l" means). To - make this optional but default, use a CMD: - FROM ubuntu - CMD ["-l", "-"] - ENTRYPOINT ["/usr/bin/wc"] + -- **ENTRYPOINT** has two forms: + + ``` + # executable form + ENTRYPOINT ["executable", "param1", "param2"]` + + # run command in a shell - /bin/sh -c + ENTRYPOINT command param1 param2 + ``` + + -- An **ENTRYPOINT** helps you configure a + container that can be run as an executable. When you specify an **ENTRYPOINT**, + the whole container runs as if it was only that executable. The **ENTRYPOINT** + instruction adds an entry command that is not overwritten when arguments are + passed to docker run. This is different from the behavior of CMD. This allows + arguments to be passed to the entrypoint, for instance `docker run -d` + passes the -d argument to the **ENTRYPOINT**. Specify parameters either in the + **ENTRYPOINT** JSON array (as in the preferred exec form above), or by using a **CMD** + statement. Parameters in the **ENTRYPOINT** are not overwritten by the docker run + arguments. Parameters specifies via **CMD** are overwritten by docker run + arguments. Specify a plain string for the **ENTRYPOINT**, and it will execute in + `/bin/sh -c`, like a **CMD** instruction: + + ``` + FROM ubuntu + ENTRYPOINT wc -l - + ``` + + This means that the Dockerfile's image always takes stdin as input (that's + what "-" means), and prints the number of lines (that's what "-l" means). To + make this optional but default, use a **CMD**: + + ``` + FROM ubuntu + CMD ["-l", "-"] + ENTRYPOINT ["/usr/bin/wc"] + ``` **VOLUME** - --**VOLUME ["/data"]** - The VOLUME instruction creates a mount point with the specified name and marks - it as holding externally-mounted volumes from the native host or from other - containers. + -- `VOLUME ["/data"]` + The **VOLUME** instruction creates a mount point with the specified name and marks + it as holding externally-mounted volumes from the native host or from other + containers. **USER** - -- **USER daemon** - The USER instruction sets the username or UID that is used when running the - image. + -- `USER daemon` + The **USER** instruction sets the username or UID that is used when running the + image. -**WORKDIR** - -- **WORKDIR /path/to/workdir** - The WORKDIR instruction sets the working directory for the **RUN**, **CMD**, **ENTRYPOINT**, **COPY** and **ADD** Dockerfile commands that follow it. - It can be used multiple times in a single Dockerfile. Relative paths are defined relative to the path of the previous **WORKDIR** instruction. For example: - **WORKDIR /a WORKDIR b WORKDIR c RUN pwd** - In the above example, the output of the **pwd** command is **a/b/c**. +**WRKDIR** + -- `WORKDIR /path/to/workdir` + The **WORKDIR** instruction sets the working directory for the **RUN**, **CMD**, + **ENTRYPOINT**, **COPY** and **ADD** Dockerfile commands that follow it. It can + be used multiple times in a single Dockerfile. Relative paths are defined + relative to the path of the previous **WORKDIR** instruction. For example: + + ``` + WORKDIR /a + WORKDIR b + WORKDIR c + RUN pwd + ``` + + In the above example, the output of the **pwd** command is **a/b/c**. **ONBUILD** - -- **ONBUILD [INSTRUCTION]** - The ONBUILD instruction adds a trigger instruction to the image, which is - executed at a later time, when the image is used as the base for another - build. The trigger is executed in the context of the downstream build, as - if it had been inserted immediately after the FROM instruction in the - downstream Dockerfile. Any build instruction can be registered as a - trigger. This is useful if you are building an image to be - used as a base for building other images, for example an application build - environment or a daemon to be customized with a user-specific - configuration. For example, if your image is a reusable python - application builder, it requires application source code to be - added in a particular directory, and might require a build script - to be called after that. You can't just call ADD and RUN now, because - you don't yet have access to the application source code, and it - is different for each application build. Providing - application developers with a boilerplate Dockerfile to copy-paste - into their application is inefficient, error-prone, and - difficult to update because it mixes with application-specific code. - The solution is to use **ONBUILD** to register instructions in advance, to - run later, during the next build stage. + -- `ONBUILD [INSTRUCTION]` + The **ONBUILD** instruction adds a trigger instruction to an image. The + trigger is executed at a later time, when the image is used as the base for + another build. Docker executes the trigger in the context of the downstream + build, as if the trigger existed immediately after the **FROM** instruction in + the downstream Dockerfile. + + You can register any build instruction as a trigger. A trigger is useful if + you are defining an image to use as a base for building other images. For + example, if you are defining an application build environment or a daemon that + is customized with a user-specific configuration. + + Consider an image intended as a reusable python application builder. It must + add application source code to a particular directory, and might need a build + script called after that. You can't just call **ADD** and **RUN** now, because + you don't yet have access to the application source code, and it is different + for each application build. + + -- Providing application developers with a boilerplate Dockerfile to copy-paste + into their application is inefficient, error-prone, and + difficult to update because it mixes with application-specific code. + The solution is to use **ONBUILD** to register instructions in advance, to + run later, during the next build stage. # HISTORY *May 2014, Compiled by Zac Dover (zdover at redhat dot com) based on docker.com Dockerfile documentation. +*Feb 2015, updated by Brian Goff (cpuguy83@gmail.com) for readability diff --git a/docs/man/docker-build.1.md b/docs/man/docker-build.1.md index f6a89b54ed..fe6250fc19 100644 --- a/docs/man/docker-build.1.md +++ b/docs/man/docker-build.1.md @@ -7,13 +7,18 @@ docker-build - Build a new image from the source code at PATH # SYNOPSIS **docker build** [**--help**] -[**-f**|**--file**[=*Dockerfile*]] +[**-f**|**--file**[=*PATH/Dockerfile*]] [**--force-rm**[=*false*]] [**--no-cache**[=*false*]] [**--pull**[=*false*]] [**-q**|**--quiet**[=*false*]] [**--rm**[=*true*]] [**-t**|**--tag**[=*TAG*]] +[**-m**|**--memory**[=*MEMORY*]] +[**--memory-swap**[=*MEMORY-SWAP*]] +[**-c**|**--cpu-shares**[=*0*]] +[**--cpuset-cpus**[=*CPUSET-CPUS*]] + PATH | URL | - # DESCRIPTION @@ -33,7 +38,7 @@ When a Git repository is set as the **URL**, the repository is used as context. # OPTIONS -**-f**, **--file**=*Dockerfile* +**-f**, **--file**=*PATH/Dockerfile* Path to the Dockerfile to use. If the path is a relative path then it must be relative to the current directory. The file must be within the build context. The default is *Dockerfile*. **--force-rm**=*true*|*false* diff --git a/docs/man/docker-commit.1.md b/docs/man/docker-commit.1.md index d7619133d0..e3459197a7 100644 --- a/docs/man/docker-commit.1.md +++ b/docs/man/docker-commit.1.md @@ -8,6 +8,7 @@ docker-commit - Create a new image from a container's changes **docker commit** [**-a**|**--author**[=*AUTHOR*]] [**--help**] +[**-c**|**--change**[= []**]] [**-m**|**--message**[=*MESSAGE*]] [**-p**|**--pause**[=*true*]] CONTAINER [REPOSITORY[:TAG]] @@ -19,6 +20,10 @@ Using an existing container's name or ID you can create a new image. **-a**, **--author**="" Author (e.g., "John Hannibal Smith ") +**-c** , **--change**=[] + Apply specified Dockerfile instructions while committing the image + Supported Dockerfile instructions: ADD|CMD|ENTRYPOINT|ENV|EXPOSE|FROM|MAINTAINER|RUN|USER|LABEL|VOLUME|WORKDIR|COPY + **--help** Print usage statement @@ -38,8 +43,17 @@ create a new image run docker ps to find the container's ID and then run: # docker commit -m="Added Apache to Fedora base image" \ -a="A D Ministrator" 98bd7fc99854 fedora/fedora_httpd:20 +## Apply specified Dockerfile instructions while committing the image +If an existing container was created without the DEBUG environment +variable set to "true", you can create a new image based on that +container by first getting the container's ID with docker ps and +then running: + + # docker commit -c="ENV DEBUG true" 98bd7fc99854 debug-image + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and in June 2014, updated by Sven Dowideit July 2014, updated by Sven Dowideit +Oct 2014, updated by Daniel, Dao Quang Minh diff --git a/docs/man/docker-cp.1.md b/docs/man/docker-cp.1.md index ac49a47a54..3cd203a83d 100644 --- a/docs/man/docker-cp.1.md +++ b/docs/man/docker-cp.1.md @@ -2,17 +2,57 @@ % Docker Community % JUNE 2014 # NAME -docker-cp - Copy files/folders from the PATH to the HOSTPATH +docker-cp - Copy files or folders from a container's PATH to a HOSTDIR +or to STDOUT. # SYNOPSIS **docker cp** [**--help**] -CONTAINER:PATH HOSTPATH +CONTAINER:PATH HOSTDIR|- # DESCRIPTION -Copy files/folders from a container's filesystem to the host -path. Paths are relative to the root of the filesystem. Files -can be copied from a running or stopped container. + +Copy files or folders from a `CONTAINER:PATH` to the `HOSTDIR` or to `STDOUT`. +The `CONTAINER:PATH` is relative to the root of the container's filesystem. You +can copy from either a running or stopped container. + +The `PATH` can be a file or directory. The `docker cp` command assumes all +`PATH` values start at the `/` (root) directory. This means supplying the +initial forward slash is optional; The command sees +`compassionate_darwin:/tmp/foo/myfile.txt` and +`compassionate_darwin:tmp/foo/myfile.txt` as identical. + +The `HOSTDIR` refers to a directory on the host. If you do not specify an +absolute path for your `HOSTDIR` value, Docker creates the directory relative to +where you run the `docker cp` command. For example, suppose you want to copy the +`/tmp/foo` directory from a container to the `/tmp` directory on your host. If +you run `docker cp` in your `~` (home) directory on the host: + + $ docker cp compassionate_darwin:tmp/foo /tmp + +Docker creates a `/tmp/foo` directory on your host. Alternatively, you can omit +the leading slash in the command. If you execute this command from your home directory: + + $ docker cp compassionate_darwin:tmp/foo tmp + +Docker creates a `~/tmp/foo` subdirectory. + +When copying files to an existing `HOSTDIR`, the `cp` command adds the new files to +the directory. For example, this command: + + $ docker cp sharp_ptolemy:/tmp/foo/myfile.txt /tmp + +Creates a `/tmp/foo` directory on the host containing the `myfile.txt` file. If +you repeat the command but change the filename: + + $ docker cp sharp_ptolemy:/tmp/foo/secondfile.txt /tmp + +Your host's `/tmp/foo` directory will contain both files: + + $ ls /tmp/foo + myfile.txt secondfile.txt + +Finally, use '-' to write the data as a `tar` file to STDOUT. # OPTIONS **--help** diff --git a/docs/man/docker-create.1.md b/docs/man/docker-create.1.md index 8a0b91f7c2..62a4c60bb1 100644 --- a/docs/man/docker-create.1.md +++ b/docs/man/docker-create.1.md @@ -12,7 +12,7 @@ docker-create - Create a new container [**--cap-add**[=*[]*]] [**--cap-drop**[=*[]*]] [**--cidfile**[=*CIDFILE*]] -[**--cpuset**[=*CPUSET*]] +[**--cpuset-cpus**[=*CPUSET-CPUS*]] [**--device**[=*[]*]] [**--dns-search**[=*[]*]] [**--dns**[=*[]*]] @@ -24,9 +24,13 @@ docker-create - Create a new container [**--help**] [**-i**|**--interactive**[=*false*]] [**--ipc**[=*IPC*]] +[**-l**|**--label**[=*[]*]] +[**--label-file**[=*[]*]] [**--link**[=*[]*]] [**--lxc-conf**[=*[]*]] +[**--log-driver**[=*[]*]] [**-m**|**--memory**[=*MEMORY*]] +[**--memory-swap**[=*MEMORY-SWAP*]] [**--mac-address**[=*MAC-ADDRESS*]] [**--name**[=*NAME*]] [**--net**[=*"bridge"*]] @@ -42,6 +46,7 @@ docker-create - Create a new container [**-v**|**--volume**[=*[]*]] [**--volumes-from**[=*[]*]] [**-w**|**--workdir**[=*WORKDIR*]] +[**--cgroup-parent**[=*CGROUP-PATH*]] IMAGE [COMMAND] [ARG...] # OPTIONS @@ -63,7 +68,10 @@ IMAGE [COMMAND] [ARG...] **--cidfile**="" Write the container ID to the file -**--cpuset**="" +**--cgroup-parent**="" + Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. + +**--cpuset-cpus**="" CPUs in which to allow execution (0-3, 0,1) **--device**=[] @@ -101,15 +109,37 @@ IMAGE [COMMAND] [ARG...] 'container:': reuses another container shared memory, semaphores and message queues 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. +**-l**, **--label**=[] + Adds metadata to a container (e.g., --label=com.example.key=value) + +**--label-file**=[] + Read labels from a file. Delimit each label with an EOL. + **--link**=[] Add link to another container in the form of :alias **--lxc-conf**=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" +**--log-driver**="|*json-file*|*none*" + Logging driver for container. Default is defined by daemon `--log-driver` flag. + **Warning**: `docker logs` command works only for `json-file` logging driver. + **-m**, **--memory**="" Memory limit (format: , where unit = b, k, m or g) + Allows you to constrain the memory available to a container. If the host +supports swap memory, then the **-m** memory setting can be larger than physical +RAM. If a limit of 0 is specified (not using **-m**), the container's memory is +not limited. The actual limit may be rounded up to a multiple of the operating +system's page size (the value would be very large, that's millions of trillions). + +**--memory-swap**="" + Total memory limit (memory + swap) + + Set `-1` to disable swap (format: , where unit = b, k, m or g). +This value should always larger than **-m**, so you should alway use this with **-m**. + **--mac-address**="" Container MAC address (e.g. 92:d0:c6:0a:29:33) @@ -142,9 +172,9 @@ IMAGE [COMMAND] [ARG...] Give extended privileges to this container. The default is *false*. **--read-only**=*true*|*false* - Mount the container's root filesystem as read only. + Mount the container's root filesystem as read only. -**--restart**="" +**--restart**="no" Restart policy to apply when a container exits (no, on-failure[:max-retry], always) **--security-opt**=[] diff --git a/docs/man/docker-export.1.md b/docs/man/docker-export.1.md index d2b22d2217..df69bc37d8 100644 --- a/docs/man/docker-export.1.md +++ b/docs/man/docker-export.1.md @@ -14,19 +14,31 @@ Export the contents of a container's filesystem using the full or shortened container ID or container name. The output is exported to STDOUT and can be redirected to a tar file. +Stream to a file instead of STDOUT by using **-o**. + # OPTIONS **--help** Print usage statement +**-o**, **--output**="" + Write to a file, instead of STDOUT # EXAMPLES Export the contents of the container called angry_bell to a tar file -called test.tar: +called angry_bell.tar: - # docker export angry_bell > test.tar - # ls *.tar - test.tar + # docker export angry_bell > angry_bell.tar + # docker export --output=angry_bell-latest.tar angry_bell + # ls -sh angry_bell.tar + 321M angry_bell.tar + # ls -sh angry_bell-latest.tar + 321M angry_bell-latest.tar + +# See also +**docker-import(1)** to create an empty filesystem image +and import the contents of the tarball into it, then optionally tag it. # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. June 2014, updated by Sven Dowideit +Janurary 2015, updated by Joseph Kern (josephakern at gmail dot com) diff --git a/docs/man/docker-images.1.md b/docs/man/docker-images.1.md index 16fad991ce..c5151f1107 100644 --- a/docs/man/docker-images.1.md +++ b/docs/man/docker-images.1.md @@ -8,6 +8,7 @@ docker-images - List images **docker images** [**--help**] [**-a**|**--all**[=*false*]] +[**--digests**[=*false*]] [**-f**|**--filter**[=*[]*]] [**--no-trunc**[=*false*]] [**-q**|**--quiet**[=*false*]] @@ -33,8 +34,11 @@ versions. **-a**, **--all**=*true*|*false* Show all images (by default filter out the intermediate image layers). The default is *false*. +**--digests**=*true*|*false* + Show image digests. The default is *false*. + **-f**, **--filter**=[] - Provide filter values (i.e., 'dangling=true') + Filters the output. The dangling=true filter finds unused images. While label=com.foo=amd64 filters for images with a com.foo value of amd64. The label=com.foo filter finds images with the label com.foo of any value. **--help** Print usage statement diff --git a/docs/man/docker-import.1.md b/docs/man/docker-import.1.md index 974288c721..6b3899b6a7 100644 --- a/docs/man/docker-import.1.md +++ b/docs/man/docker-import.1.md @@ -6,9 +6,15 @@ docker-import - Create an empty filesystem image and import the contents of the # SYNOPSIS **docker import** +[**-c**|**--change**[= []**]] [**--help**] URL|- [REPOSITORY[:TAG]] +# OPTIONS +**-c**, **--change**=[] + Apply specified Dockerfile instructions while importing the image + Supported Dockerfile instructions: `ADD`|`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`FROM`|`MAINTAINER`|`RUN`|`USER`|`LABEL`|`VOLUME`|`WORKDIR`|`COPY` + # DESCRIPTION Create a new filesystem image from the contents of a tarball (`.tar`, `.tar.gz`, `.tgz`, `.bzip`, `.tar.xz`, `.txz`) into it, then optionally tag it. @@ -39,6 +45,14 @@ Import to docker via pipe and stdin: # tar -c . | docker import - exampleimagedir +## Apply specified Dockerfile instructions while importing the image +This example sets the docker image ENV variable DEBUG to true by default. + + # tar -c . | docker import -c="ENV DEBUG true" - exampleimagedir + +# See also +**docker-export(1)** to export the contents of a filesystem as a tar archive to STDOUT. + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-inspect.1.md b/docs/man/docker-inspect.1.md index 8cbef0f91d..85f6730004 100644 --- a/docs/man/docker-inspect.1.md +++ b/docs/man/docker-inspect.1.md @@ -83,6 +83,11 @@ To get information on a container use it's ID or instance name: "Ghost": false }, "Image": "df53773a4390e25936f9fd3739e0c0e60a62d024ea7b669282b27e65ae8458e6", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, "NetworkSettings": { "IPAddress": "172.17.0.2", "IPPrefixLen": 16, @@ -101,6 +106,7 @@ To get information on a container use it's ID or instance name: "ResolvConfPath": "/etc/resolv.conf", "HostnamePath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/hostname", "HostsPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", "Name": "/ecstatic_ptolemy", "Driver": "devicemapper", "ExecDriver": "native-0.1", diff --git a/docs/man/docker-load.1.md b/docs/man/docker-load.1.md index 71bd28adf5..52eaa37a1f 100644 --- a/docs/man/docker-load.1.md +++ b/docs/man/docker-load.1.md @@ -36,6 +36,9 @@ Restores both images and tags. fedora heisenbug 58394af37342 7 weeks ago 385.5 MB fedora latest 58394af37342 7 weeks ago 385.5 MB +# See also +**docker-save(1)** to save an image(s) to a tar archive (streamed to STDOUT by default). + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-login.1.md b/docs/man/docker-login.1.md index 5ee6aa1c6a..e3614cce4a 100644 --- a/docs/man/docker-login.1.md +++ b/docs/man/docker-login.1.md @@ -36,6 +36,9 @@ login to a private registry you can specify this by adding the server name. # docker login localhost:8080 +# See also +**docker-logout(1)** to log out from a Docker registry. + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-logout.1.md b/docs/man/docker-logout.1.md index 07dcdcbc33..ac6dc7e84a 100644 --- a/docs/man/docker-logout.1.md +++ b/docs/man/docker-logout.1.md @@ -22,6 +22,9 @@ There are no available options. # docker logout localhost:8080 +# See also +**docker-login(1)** to register or log in to a Docker registry server. + # HISTORY June 2014, Originally compiled by Daniel, Dao Quang Minh (daniel at nitrous dot io) July 2014, updated by Sven Dowideit diff --git a/docs/man/docker-logs.1.md b/docs/man/docker-logs.1.md index d55e8d8365..01a15f54dc 100644 --- a/docs/man/docker-logs.1.md +++ b/docs/man/docker-logs.1.md @@ -22,6 +22,8 @@ The **docker logs --follow** command combines commands **docker logs** and **docker attach**. It will first return all logs from the beginning and then continue streaming new output from the container’s stdout and stderr. +**Warning**: This command works only for **json-file** logging driver. + # OPTIONS **--help** Print usage statement diff --git a/docs/man/docker-pause.1.md b/docs/man/docker-pause.1.md index 7b4b091a06..5d2267af62 100644 --- a/docs/man/docker-pause.1.md +++ b/docs/man/docker-pause.1.md @@ -6,7 +6,7 @@ docker-pause - Pause all processes within a container # SYNOPSIS **docker pause** -CONTAINER +CONTAINER [CONTAINER...] # DESCRIPTION @@ -23,5 +23,8 @@ further details. # OPTIONS There are no available options. +# See also +**docker-unpause(1)** to unpause all processes within a container. + # HISTORY June 2014, updated by Sven Dowideit diff --git a/docs/man/docker-ps.1.md b/docs/man/docker-ps.1.md index 4c94545e32..783f4621f6 100644 --- a/docs/man/docker-ps.1.md +++ b/docs/man/docker-ps.1.md @@ -1,6 +1,6 @@ % DOCKER(1) Docker User Manuals % Docker Community -% JUNE 2014 +% FEBRUARY 2015 # NAME docker-ps - List containers @@ -36,7 +36,10 @@ the running containers. **-f**, **--filter**=[] Provide filter values. Valid filters: exited= - containers with exit code of + label= or label== status=(restarting|running|paused|exited) + name= - container's name + id= - container's ID **-l**, **--latest**=*true*|*false* Show only the latest created container, include non-running ones. The default is *false*. @@ -74,9 +77,15 @@ the running containers. c1d3b0166030 41d50ecd2f57 +# Display only IDs of all containers that have the name `determined_torvalds` + + # docker ps -a -q --filter=name=determined_torvalds + c1d3b0166030 + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. June 2014, updated by Sven Dowideit August 2014, updated by Sven Dowideit November 2014, updated by Sven Dowideit +February 2015, updated by André Martins diff --git a/docs/man/docker-run.1.md b/docs/man/docker-run.1.md index 61ce465c33..ef2c9061ba 100644 --- a/docs/man/docker-run.1.md +++ b/docs/man/docker-run.1.md @@ -12,7 +12,7 @@ docker-run - Run a command in a new container [**--cap-add**[=*[]*]] [**--cap-drop**[=*[]*]] [**--cidfile**[=*CIDFILE*]] -[**--cpuset**[=*CPUSET*]] +[**--cpuset-cpus**[=*CPUSET-CPUS*]] [**-d**|**--detach**[=*false*]] [**--device**[=*[]*]] [**--dns-search**[=*[]*]] @@ -25,10 +25,13 @@ docker-run - Run a command in a new container [**--help**] [**-i**|**--interactive**[=*false*]] [**--ipc**[=*IPC*]] +[**-l**|**--label**[=*[]*]] +[**--label-file**[=*[]*]] [**--link**[=*[]*]] [**--lxc-conf**[=*[]*]] +[**--log-driver**[=*[]*]] [**-m**|**--memory**[=*MEMORY*]] -[**--memory-swap**[=*MEMORY-SWAP]] +[**--memory-swap**[=*MEMORY-SWAP*]] [**--mac-address**[=*MAC-ADDRESS*]] [**--name**[=*NAME*]] [**--net**[=*"bridge"*]] @@ -46,6 +49,7 @@ docker-run - Run a command in a new container [**-v**|**--volume**[=*[]*]] [**--volumes-from**[=*[]*]] [**-w**|**--workdir**[=*WORKDIR*]] +[**--cgroup-parent**[=*CGROUP-PATH*]] IMAGE [COMMAND] [ARG...] # DESCRIPTION @@ -82,11 +86,38 @@ option can be set multiple times. **-c**, **--cpu-shares**=0 CPU shares (relative weight) - You can increase the priority of a container -with the -c option. By default, all containers run at the same priority and get -the same proportion of CPU cycles, but you can tell the kernel to give more -shares of CPU time to one or more containers when you start them via **docker -run**. + By default, all containers get the same proportion of CPU cycles. This proportion +can be modified by changing the container's CPU share weighting relative +to the weighting of all other running containers. + +To modify the proportion from the default of 1024, use the **-c** or **--cpu-shares** +flag to set the weighting to 2 or higher. + +The proportion will only apply when CPU-intensive processes are running. +When tasks in one container are idle, other containers can use the +left-over CPU time. The actual amount of CPU time will vary depending on +the number of containers running on the system. + +For example, consider three containers, one has a cpu-share of 1024 and +two others have a cpu-share setting of 512. When processes in all three +containers attempt to use 100% of CPU, the first container would receive +50% of the total CPU time. If you add a fouth container with a cpu-share +of 1024, the first container only gets 33% of the CPU. The remaining containers +receive 16.5%, 16.5% and 33% of the CPU. + +On a multi-core system, the shares of CPU time are distributed over all CPU +cores. Even if a container is limited to less than 100% of CPU time, it can +use 100% of each individual CPU core. + +For example, consider a system with more than three cores. If you start one +container **{C0}** with **-c=512** running one process, and another container +**{C1}** with **-c=1024** running two processes, this can result in the following +division of CPU shares: + + PID container CPU CPU share + 100 {C0} 0 100% of CPU0 + 101 {C1} 1 100% of CPU1 + 102 {C1} 2 100% of CPU2 **--cap-add**=[] Add Linux capabilities @@ -94,10 +125,13 @@ run**. **--cap-drop**=[] Drop Linux capabilities +**--cgroup-parent**="" + Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. + **--cidfile**="" Write the container ID to the file -**--cpuset**="" +**--cpuset-cpus**="" CPUs in which to allow execution (0-3, 0,1) **-d**, **--detach**=*true*|*false* @@ -170,6 +204,12 @@ ENTRYPOINT. 'container:': reuses another container shared memory, semaphores and message queues 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. +**-l**, **--label**=[] + Set metadata on the container (e.g., --label com.example.key=value) + +**--label-file**=[] + Read in a line delimited file of labels + **--link**=[] Add link to another container in the form of :alias @@ -182,20 +222,24 @@ which interface and port to use. **--lxc-conf**=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" +**--log-driver**="|*json-file*|*none*" + Logging driver for container. Default is defined by daemon `--log-driver` flag. + **Warning**: `docker logs` command works only for `json-file` logging driver. + **-m**, **--memory**="" Memory limit (format: , where unit = b, k, m or g) Allows you to constrain the memory available to a container. If the host -supports swap memory, then the -m memory setting can be larger than physical -RAM. If a limit of 0 is specified, the container's memory is not limited. The -actual limit may be rounded up to a multiple of the operating system's page -size, if it is not already. The memory limit should be formatted as follows: -``, where unit = b, k, m or g. +supports swap memory, then the **-m** memory setting can be larger than physical +RAM. If a limit of 0 is specified (not using **-m**), the container's memory is +not limited. The actual limit may be rounded up to a multiple of the operating +system's page size (the value would be very large, that's millions of trillions). **--memory-swap**="" - Total memory usage (memory + swap) + Total memory limit (memory + swap) - Set '-1' to disable swap (format: , where unit = b, k, m or g) + Set `-1` to disable swap (format: , where unit = b, k, m or g). +This value should always larger than **-m**, so you should alway use this with **-m**. **--mac-address**="" Container MAC address (e.g. 92:d0:c6:0a:29:33) @@ -231,9 +275,10 @@ and foreground Docker containers. When set to true publish all exposed ports to the host interfaces. The default is false. If the operator uses -P (or -p) then Docker will make the exposed port accessible on the host and the ports will be available to any -client that can reach the host. When using -P, Docker will bind the exposed -ports to a random port on the host between 49153 and 65535. To find the -mapping between the host ports and the exposed ports, use **docker port**. +client that can reach the host. When using -P, Docker will bind any exposed +port to a random port on the host within an *ephemeral port range* defined by +`/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host +ports and the exposed ports, use `docker port`. **-p**, **--publish**=[] Publish a container's port, or range of ports, to the host. @@ -261,15 +306,15 @@ allow the container nearly all the same access to the host as processes running outside of a container on the host. **--read-only**=*true*|*false* - Mount the container's root filesystem as read only. + Mount the container's root filesystem as read only. - By default a container will have its root filesystem writable allowing processes + By default a container will have its root filesystem writable allowing processes to write files anywhere. By specifying the `--read-only` flag the container will have its root filesystem mounted as read only prohibiting any writes. -**--restart**="" +**--restart**="no" Restart policy to apply when a container exits (no, on-failure[:max-retry], always) - + **--rm**=*true*|*false* Automatically remove the container when it exits (incompatible with -d). The default is *false*. @@ -312,16 +357,20 @@ read-write. See examples. **--volumes-from**=[] Mount volumes from the specified container(s) - Will mount volumes from the specified container identified by container-id. -Once a volume is mounted in a one container it can be shared with other -containers using the **--volumes-from** option when running those other -containers. The volumes can be shared even if the original container with the -mount is not running. + Mounts already mounted volumes from a source container onto another + container. You must supply the source's container-id. To share + a volume, use the **--volumes-from** option when running + the target container. You can share volumes even if the source container + is not running. - The container ID may be optionally suffixed with :ro or -:rw to mount the volumes in read-only or read-write mode, respectively. By -default, the volumes are mounted in the same mode (read write or read only) as -the reference container. + By default, Docker mounts the volumes in the same mode (read-write or + read-only) as it is mounted in the source container. Optionally, you + can change this by suffixing the container-id with either the `:ro` or + `:rw ` keyword. + + If the location of the volume from the source container overlaps with + data residing on a target container, then the volume hides + that data on the target. **-w**, **--workdir**="" Working directory inside the container diff --git a/docs/man/docker-save.1.md b/docs/man/docker-save.1.md index 987d18b84b..91be06c350 100644 --- a/docs/man/docker-save.1.md +++ b/docs/man/docker-save.1.md @@ -35,6 +35,9 @@ fedora image to a fedora-latest.tar: $ ls -sh fedora-latest.tar 367M fedora-latest.tar +# See also +**docker-load(1)** to load an image from a tar archive on STDIN. + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-start.1.md b/docs/man/docker-start.1.md index 965c5bcaf7..523b315594 100644 --- a/docs/man/docker-start.1.md +++ b/docs/man/docker-start.1.md @@ -2,7 +2,7 @@ % Docker Community % JUNE 2014 # NAME -docker-start - Restart a stopped container +docker-start - Start one or more stopped containers # SYNOPSIS **docker start** @@ -13,7 +13,7 @@ CONTAINER [CONTAINER...] # DESCRIPTION -Start a stopped container. +Start one or more stopped containers. # OPTIONS **-a**, **--attach**=*true*|*false* @@ -25,6 +25,9 @@ Start a stopped container. **-i**, **--interactive**=*true*|*false* Attach container's STDIN. The default is *false*. +# See also +**docker-stop(1)** to stop a running container. + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-stats.1.md b/docs/man/docker-stats.1.md index 968babab53..493e402fb2 100644 --- a/docs/man/docker-stats.1.md +++ b/docs/man/docker-stats.1.md @@ -7,14 +7,12 @@ docker-stats - Display a live stream of one or more containers' resource usage s # SYNOPSIS **docker stats** [**--help**] -[CONTAINERS] +CONTAINER [CONTAINER...] # DESCRIPTION Display a live stream of one or more containers' resource usage statistics -Note: this functionality currently only works when using the *libcontainer* exec-driver. - # OPTIONS **--help** Print usage statement diff --git a/docs/man/docker-stop.1.md b/docs/man/docker-stop.1.md index 09972347af..9b882db49d 100644 --- a/docs/man/docker-stop.1.md +++ b/docs/man/docker-stop.1.md @@ -21,6 +21,9 @@ Stop a running container (Send SIGTERM, and then SIGKILL after **-t**, **--time**=10 Number of seconds to wait for the container to stop before killing it. Default is 10 seconds. +#See also +**docker-start(1)** to restart a stopped container. + # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/man/docker-unpause.1.md b/docs/man/docker-unpause.1.md index dfce16324e..466e1bb1a3 100644 --- a/docs/man/docker-unpause.1.md +++ b/docs/man/docker-unpause.1.md @@ -6,7 +6,7 @@ docker-unpause - Unpause all processes within a container # SYNOPSIS **docker unpause** -CONTAINER +CONTAINER [CONTAINER...] # DESCRIPTION @@ -20,5 +20,8 @@ further details. # OPTIONS There are no available options. +# See also +**docker-pause(1)** to pause all processes within a container. + # HISTORY June 2014, updated by Sven Dowideit diff --git a/docs/man/docker.1.md b/docs/man/docker.1.md index 1e0016f536..530fa95019 100644 --- a/docs/man/docker.1.md +++ b/docs/man/docker.1.md @@ -23,34 +23,29 @@ its own man page which explain usage and arguments. To see the man page for a command run **man docker **. # OPTIONS -**-D**=*true*|*false* - Enable debug mode. Default is false. - -**--help** +**-h**, **--help** Print usage statement -**-H**, **--host**=[unix:///var/run/docker.sock]: tcp://[host:port] to bind or -unix://[/path/to/socket] to use. - The socket(s) to bind to in daemon mode specified using one or more - tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd. +**--api-cors-header**="" + Set CORS headers in the remote API. Default is cors disabled. Give urls like "http://foo, http://bar, ...". Give "*" to allow all. -**--api-enable-cors**=*true*|*false* - Enable CORS headers in the remote API. Default is false. - -**-b**="" +**-b**, **--bridge**="" Attach containers to a pre\-existing network bridge; use 'none' to disable container networking **--bip**="" Use the provided CIDR notation address for the dynamically created bridge (docker0); Mutually exclusive of \-b -**-d**=*true*|*false* +**-D**, **--debug**=*true*|*false* + Enable debug mode. Default is false. + +**-d**, **--daemon**=*true*|*false* Enable daemon mode. Default is false. **--dns**="" Force Docker to use specific DNS servers -**-g**="" - Path to use as the root of the Docker runtime. Default is `/var/lib/docker`. +**-e**, **--exec-driver**="" + Force Docker to use specific exec driver. Default is `native`. **--fixed-cidr**="" IPv4 subnet for fixed IPs (e.g., 10.20.0.0/16); this subnet must be nested in the bridge subnet (which is defined by \-b or \-\-bip) @@ -58,6 +53,18 @@ unix://[/path/to/socket] to use. **--fixed-cidr-v6**="" IPv6 subnet for global IPv6 addresses (e.g., 2a00:1450::/64) +**-G**, **--group**="" + Group to assign the unix socket specified by -H when running in daemon mode. + use '' (the empty string) to disable setting of a group. Default is `docker`. + +**-g**, **--graph**="" + Path to use as the root of the Docker runtime. Default is `/var/lib/docker`. + +**-H**, **--host**=[unix:///var/run/docker.sock]: tcp://[host:port] to bind or +unix://[/path/to/socket] to use. + The socket(s) to bind to in daemon mode specified using one or more + tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd. + **--icc**=*true*|*false* Allow unrestricted inter\-container and Docker daemon host communication. If disabled, containers can still be linked together using **--link** option (see **docker-run(1)**). Default is true. @@ -71,7 +78,7 @@ unix://[/path/to/socket] to use. Enable IP masquerading for bridge's IP range. Default is true. **--iptables**=*true*|*false* - Disable Docker's addition of iptables rules. Default is true. + Enable Docker's addition of iptables rules. Default is true. **--ipv6**=*true*|*false* Enable IPv6 support. Default is false. Docker will create an IPv6-enabled bridge with address fe80::1 which will allow you to create IPv6-enabled containers. Use together with `--fixed-cidr-v6` to provide globally routable IPv6 addresses. IPv6 forwarding will be enabled if not used with `--ip-forward=false`. This may collide with your host's current IPv6 settings. For more information please consult the documentation about "Advanced Networking - IPv6". @@ -82,22 +89,33 @@ unix://[/path/to/socket] to use. **--label**="[]" Set key=value labels to the daemon (displayed in `docker info`) -**--mtu**=VALUE - Set the containers network mtu. Default is `1500`. +**--log-driver**="*json-file*|*none*" + Container's logging driver. Default is `default`. + **Warning**: `docker logs` command works only for `json-file` logging driver. -**-p**="" +**--mtu**=VALUE + Set the containers network mtu. Default is `0`. + +**-p**, **--pidfile**="" Path to use for daemon PID file. Default is `/var/run/docker.pid` **--registry-mirror**=:// Prepend a registry mirror to be used for image pulls. May be specified multiple times. -**-s**="" +**-s**, **--storage-driver**="" Force the Docker runtime to use a specific storage driver. **--storage-opt**=[] Set storage driver options. See STORAGE DRIVER OPTIONS. -**-v**=*true*|*false* +**-tls**=*true*|*false* + Use TLS; implied by --tlsverify. Default is false. + +**-tlsverify**=*true*|*false* + Use TLS and verify the remote (daemon: verify client, client: verify daemon). + Default is false. + +**-v**, **--version**=*true*|*false* Print version information and quit. Default is false. **--selinux-enabled**=*true*|*false* @@ -114,7 +132,7 @@ unix://[/path/to/socket] to use. Create a new image from a container's changes **docker-cp(1)** - Copy files/folders from a container's filesystem to the host at path + Copy files/folders from a container's filesystem to the host **docker-create(1)** Create a new container @@ -198,6 +216,9 @@ inside it) **docker-start(1)** Start a stopped container +**docker-stats(1)** + Display a live stream of one or more containers' resource usage statistics + **docker-stop(1)** Stop a running container @@ -296,7 +317,7 @@ for data and metadata: For specific client examples please see the man page for the specific Docker command. For example: - man docker run + man docker-run # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. diff --git a/docs/mkdocs-compose.yml b/docs/mkdocs-compose.yml deleted file mode 100644 index e2738f328d..0000000000 --- a/docs/mkdocs-compose.yml +++ /dev/null @@ -1,5 +0,0 @@ - -- ['compose/userguide.md', 'User Guide', 'Docker Compose' ] -- ['compose/install.md', 'Installation', 'Docker Compose'] -- ['compose/cli.md', 'Reference', 'Compose command line'] -- ['compose/yml.md', 'Reference', 'Compose yml'] diff --git a/docs/mkdocs-machine.yml b/docs/mkdocs-machine.yml deleted file mode 100644 index 45b2c5c846..0000000000 --- a/docs/mkdocs-machine.yml +++ /dev/null @@ -1,2 +0,0 @@ - -- ['machine/userguide.md', 'User Guide', 'Docker Machine' ] diff --git a/docs/mkdocs-swarm.yml b/docs/mkdocs-swarm.yml deleted file mode 100644 index 5c9654f8f8..0000000000 --- a/docs/mkdocs-swarm.yml +++ /dev/null @@ -1,5 +0,0 @@ - -- ['swarm/README.md', 'User Guide', 'Docker Swarm' ] -- ['swarm/discovery.md', 'Reference', 'Swarm discovery'] -- ['swarm/API.md', 'Reference', 'Swarm API'] -- ['swarm/scheduler/filter.md', 'Reference', 'Swarm filters'] diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 332be55bfd..6e7be67d20 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -31,24 +31,27 @@ pages: # Installation: - ['installation/index.md', '**HIDDEN**'] -- ['installation/mac.md', 'Installation', 'Mac OS X'] - ['installation/ubuntulinux.md', 'Installation', 'Ubuntu'] +- ['installation/mac.md', 'Installation', 'Mac OS X'] +- ['installation/windows.md', 'Installation', 'Microsoft Windows'] +- ['installation/amazon.md', 'Installation', 'Amazon EC2'] +- ['installation/archlinux.md', 'Installation', 'Arch Linux'] +- ['installation/binaries.md', 'Installation', 'Binaries'] +- ['installation/centos.md', 'Installation', 'CentOS'] +- ['installation/cruxlinux.md', 'Installation', 'CRUX Linux'] +- ['installation/debian.md', 'Installation', 'Debian'] +- ['installation/fedora.md', 'Installation', 'Fedora'] +- ['installation/frugalware.md', 'Installation', 'FrugalWare'] +- ['installation/google.md', 'Installation', 'Google Cloud Platform'] +- ['installation/gentoolinux.md', 'Installation', 'Gentoo'] +- ['installation/softlayer.md', 'Installation', 'IBM Softlayer'] +- ['installation/joyent.md', 'Installation', 'Joyent Compute Service'] +- ['installation/azure.md', 'Installation', 'Microsoft Azure'] +- ['installation/rackspace.md', 'Installation', 'Rackspace Cloud'] - ['installation/rhel.md', 'Installation', 'Red Hat Enterprise Linux'] - ['installation/oracle.md', 'Installation', 'Oracle Linux'] -- ['installation/centos.md', 'Installation', 'CentOS'] -- ['installation/debian.md', 'Installation', 'Debian'] -- ['installation/gentoolinux.md', 'Installation', 'Gentoo'] -- ['installation/google.md', 'Installation', 'Google Cloud Platform'] -- ['installation/rackspace.md', 'Installation', 'Rackspace Cloud'] -- ['installation/amazon.md', 'Installation', 'Amazon EC2'] -- ['installation/softlayer.md', 'Installation', 'IBM Softlayer'] -- ['installation/archlinux.md', 'Installation', 'Arch Linux'] -- ['installation/frugalware.md', 'Installation', 'FrugalWare'] -- ['installation/fedora.md', 'Installation', 'Fedora'] - ['installation/SUSE.md', 'Installation', 'SUSE'] -- ['installation/cruxlinux.md', 'Installation', 'CRUX Linux'] -- ['installation/windows.md', 'Installation', 'Microsoft Windows'] -- ['installation/binaries.md', 'Installation', 'Binaries'] +- ['compose/install.md', 'Installation', 'Docker Compose'] # User Guide: - ['userguide/index.md', 'User Guide', 'The Docker User Guide' ] @@ -58,9 +61,13 @@ pages: - ['userguide/dockerimages.md', 'User Guide', 'Working with Docker Images' ] - ['userguide/dockerlinks.md', 'User Guide', 'Linking containers together' ] - ['userguide/dockervolumes.md', 'User Guide', 'Managing data in containers' ] +- ['userguide/labels-custom-metadata.md', 'User Guide', 'Apply custom metadata' ] - ['userguide/dockerrepos.md', 'User Guide', 'Working with Docker Hub' ] - ['userguide/level1.md', '**HIDDEN**' ] - ['userguide/level2.md', '**HIDDEN**' ] +- ['compose/index.md', 'User Guide', 'Docker Compose' ] +- ['machine/index.md', 'User Guide', 'Docker Machine' ] +- ['swarm/index.md', 'User Guide', 'Docker Swarm' ] # Docker Hub docs: - ['docker-hub/index.md', 'Docker Hub', 'Docker Hub' ] @@ -84,6 +91,9 @@ pages: - ['examples/running_ssh_service.md', 'Examples', 'Dockerizing an SSH service'] - ['examples/couchdb_data_volumes.md', 'Examples', 'Dockerizing a CouchDB service'] - ['examples/apt-cacher-ng.md', 'Examples', 'Dockerizing an Apt-Cacher-ng service'] +- ['compose/django.md', 'Examples', 'Getting started with Compose and Django'] +- ['compose/rails.md', 'Examples', 'Getting started with Compose and Rails'] +- ['compose/wordpress.md', 'Examples', 'Getting started with Compose and Wordpress'] # Articles - ['articles/index.md', '**HIDDEN**'] @@ -109,16 +119,26 @@ pages: # Reference - ['reference/index.md', '**HIDDEN**'] - ['reference/commandline/index.md', '**HIDDEN**'] -- ['reference/commandline/cli.md', 'Reference', 'Command line'] +- ['reference/commandline/cli.md', 'Reference', 'Docker command line'] - ['reference/builder.md', 'Reference', 'Dockerfile'] - ['faq.md', 'Reference', 'FAQ'] - ['reference/run.md', 'Reference', 'Run Reference'] +- ['compose/cli.md', 'Reference', 'Compose command line'] +- ['compose/yml.md', 'Reference', 'Compose yml'] +- ['compose/env.md', 'Reference', 'Compose ENV variables'] +- ['compose/completion.md', 'Reference', 'Compose commandline completion'] +- ['swarm/discovery.md', 'Reference', 'Swarm discovery'] +- ['swarm/scheduler/strategy.md', 'Reference', 'Swarm strategies'] +- ['swarm/scheduler/filter.md', 'Reference', 'Swarm filters'] +- ['swarm/API.md', 'Reference', 'Swarm API'] - ['reference/api/index.md', '**HIDDEN**'] - ['reference/api/docker-io_api.md', 'Reference', 'Docker Hub API'] - ['reference/api/registry_api.md', 'Reference', 'Docker Registry API'] - ['reference/api/registry_api_client_libraries.md', 'Reference', 'Docker Registry API Client Libraries'] - ['reference/api/hub_registry_spec.md', 'Reference', 'Docker Hub and Registry Spec'] +#- ['reference/image-spec-v1.md', 'Reference', 'Docker Image Specification v1.0.0'] - ['reference/api/docker_remote_api.md', 'Reference', 'Docker Remote API'] +- ['reference/api/docker_remote_api_v1.18.md', 'Reference', 'Docker Remote API v1.18'] - ['reference/api/docker_remote_api_v1.17.md', 'Reference', 'Docker Remote API v1.17'] - ['reference/api/docker_remote_api_v1.16.md', 'Reference', 'Docker Remote API v1.16'] - ['reference/api/docker_remote_api_v1.15.md', '**HIDDEN**'] @@ -152,8 +172,21 @@ pages: - ['terms/filesystem.md', '**HIDDEN**'] - ['terms/image.md', '**HIDDEN**'] -# Contribute: -- ['contributing/index.md', '**HIDDEN**'] -- ['contributing/contributing.md', 'Contribute', 'Contributing'] -- ['contributing/devenvironment.md', 'Contribute', 'Development environment'] -- ['contributing/docs_style-guide.md', 'Contribute', 'Documentation style guide'] + +# Project: +- ['project/index.md', '**HIDDEN**'] +- ['project/who-written-for.md', 'Contributor Guide', 'README first'] +- ['project/software-required.md', 'Contributor Guide', 'Get required software'] +- ['project/set-up-git.md', 'Contributor Guide', 'Configure Git for contributing'] +- ['project/set-up-dev-env.md', 'Contributor Guide', 'Work with a development container'] +- ['project/test-and-docs.md', 'Contributor Guide', 'Run tests and test documentation'] +- ['project/make-a-contribution.md', 'Contributor Guide', 'Understand contribution workflow'] +- ['project/find-an-issue.md', 'Contributor Guide', 'Find an issue'] +- ['project/work-issue.md', 'Contributor Guide', 'Work on an issue'] +- ['project/create-pr.md', 'Contributor Guide', 'Create a pull request'] +- ['project/review-pr.md', 'Contributor Guide', 'Participate in the PR review'] +- ['project/advanced-contributing.md', 'Contributor Guide', 'Advanced contributing'] +- ['project/get-help.md', 'Contributor Guide', 'Where to get help'] +- ['project/coding-style.md', 'Contributor Guide', 'Coding style guide'] +- ['project/doc-style.md', 'Contributor Guide', 'Documentation style guide'] + diff --git a/docs/release.sh b/docs/release.sh index 975940f5d5..7e2ed5f112 100755 --- a/docs/release.sh +++ b/docs/release.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash set -e set -o pipefail @@ -16,57 +16,31 @@ make AWS_S3_BUCKET=docs-stage.docker.com docs-release will then push the documentation site to your s3 bucket. Note: you can add `OPTIONS=--dryrun` to see what will be done without sending to the server + You can also add NOCACHE=1 to publish without a cache, which is what we do for the master docs. EOF exit 1 } -[ "$AWS_S3_BUCKET" ] || usage - -VERSION=$(cat VERSION) - -if [ "$AWS_S3_BUCKET" == "docs.docker.com" ]; then - if [ "${VERSION%-dev}" != "$VERSION" ]; then - echo "Please do not push '-dev' documentation to docs.docker.com ($VERSION)" - exit 1 - fi - cat > ./sources/robots.txt <<'EOF' -User-agent: * -Allow: / -EOF - -else +create_robots_txt() { cat > ./sources/robots.txt <<'EOF' User-agent: * Disallow: / EOF -fi - -# Remove the last version - 1.0.2-dev -> 1.0 -MAJOR_MINOR="v${VERSION%.*}" -export MAJOR_MINOR - -export BUCKET=$AWS_S3_BUCKET - -export AWS_CONFIG_FILE=$(pwd)/awsconfig -[ -e "$AWS_CONFIG_FILE" ] || usage -export AWS_DEFAULT_PROFILE=$BUCKET - -echo "cfg file: $AWS_CONFIG_FILE ; profile: $AWS_DEFAULT_PROFILE" +} setup_s3() { - echo "Create $BUCKET" # Try creating the bucket. Ignore errors (it might already exist). + echo "create $BUCKET if it does not exist" aws s3 mb --profile $BUCKET s3://$BUCKET 2>/dev/null || true + # Check access to the bucket. echo "test $BUCKET exists" aws s3 --profile $BUCKET ls s3://$BUCKET + # Make the bucket accessible through website endpoints. echo "make $BUCKET accessible as a website" #aws s3 website s3://$BUCKET --index-document index.html --error-document jsearch/index.html - s3conf=$(cat s3_website.json | envsubst) - echo - echo $s3conf - echo + local s3conf=$(cat s3_website.json | envsubst) aws s3api --profile $BUCKET put-bucket-website --bucket $BUCKET --website-configuration "$s3conf" } @@ -86,51 +60,44 @@ upload_current_documentation() { cache=no-cache fi - echo - echo "Uploading $src" - echo " to $dst" - echo + printf "\nUploading $src to $dst\n" # a really complicated way to send only the files we want # if there are too many in any one set, aws s3 sync seems to fall over with 2 files to go # versions.html_fragment - include="--recursive --include \"*.$i\" " - echo "uploading *.$i" - run="aws s3 cp $src $dst $OPTIONS --profile $BUCKET --cache-control $cache --acl public-read $include" - echo "=======================" - echo "$run" - echo "=======================" - $run + include="--recursive --include \"*.$i\" " + run="aws s3 cp $src $dst $OPTIONS --profile $BUCKET --cache-control $cache --acl public-read $include" + printf "\n=====\n$run\n=====\n" + $run # Make sure the search_content.json.gz file has the right content-encoding aws s3 cp --profile $BUCKET --cache-control $cache --content-encoding="gzip" --acl public-read "site/search_content.json.gz" "$dst" } invalidate_cache() { - if [ "" == "$DISTRIBUTION_ID" ]; then + if [[ -z "$DISTRIBUTION_ID" ]]; then echo "Skipping Cloudfront cache invalidation" return fi dst=$1 - #aws cloudfront create-invalidation --profile docs.docker.com --distribution-id $DISTRIBUTION_ID --invalidation-batch '{"Paths":{"Quantity":1, "Items":["'+$file+'"]},"CallerReference":"19dec2014sventest1"}' aws configure set preview.cloudfront true - files=($(cat changed-files | grep 'sources/.*$' | sed -E 's#.*docs/sources##' | sed -E 's#index\.md#index.html#' | sed -E 's#\.md#/index.html#')) - files[${#files[@]}]="/index.html" - files[${#files[@]}]="/versions.html_fragment" + # Get all the files + # not .md~ files + # replace spaces w %20 so urlencoded + files=( $(find site/ -not -name "*.md*" -type f | sed 's/site//g' | sed 's/ /%20/g') ) len=${#files[@]} + last_file=${files[$((len-1))]} echo "aws cloudfront create-invalidation --profile $AWS_S3_BUCKET --distribution-id $DISTRIBUTION_ID --invalidation-batch '" > batchfile echo "{\"Paths\":{\"Quantity\":$len," >> batchfile echo "\"Items\": [" >> batchfile - #for file in $(cat changed-files | grep 'sources/.*$' | sed -E 's#.*docs/sources##' | sed -E 's#index\.md#index.html#' | sed -E 's#\.md#/index.html#') - for file in "${files[@]}" - do - if [ "$file" == "${files[${#files[@]}-1]}" ]; then + for file in "${files[@]}" ; do + if [[ $file == $last_file ]]; then comma="" else comma="," @@ -138,33 +105,65 @@ invalidate_cache() { echo "\"$dst$file\"$comma" >> batchfile done - echo "]}, \"CallerReference\":" >> batchfile - echo "\"$(date)\"}'" >> batchfile + echo "]}, \"CallerReference\":\"$(date)\"}'" >> batchfile - - echo "-----" - cat batchfile - echo "-----" sh batchfile - echo "-----" } +main() { + [ "$AWS_S3_BUCKET" ] || usage -if [ "$OPTIONS" != "--dryrun" ]; then - setup_s3 -fi + # Make sure there is an awsconfig file + export AWS_CONFIG_FILE=$(pwd)/awsconfig + [ -f "$AWS_CONFIG_FILE" ] || usage -# Default to only building the version specific docs so we don't clober the latest by accident with old versions -if [ "$BUILD_ROOT" == "yes" ]; then - echo "Building root documentation" + # Get the version + VERSION=$(cat VERSION) + + # Disallow pushing dev docs to master + if [ "$AWS_S3_BUCKET" == "docs.docker.com" ] && [ "${VERSION%-dev}" != "$VERSION" ]; then + echo "Please do not push '-dev' documentation to docs.docker.com ($VERSION)" + exit 1 + fi + + # Clean version - 1.0.2-dev -> 1.0 + export MAJOR_MINOR="v${VERSION%.*}" + + export BUCKET=$AWS_S3_BUCKET + export AWS_DEFAULT_PROFILE=$BUCKET + + # debug variables + echo "bucket: $BUCKET, full version: $VERSION, major-minor: $MAJOR_MINOR" + echo "cfg file: $AWS_CONFIG_FILE ; profile: $AWS_DEFAULT_PROFILE" + + # create the robots.txt + create_robots_txt + + if [ "$OPTIONS" != "--dryrun" ]; then + setup_s3 + fi + + # Default to only building the version specific docs + # so we don't clober the latest by accident with old versions + if [ "$BUILD_ROOT" == "yes" ]; then + echo "Building root documentation" + build_current_documentation + + echo "Uploading root documentation" + upload_current_documentation + [ "$NOCACHE" ] || invalidate_cache + fi + + #build again with /v1.0/ prefix + sed -i "s/^site_url:.*/site_url: \/$MAJOR_MINOR\//" mkdocs.yml + echo "Building the /$MAJOR_MINOR/ documentation" build_current_documentation - upload_current_documentation - [ "$NOCACHE" ] || invalidate_cache -fi -#build again with /v1.0/ prefix -sed -i "s/^site_url:.*/site_url: \/$MAJOR_MINOR\//" mkdocs.yml -echo "Building the /$MAJOR_MINOR/ documentation" -build_current_documentation -upload_current_documentation "/$MAJOR_MINOR/" -[ "$NOCACHE" ] || invalidate_cache "/$MAJOR_MINOR" + echo "Uploading the documentation" + upload_current_documentation "/$MAJOR_MINOR/" + + # Invalidating cache + [ "$NOCACHE" ] || invalidate_cache "/$MAJOR_MINOR" +} + +main diff --git a/docs/s3_website.json b/docs/s3_website.json index e468b678af..490c492ea4 100644 --- a/docs/s3_website.json +++ b/docs/s3_website.json @@ -12,6 +12,11 @@ { "Condition": { "KeyPrefixEquals": "jsearch/index.html" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "jsearch/" } }, { "Condition": { "KeyPrefixEquals": "index/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-io/" } }, { "Condition": { "KeyPrefixEquals": "reference/api/index_api/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "reference/api/docker-io_api/" } }, + { "Condition": { "KeyPrefixEquals": "docker-hub/groups.png" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-hub/hub-images/groups.png" } }, + { "Condition": { "KeyPrefixEquals": "docker-hub/hub.png" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-hub/hub-images/hub.png" } }, + { "Condition": { "KeyPrefixEquals": "docker-hub/invite.png" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-hub/hub-images/invite.png" } }, + { "Condition": { "KeyPrefixEquals": "docker-hub/orgs.png" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-hub/hub-images/orgs.png" } }, + { "Condition": { "KeyPrefixEquals": "docker-hub/repos.png" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "docker-hub/hub-images/repos.png" } }, { "Condition": { "KeyPrefixEquals": "examples/hello_world/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "userguide/dockerizing/" } }, { "Condition": { "KeyPrefixEquals": "examples/python_web_app/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "userguide/dockerizing/" } }, { "Condition": { "KeyPrefixEquals": "use/working_with_volumes/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "userguide/dockervolumes/" } }, @@ -31,7 +36,10 @@ { "Condition": { "KeyPrefixEquals": "examples/using_supervisord/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "articles/using_supervisord/" } }, { "Condition": { "KeyPrefixEquals": "reference/api/registry_index_spec/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "reference/api/hub_registry_spec/" } }, { "Condition": { "KeyPrefixEquals": "use/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "examples/" } }, - { "Condition": { "KeyPrefixEquals": "installation/openSUSE/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "installation/SUSE/" } } + { "Condition": { "KeyPrefixEquals": "installation/openSUSE/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "installation/SUSE/" } }, + { "Condition": { "KeyPrefixEquals": "contributing/contributing/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "project/who-written-for/" } }, + { "Condition": { "KeyPrefixEquals": "contributing/devenvironment/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "project/set-up-prereqs/" } }, + { "Condition": { "KeyPrefixEquals": "contributing/docs_style-guide/" }, "Redirect": { "HostName": "$BUCKET", "ReplaceKeyPrefixWith": "project/doc-style/" } } ] } diff --git a/docs/sources/article-img/ipv6_basic_host_config.gliffy b/docs/sources/article-img/ipv6_basic_host_config.gliffy index f28c3f6f94..8d0450fc7c 100644 --- a/docs/sources/article-img/ipv6_basic_host_config.gliffy +++ b/docs/sources/article-img/ipv6_basic_host_config.gliffy @@ -1 +1 @@ -{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":420,"height":127,"nodeIndex":173,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":false,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":8.5,"y":0.5},"max":{"x":419.75,"y":126.5}},"objects":[{"x":6.5,"y":106.0,"rotation":0.0,"id":9,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":20,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":19.5,"y":8.0,"rotation":0.0,"id":7,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:0:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":31.5,"y":23.5,"rotation":0.0,"id":4,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":11.75,"y":0.5,"rotation":0.0,"id":60,"width":402.0,"height":126.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":146.5,"y":82.0,"rotation":0.0,"id":164,"width":249.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2001:db8:0:2::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":146.5,"y":27.5,"rotation":0.0,"id":73,"width":249.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#fff2cc","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#d9d9d9"}},"textStyles":{"global":{"italic":false,"size":"12px","color":"#b7b7b7"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":414,"height":127,"nodeIndex":173,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":false,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":8.5,"y":0.5},"max":{"x":413.75,"y":126.5}},"objects":[{"x":6.5,"y":106.0,"rotation":0.0,"id":9,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":20,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":19.5,"y":9.0,"rotation":0.0,"id":7,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":31.5,"y":23.5,"rotation":0.0,"id":4,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":11.75,"y":0.5,"rotation":0.0,"id":60,"width":402.0,"height":126.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":146.5,"y":83.0,"rotation":0.0,"id":164,"width":249.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:1::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":146.5,"y":27.5,"rotation":0.0,"id":73,"width":249.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#fff2cc","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#d9d9d9"}},"textStyles":{"global":{"size":"12px","color":"#b7b7b7"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_basic_host_config.svg b/docs/sources/article-img/ipv6_basic_host_config.svg index b5f9eeebeb..0095b8bdc7 100644 --- a/docs/sources/article-img/ipv6_basic_host_config.svg +++ b/docs/sources/article-img/ipv6_basic_host_config.svg @@ -1 +1 @@ -Host2eth0 2001:db8:0:1::1/64docker0 fe80::1/64route -A inet6 default gw fe80::1 dev eth0route -A inet6 2001:db8:0:2::/64 dev docker0 \ No newline at end of file +Host2eth02001:db8::1/64docker0fe80::1/64ip -6routeadddefaultviafe80::1deveth0ip -6routeadd2001:db8:1::/64devdocker0 \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_ndp_proxying.gliffy b/docs/sources/article-img/ipv6_ndp_proxying.gliffy new file mode 100644 index 0000000000..698723e19f --- /dev/null +++ b/docs/sources/article-img/ipv6_ndp_proxying.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":616,"height":438,"nodeIndex":207,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":3,"y":-7.75},"max":{"x":615.5,"y":437.5}},"objects":[{"x":173.0,"y":117.0,"rotation":0.0,"id":190,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":30,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":186,"py":0.0,"px":0.2928932188134524}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[120.21067811865476,-7.0],[335.78932188134524,57.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":195.0,"y":117.0,"rotation":0.0,"id":83,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":23,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":222.5,"y":35.0,"rotation":0.0,"id":0,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#fff2cc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":1,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Router

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":26.0,"y":109.0,"rotation":0.0,"id":33,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":6,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":2,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[225.78932188134524,0.9999999999999858],[57.710678118654755,65.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":20.289321881345245,"y":150.0,"rotation":0.0,"id":32,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":5,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":0.0,"px":0.2928932188134524}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"py":1.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[333.5,24.5],[272.9213562373095,-40.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":271.0,"y":37.0,"rotation":0.0,"id":89,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":1,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#d9d9d9","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[1.5,-2.0],[1.5,-21.125],[1.5,-21.125],[1.5,-40.25]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":151.0,"y":115.0,"rotation":0.0,"id":183,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":0,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":179,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[121.5,-5.0],[62.5,59.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":455.5,"y":257.0,"rotation":0.0,"id":200,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":200,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":5,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    expected Container location

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":467.5,"y":156.0,"rotation":0.0,"id":185,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::c00y/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":479.5,"y":174.5,"rotation":0.0,"id":186,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#e2e2e2","gradient":false,"dashStyle":"2,2","dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":187,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container x

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":151.5,"y":156.0,"rotation":0.0,"id":178,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::b001/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":163.5,"y":174.5,"rotation":0.0,"id":179,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":180,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":299.5,"y":257.0,"rotation":0.0,"id":9,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":317.5,"y":156.0,"rotation":0.0,"id":7,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::c001/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":1.0,"y":156.0,"rotation":0.0,"id":6,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":13,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::a001/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":324.5,"y":174.5,"rotation":0.0,"id":4,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host3

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":13.0,"y":174.5,"rotation":0.0,"id":2,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":3,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":-142.5,"y":118.5,"rotation":0.0,"id":31,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":4,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":25,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[537.7106781186548,131.0],[602.0,204.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":-181.5,"y":122.5,"rotation":0.0,"id":30,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":3,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":27,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[535.2893218813452,127.0],[473.0,200.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":386.0,"y":306.0,"rotation":0.0,"id":78,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":22,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::c00a/125

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":218.0,"y":306.0,"rotation":0.0,"id":77,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::c009/125

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":409.5,"y":323.0,"rotation":0.0,"id":25,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":18,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":26,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":241.5,"y":323.0,"rotation":0.0,"id":27,"width":99.99999999999999,"height":99.99999999999999,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":16,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":28,"width":95.99999999999999,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":207.75,"y":297.5,"rotation":0.0,"id":58,"width":339.75,"height":140.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#e2e2e2","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":false,"shadow":true}},"lineStyles":{"global":{"stroke":"#cccccc","strokeWidth":2,"dashStyle":"4.0,4.0"}},"textStyles":{"global":{"size":"12px","italic":true}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_ndp_proxying.svg b/docs/sources/article-img/ipv6_ndp_proxying.svg new file mode 100644 index 0000000000..49b2da9f0d --- /dev/null +++ b/docs/sources/article-img/ipv6_ndp_proxying.svg @@ -0,0 +1 @@ +RouterHost1Host3eth02001:db8::a001/64eth02001:db8::c001/64docker0fe80::1/64Container1Container2eth02001:db8::c009/125eth02001:db8::c00a/125eth02001:db8::1/64Host2eth02001:db8::b001/64Containerxeth02001:db8::c00y/64expectedContainerlocation \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_routed_network_example.gliffy b/docs/sources/article-img/ipv6_routed_network_example.gliffy index aea452b625..81ab0ed879 100644 --- a/docs/sources/article-img/ipv6_routed_network_example.gliffy +++ b/docs/sources/article-img/ipv6_routed_network_example.gliffy @@ -1 +1 @@ -{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":757,"height":503,"nodeIndex":174,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":-9.000680271168676,"y":-4.75},"max":{"x":756.0183424505415,"y":502.5}},"objects":[{"x":765.0,"y":250.0,"rotation":0.0,"id":169,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":47,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-12.982306425886122,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":663.0,"y":362.5,"rotation":270.0,"id":168,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    managed by Docker

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":747.0,"y":472.0,"rotation":0.0,"id":166,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":45,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,14.008510484195028],[0.0,-221.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":25.5,"y":254.0,"rotation":0.0,"id":162,"width":194.49999999999997,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2001:db8:1:1::/64 \\

        dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":239.28932188134524,"y":150.0,"rotation":0.0,"id":32,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":8,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":0.0,"px":0.2928932188134524}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"py":1.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[196.5,47.5],[151.9213562373095,-37.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":195.0,"y":261.5,"rotation":0.0,"id":35,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":11,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":13,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[66.28932188134524,11.0],[-92.0,91.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":182.0,"y":272.5,"rotation":0.0,"id":34,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":10,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":15,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[100.0,0.0],[82.0,80.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":11.5,"y":463.0,"rotation":0.0,"id":53,"width":346.49999999999994,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":11.5,"y":323.5,"rotation":0.0,"id":56,"width":346.49999999999994,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":5,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":245.0,"y":109.0,"rotation":0.0,"id":33,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":9,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":2,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[104.78932188134524,3.999999999999986],[57.710678118654755,88.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":76.5,"y":141.5,"rotation":0.0,"id":31,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":7,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":25,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[400.71067811865476,131.0],[560.0,211.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":37.5,"y":145.5,"rotation":0.0,"id":30,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":6,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":27,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[419.0,127.0],[431.0,207.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":296.0,"y":21.0,"rotation":0.0,"id":87,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":293.0,"y":120.0,"rotation":0.0,"id":83,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":40,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth1 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":433.5,"y":42.5,"rotation":0.0,"id":82,"width":291.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":39,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

     

     

    route -A inet6 2001:db8:1::/48 gw fe80::1:1 dev eth1

    route -A inet6 2001:db8:2::/48 gw fe80::2:1 dev eth1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":320.5,"y":38.0,"rotation":0.0,"id":0,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":12,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#fff2cc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":1,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Router

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":369.0,"y":40.0,"rotation":0.0,"id":89,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":1,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#d9d9d9","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[1.5,-2.0],[1.5,-21.125],[1.5,-21.125],[1.5,-40.25]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":297.75,"y":10.5,"rotation":0.0,"id":80,"width":425.99999999999994,"height":133.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":528.5,"y":197.5,"rotation":0.0,"id":73,"width":195.25,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 \\

        dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":793.0,"y":250.0,"rotation":0.0,"id":64,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":34,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":60,"py":0.6205673758865248,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,8.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-69.25,0.0],[-798.0006802711687,-3.410605131648481E-13]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":25.5,"y":199.5,"rotation":0.0,"id":47,"width":291.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 \\

       dev eth0 

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":207.0,"y":281.0,"rotation":0.0,"id":11,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":220.0,"y":168.0,"rotation":0.0,"id":6,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:0::1/64

            fe80::1:1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":232.0,"y":197.5,"rotation":0.0,"id":2,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":3,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":11.5,"y":162.5,"rotation":0.0,"id":59,"width":346.50000000000006,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":384.75,"y":162.5,"rotation":0.0,"id":60,"width":339.0,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":189.0,"y":336.0,"rotation":0.0,"id":74,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:1::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":28.000000000000014,"y":336.0,"rotation":0.0,"id":19,"width":149.99999999999997,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":214.0,"y":353.0,"rotation":0.0,"id":15,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":24,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":16,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":53.0,"y":353.0,"rotation":0.0,"id":13,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":22,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":14,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":395.0,"y":336.0,"rotation":0.0,"id":77,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":384.75,"y":323.5,"rotation":0.0,"id":58,"width":339.75,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":384.75,"y":462.0,"rotation":0.0,"id":51,"width":339.75,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":418.5,"y":353.0,"rotation":0.0,"id":27,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":27,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":28,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":563.0,"y":336.0,"rotation":0.0,"id":78,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:1::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":586.5,"y":353.0,"rotation":0.0,"id":25,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":29,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":26,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":259.0,"y":491.5,"rotation":0.0,"id":107,"width":223.00000000000003,"height":11.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    containers' link-local addresses are not displayed

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":394.5,"y":168.0,"rotation":0.0,"id":7,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:0::1/64
            fe80::2:1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":381.5,"y":280.0,"rotation":0.0,"id":9,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":20,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":406.5,"y":197.5,"rotation":0.0,"id":4,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":528.5,"y":252.0,"rotation":0.0,"id":164,"width":194.49999999999997,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2001:db8:2:1::/64 \\

        dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":766.0,"y":487.0,"rotation":0.0,"id":171,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":48,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-13.981657549458532,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#fff2cc","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#000000","strokeWidth":1}},"textStyles":{"global":{"size":"12px"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":903,"height":598,"nodeIndex":174,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":-9.000680271168676,"y":-4.75},"max":{"x":756.0183424505415,"y":502.5}},"objects":[{"x":765.0,"y":250.0,"rotation":0.0,"id":169,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":47,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-12.982306425886122,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":663.0,"y":362.5,"rotation":270.0,"id":168,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    managed by Docker

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":747.0,"y":472.0,"rotation":0.0,"id":166,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":45,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,14.008510484195028],[0.0,-221.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":25.5,"y":254.0,"rotation":0.0,"id":162,"width":194.49999999999997,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:1:1::/64 \\

        dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":239.28932188134524,"y":150.0,"rotation":0.0,"id":32,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":8,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":0.0,"px":0.2928932188134524}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":0,"py":1.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[196.5,47.5],[151.9213562373095,-37.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":195.0,"y":261.5,"rotation":0.0,"id":35,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":11,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":13,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[66.28932188134524,11.0],[-92.0,91.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":182.0,"y":272.5,"rotation":0.0,"id":34,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":10,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":15,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[100.0,0.0],[82.0,80.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":11.5,"y":464.0,"rotation":0.0,"id":53,"width":346.49999999999994,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":11.5,"y":323.5,"rotation":0.0,"id":56,"width":346.49999999999994,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":5,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":245.0,"y":109.0,"rotation":0.0,"id":33,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":9,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":2,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[104.78932188134524,3.999999999999986],[57.710678118654755,88.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":76.5,"y":141.5,"rotation":0.0,"id":31,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":7,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":25,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[400.71067811865476,131.0],[560.0,211.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":37.5,"y":145.5,"rotation":0.0,"id":30,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":6,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":27,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[419.0,127.0],[431.0,207.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":296.0,"y":21.0,"rotation":0.0,"id":87,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":293.0,"y":120.0,"rotation":0.0,"id":83,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":40,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth1 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":433.5,"y":46.5,"rotation":0.0,"id":82,"width":291.0,"height":78.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":39,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

     

     

    ip -6 route add 2001:db8:1::/48 via fe80::1:1 dev eth1

    ip -6 route add 2001:db8:2::/48 via fe80::2:1 dev eth1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":320.5,"y":38.0,"rotation":0.0,"id":0,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":12,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#fff2cc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":1,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Router

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":369.0,"y":40.0,"rotation":0.0,"id":89,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":1,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":0,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#d9d9d9","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[1.5,-2.0],[1.5,-21.125],[1.5,-21.125],[1.5,-40.25]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":297.75,"y":10.5,"rotation":0.0,"id":80,"width":425.99999999999994,"height":133.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":528.5,"y":199.0,"rotation":0.0,"id":73,"width":195.25,"height":31.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 \\

        dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":793.0,"y":250.0,"rotation":0.0,"id":64,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":34,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":60,"py":0.6205673758865248,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,8.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-69.25,0.0],[-798.0006802711687,-3.410605131648481E-13]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":25.5,"y":201.0,"rotation":0.0,"id":47,"width":291.0,"height":31.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 \\

       dev eth0 

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":207.0,"y":281.0,"rotation":0.0,"id":11,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":220.0,"y":168.0,"rotation":0.0,"id":6,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:0::1/64

            fe80::1:1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":232.0,"y":197.5,"rotation":0.0,"id":2,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":3,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":11.5,"y":162.5,"rotation":0.0,"id":59,"width":346.50000000000006,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":384.75,"y":162.5,"rotation":0.0,"id":60,"width":339.0,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":189.0,"y":336.0,"rotation":0.0,"id":74,"width":150.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:1::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":28.000000000000014,"y":336.0,"rotation":0.0,"id":19,"width":149.99999999999997,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":214.0,"y":353.0,"rotation":0.0,"id":15,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":24,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":16,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":53.0,"y":353.0,"rotation":0.0,"id":13,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":22,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":14,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":395.0,"y":336.0,"rotation":0.0,"id":77,"width":150.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":384.75,"y":323.5,"rotation":0.0,"id":58,"width":339.75,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":384.75,"y":463.0,"rotation":0.0,"id":51,"width":339.75,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":418.5,"y":353.0,"rotation":0.0,"id":27,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":27,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":28,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":563.0,"y":336.0,"rotation":0.0,"id":78,"width":150.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:1::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":586.5,"y":353.0,"rotation":0.0,"id":25,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":29,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":26,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":259.0,"y":491.5,"rotation":0.0,"id":107,"width":223.00000000000003,"height":11.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    containers' link-local addresses are not displayed

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":394.5,"y":168.0,"rotation":0.0,"id":7,"width":150.0,"height":31.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2:0::1/64
            fe80::2:1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":381.5,"y":280.0,"rotation":0.0,"id":9,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":20,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":406.5,"y":197.5,"rotation":0.0,"id":4,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":528.5,"y":252.0,"rotation":0.0,"id":164,"width":194.49999999999997,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:2:1::/64 \\

        dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":766.0,"y":487.0,"rotation":0.0,"id":171,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":48,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-13.981657549458532,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#fff2cc","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#000000","strokeWidth":1}},"textStyles":{"global":{"size":"12px"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_routed_network_example.svg b/docs/sources/article-img/ipv6_routed_network_example.svg index 7050657f9f..da621433f3 100644 --- a/docs/sources/article-img/ipv6_routed_network_example.svg +++ b/docs/sources/article-img/ipv6_routed_network_example.svg @@ -1 +1 @@ -RouterHost1Host2eth0 2001:db8:1:0::1/64        fe80::1:1/64eth0 2001:db8:2:0::1/64        fe80::2:1/64docker0 fe80::1/64docker0 fe80::1/64Container1-1Container1-2eth0 2001:db8:1:1::1/64Container2-1Container2-2route -A inet6 default gw fe80::1 \   dev eth0 route -A inet6 default gw fe80::1 dev eth0route -A inet6 default gw fe80::1 dev eth0route -A inet6 default gw fe80::1 \    dev eth0eth0 2001:db8:1:1::2/64eth0 2001:db8:2:1::1/64eth0 2001:db8:2:1::2/64route -A inet6 default gw fe80::1 dev eth0  route -A inet6 2001:db8:1::/48 gw fe80::1:1 dev eth1route -A inet6 2001:db8:2::/48 gw fe80::2:1 dev eth1eth1 fe80::1/64eth0 2001:db8::1/64containers' link-local addresses are not displayedroute -A inet6 2001:db8:1:1::/64 \    dev docker0route -A inet6 2001:db8:2:1::/64 \    dev docker0managed by Docker \ No newline at end of file +RouterHost1Host2eth02001:db8:1:0::1/64fe80::1:1/64eth02001:db8:2:0::1/64fe80::2:1/64docker0fe80::1/64docker0fe80::1/64Container1-1Container1-2eth02001:db8:1:1::1/64Container2-1Container2-2ip -6routeadddefaultviafe80::1 \deveth0ip-6routeadddefaultviafe80::1deveth0ip-6routeadddefaultviafe80::1deveth0ip -6routeadddefaultviafe80::1 \deveth0eth02001:db8:1:1::2/64eth02001:db8:2:1::1/64eth02001:db8:2:1::2/64ip -6routeadddefaultviafe80::1deveth0ip -6routeadd2001:db8:1::/48viafe80::1:1deveth1ip -6routeadd2001:db8:2::/48viafe80::2:1deveth1eth1fe80::1/64eth02001:db8::1/64containers'link-localaddressesarenotdisplayedip -6routeadd2001:db8:1:1::/64 \devdocker0ip -6routeadd2001:db8:2:1::/64 \devdocker0managedbyDocker \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_slash64_subnet_config.gliffy b/docs/sources/article-img/ipv6_slash64_subnet_config.gliffy index efafc02efc..6914fd074d 100644 --- a/docs/sources/article-img/ipv6_slash64_subnet_config.gliffy +++ b/docs/sources/article-img/ipv6_slash64_subnet_config.gliffy @@ -1 +1 @@ -{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":550,"height":341,"nodeIndex":88,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":false,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":2.5,"y":2.5},"max":{"x":550,"y":341}},"objects":[{"x":10.5,"y":53.5,"rotation":0.0,"id":74,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":37.0,"y":2.5,"rotation":0.0,"id":72,"width":100.0,"height":46.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#d9d9d9","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":73,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Router

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":89.5,"y":83.5,"rotation":0.0,"id":59,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Routed Network:
    2001:db8::/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":313.0,"y":313.0,"rotation":0.0,"id":39,"width":235.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":352.0,"y":185.5,"rotation":0.0,"id":36,"width":169.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:0:0:1::2/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":351.0,"y":49.5,"rotation":0.0,"id":29,"width":171.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:0:0:1::1/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":382.1250000000001,"y":202.5,"rotation":0.0,"id":30,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":12,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":31,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":382.0,"y":65.5,"rotation":0.0,"id":32,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":10,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":33,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":15.125000000000057,"y":261.0,"rotation":0.0,"id":20,"width":273.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    route -A inet6 2001:db8:0:0:1::/80 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":120.0,"y":178.5,"rotation":0.0,"id":21,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":8,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":13.0,"y":132.5,"rotation":0.0,"id":22,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8::1/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":38.0,"y":149.0,"rotation":0.0,"id":23,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":5,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":24,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":-118.0,"y":123.0,"rotation":0.0,"id":44,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":4,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.7071067811865475,"px":0.9999999999999998}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":30,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[255.99999999999997,79.03300858899107],[500.1250000000001,129.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":-138.0,"y":129.0,"rotation":0.0,"id":43,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":3,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":32,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[276.0,41.966991411008934],[520.0,-13.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":313.0,"y":40.0,"rotation":0.0,"id":34,"width":237.00000000000003,"height":301.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":87.0,"y":150.0,"rotation":0.0,"id":58,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":1,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":72,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[1.0,-1.0],[0.0,-101.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":2.5,"y":118.50000000000001,"rotation":0.0,"id":25,"width":292.0,"height":178.99999999999997,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]}],"shapeStyles":{},"lineStyles":{"global":{"stroke":"#cccccc"}},"textStyles":{"global":{"bold":true,"italic":true}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v1.default","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v2.forms_components","com.gliffy.libraries.network.network_v3.home","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":550,"height":341,"nodeIndex":88,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":false,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":2.5,"y":2.5},"max":{"x":550,"y":341}},"objects":[{"x":10.5,"y":53.5,"rotation":0.0,"id":74,"width":150.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":37.0,"y":2.5,"rotation":0.0,"id":72,"width":100.0,"height":46.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#d9d9d9","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":73,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Router

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":89.5,"y":83.5,"rotation":0.0,"id":59,"width":150.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Routed Network:
    2001:db8:23:42::/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":313.0,"y":314.0,"rotation":0.0,"id":39,"width":235.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":352.0,"y":185.5,"rotation":0.0,"id":36,"width":169.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:23:42:1::2/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":351.0,"y":49.5,"rotation":0.0,"id":29,"width":171.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:23:42:1::1/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":382.1250000000001,"y":202.5,"rotation":0.0,"id":30,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":12,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":31,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":382.0,"y":65.5,"rotation":0.0,"id":32,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":10,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":33,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":15.125000000000057,"y":264.0,"rotation":0.0,"id":20,"width":273.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ip -6 route add 2001:db8:23:42:1::/80 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":120.0,"y":178.5,"rotation":0.0,"id":21,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":8,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":13.0,"y":132.5,"rotation":0.0,"id":22,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:23:42::1/80

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":38.0,"y":149.0,"rotation":0.0,"id":23,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":5,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":24,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":-118.0,"y":123.0,"rotation":0.0,"id":44,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":4,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.7071067811865475,"px":0.9999999999999998}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":30,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[255.99999999999997,79.03300858899107],[500.1250000000001,129.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":-138.0,"y":129.0,"rotation":0.0,"id":43,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":3,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":32,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[276.0,41.966991411008934],[520.0,-13.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":313.0,"y":40.0,"rotation":0.0,"id":34,"width":237.00000000000003,"height":301.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":87.0,"y":150.0,"rotation":0.0,"id":58,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":1,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":23,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":72,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[1.0,-1.0],[0.0,-101.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":2.5,"y":118.50000000000001,"rotation":0.0,"id":25,"width":292.0,"height":178.99999999999997,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]}],"shapeStyles":{},"lineStyles":{"global":{"stroke":"#cccccc"}},"textStyles":{"global":{"bold":true,"italic":true}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v1.default","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v2.forms_components","com.gliffy.libraries.network.network_v3.home","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_slash64_subnet_config.svg b/docs/sources/article-img/ipv6_slash64_subnet_config.svg index c731eddd35..70b140e2dc 100644 --- a/docs/sources/article-img/ipv6_slash64_subnet_config.svg +++ b/docs/sources/article-img/ipv6_slash64_subnet_config.svg @@ -1 +1 @@ -host1eth0 2001:db8::1/80docker0 fe80::1/64route -A inet6 default gw fe80::1 dev eth0route -A inet6 2001:db8:0:0:1::/80 dev docker0container1-1container1-2eth0 2001:db8:0:0:1::1/80eth0 2001:db8:0:0:1::2/80route -A inet6 default gw fe80::1 dev eth0Routed Network:2001:db8::/64Routerfe80::1/64 \ No newline at end of file +host1eth02001:db8:23:42::1/80docker0fe80::1/64ip -6routeadddefaultviafe80::1deveth0ip-6routeadd2001:db8:23:42:1::/80devdocker0container1-1container1-2eth02001:db8:23:42:1::1/80eth02001:db8:23:42:1::2/80ip-6routeadddefaultviafe80::1deveth0RoutedNetwork:2001:db8:23:42::/64Routerfe80::1/64 \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_switched_network_example.gliffy b/docs/sources/article-img/ipv6_switched_network_example.gliffy index 7f2b73f186..75cbfcaadc 100644 --- a/docs/sources/article-img/ipv6_switched_network_example.gliffy +++ b/docs/sources/article-img/ipv6_switched_network_example.gliffy @@ -1 +1 @@ -{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":748,"height":448,"nodeIndex":182,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":-17.000680271168676,"y":5},"max":{"x":747.7683424505416,"y":447.5}},"objects":[{"x":17.5,"y":202.0,"rotation":0.0,"id":167,"width":204.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2001::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":231.28932188134524,"y":95.0,"rotation":0.0,"id":120,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":6,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":0.0,"px":0.2928932188134524}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"py":1.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[196.5,47.5],[151.9213562373095,-15.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":187.0,"y":206.5,"rotation":0.0,"id":121,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":9,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":140,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":148,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[66.28932188134524,11.0],[-92.0,91.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":174.0,"y":217.5,"rotation":0.0,"id":122,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":8,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":140,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":146,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[100.0,0.0],[82.0,80.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":3.5000000000000284,"y":408.0,"rotation":0.0,"id":123,"width":346.49999999999994,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":3.5000000000000284,"y":268.5,"rotation":0.0,"id":124,"width":346.49999999999994,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":237.0,"y":54.0,"rotation":0.0,"id":125,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":7,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":131,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":140,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[104.78932188134524,25.999999999999986],[57.710678118654755,88.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":68.5,"y":86.5,"rotation":0.0,"id":126,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":5,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":156,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[400.71067811865476,131.0],[560.0,211.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":29.5,"y":90.5,"rotation":0.0,"id":127,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":4,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":153,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[419.0,127.0],[431.0,207.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":312.5,"y":5.0,"rotation":0.0,"id":131,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":10,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#e2e2e2","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":132,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Level 2 Switch

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":785.0,"y":195.0,"rotation":0.0,"id":136,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":32,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":143,"py":0.6187943262411347,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,8.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-69.25,-0.25],[-798.0006802711687,-3.410605131648481E-13]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":199.0,"y":224.0,"rotation":0.0,"id":138,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":229.0,"y":126.0,"rotation":0.0,"id":139,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2000::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":224.0,"y":142.5,"rotation":0.0,"id":140,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":12,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":141,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":3.4999999999999716,"y":107.5,"rotation":0.0,"id":142,"width":346.50000000000006,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":376.75,"y":107.5,"rotation":0.0,"id":143,"width":339.0,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":181.0,"y":281.0,"rotation":0.0,"id":144,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":20.000000000000014,"y":281.0,"rotation":0.0,"id":145,"width":149.99999999999997,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":206.0,"y":298.0,"rotation":0.0,"id":146,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":22,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":147,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":45.0,"y":298.0,"rotation":0.0,"id":148,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":20,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":149,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":387.0,"y":281.0,"rotation":0.0,"id":150,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2002::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":376.75,"y":268.5,"rotation":0.0,"id":151,"width":339.75,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":376.75,"y":407.0,"rotation":0.0,"id":152,"width":339.75,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 default gw fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":410.5,"y":298.0,"rotation":0.0,"id":153,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":25,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":154,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":555.0,"y":281.0,"rotation":0.0,"id":155,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2002::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":578.5,"y":298.0,"rotation":0.0,"id":156,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":27,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":157,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":251.0,"y":436.5,"rotation":0.0,"id":158,"width":223.00000000000003,"height":11.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    containers' link-local addresses are not displayed

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":403.5,"y":126.0,"rotation":0.0,"id":159,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2000::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":373.5,"y":223.0,"rotation":0.0,"id":160,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":398.5,"y":142.5,"rotation":0.0,"id":161,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":162,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":17.5,"y":143.5,"rotation":0.0,"id":137,"width":291.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2000::/64 dev eth0

    route -A inet6 2002::/64 gw 2000::2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":507.5,"y":144.0,"rotation":0.0,"id":135,"width":209.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2000::/64 dev eth0

    route -A inet6 2001::/64 gw 2000::1 

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":508.0,"y":195.0,"rotation":0.0,"id":168,"width":204.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":39,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    route -A inet6 2002::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":756.7500000000001,"y":195.0,"rotation":0.0,"id":172,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-12.982306425886122,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":757.7500000000001,"y":432.0,"rotation":0.0,"id":171,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-13.981657549458532,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":654.7500000000001,"y":307.5,"rotation":270.0,"id":173,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    managed by Docker

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":738.7500000000001,"y":417.0,"rotation":0.0,"id":174,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":40,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,14.008510484195028],[0.0,-221.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#e2e2e2","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#000000","dashStyle":"8.0,8.0","strokeWidth":1}},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":893,"height":448,"nodeIndex":185,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":false,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":-17.000680271168676,"y":7},"max":{"x":892.767693574114,"y":447.5}},"objects":[{"x":17.5,"y":205.5,"rotation":0.0,"id":167,"width":238.5,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:1::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":231.28932188134524,"y":95.0,"rotation":0.0,"id":120,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":6,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":0.0,"px":0.2928932188134524}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"py":1.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[267.5,47.5],[217.9213562373095,-13.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":187.0,"y":206.5,"rotation":0.0,"id":121,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":9,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":140,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":148,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[130.28932188134524,11.0],[-79.0,91.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":174.0,"y":217.5,"rotation":0.0,"id":122,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":8,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":140,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":146,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[164.0,0.0],[120.0,81.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":33.50000000000003,"y":409.0,"rotation":0.0,"id":123,"width":346.49999999999994,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":3.5000000000000284,"y":268.5,"rotation":0.0,"id":124,"width":411.00000000000006,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":237.0,"y":54.0,"rotation":0.0,"id":125,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":7,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":131,"py":0.9999999999999998,"px":0.29289321881345254}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":140,"py":0.0,"px":0.7071067811865476}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[170.78932188134524,27.999999999999986],[121.71067811865476,88.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":378.5,"y":7.0,"rotation":0.0,"id":131,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":10,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#e2e2e2","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":132,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Level 2 Switch

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":785.0,"y":195.0,"rotation":0.0,"id":136,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":32,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":143,"py":0.6187943262411347,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,8.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[78.75000000000011,-0.25],[-798.0006802711687,-3.410605131648481E-13]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":262.0,"y":224.0,"rotation":0.0,"id":138,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":278.0,"y":126.0,"rotation":0.0,"id":139,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:0::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":288.0,"y":142.5,"rotation":0.0,"id":140,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":12,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":141,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":3.4999999999999716,"y":107.5,"rotation":0.0,"id":142,"width":411.0,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":221.0,"y":283.0,"rotation":0.0,"id":144,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":34.000000000000014,"y":283.0,"rotation":0.0,"id":145,"width":149.99999999999997,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:1::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":244.0,"y":299.0,"rotation":0.0,"id":146,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":22,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":147,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":58.0,"y":298.0,"rotation":0.0,"id":148,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":20,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":149,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container1-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":317.0,"y":436.5,"rotation":0.0,"id":158,"width":223.00000000000003,"height":11.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    containers' link-local addresses are not displayed

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":17.5,"y":148.0,"rotation":0.0,"id":137,"width":291.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:0::/64 dev eth0

    ip -6 route add 2001:db8:2::/64 via 2001:db8:0::2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":901.7500000000001,"y":195.0,"rotation":0.0,"id":172,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-12.982306425886122,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":670.0,"y":284.0,"rotation":0.0,"id":155,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":479.0,"y":284.0,"rotation":0.0,"id":150,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:2::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":488.75,"y":408.0,"rotation":0.0,"id":152,"width":339.75,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add default via fe80::1 dev eth0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":694.5,"y":298.0,"rotation":0.0,"id":156,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":27,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":157,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":501.5,"y":298.0,"rotation":0.0,"id":153,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.square","order":25,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#ead1dc","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":154,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Container2-1

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":444.5,"y":223.0,"rotation":0.0,"id":160,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    docker0 fe80::1/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":460.5,"y":128.0,"rotation":0.0,"id":159,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    eth0 2001:db8:0::2/64

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":469.5,"y":142.5,"rotation":0.0,"id":161,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#a4c2f4","gradient":true,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":162,"width":96.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    Host2

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":139.5,"y":86.5,"rotation":0.0,"id":126,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":5,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":156,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[400.71067811865476,131.0],[605.0,211.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":100.5,"y":90.5,"rotation":0.0,"id":127,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":4,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":161,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":153,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cccccc","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[419.0,127.0],[451.0,207.5]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":447.75,"y":268.5,"rotation":0.0,"id":151,"width":416.0000000000001,"height":163.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":447.75,"y":107.5,"rotation":0.0,"id":143,"width":416.0000000000001,"height":141.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":"2,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":795.7500000000001,"y":307.5,"rotation":270.0,"id":173,"width":150.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    managed by Docker

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":879.7500000000001,"y":417.0,"rotation":0.0,"id":174,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":40,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,14.008510484195028],[0.0,-221.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":898.7500000000001,"y":432.0,"rotation":0.0,"id":171,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-13.981657549458532,0.0],[-41.25,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":582.5,"y":151.0,"rotation":0.0,"id":135,"width":285.25000000000017,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:0::/64 dev eth0

    ip -6 route add 2001:db8:1::/64 via 2001:db8:0::1 

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":583.0,"y":204.0,"rotation":0.0,"id":168,"width":272.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":39,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

    ip -6 route add 2001:db8:2::/64 dev docker0

    ","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#e2e2e2","stroke":"#333333","strokeWidth":2,"dashStyle":"2.0,2.0","gradient":true,"shadow":true}},"lineStyles":{"global":{"stroke":"#000000","strokeWidth":1,"dashStyle":"8.0,8.0"}},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/docs/sources/article-img/ipv6_switched_network_example.svg b/docs/sources/article-img/ipv6_switched_network_example.svg index 5c391c24ad..4cbf709b13 100644 --- a/docs/sources/article-img/ipv6_switched_network_example.svg +++ b/docs/sources/article-img/ipv6_switched_network_example.svg @@ -1 +1 @@ -Level 2 SwitchHost1Host2eth0 2000::1/64eth0 2000::2/64docker0 fe80::1/64docker0 fe80::1/64Container1-1Container1-2eth0 2001::1/64Container2-1Container2-2route -A inet6 2000::/64 dev eth0route -A inet6 2002::/64 gw 2000::2route -A inet6 default gw fe80::1 dev eth0route -A inet6 default gw fe80::1 dev eth0route -A inet6 2000::/64 dev eth0route -A inet6 2001::/64 gw 2000::1 eth0 2001::2/64eth0 2002::1/64eth0 2002::2/64containers' link-local addresses are not displayedroute -A inet6 2001::/64 dev docker0route -A inet6 2002::/64 dev docker0managed by Docker \ No newline at end of file +Level2SwitchHost1Host2eth02001:db8:0::1/64eth02001:db8:0::2/64docker0fe80::1/64docker0fe80::1/64Container1-1Container1-2eth02001:db8:1::1/64Container2-1Container2-2ip -6routeadd2001:db8:0::/64deveth0ip -6routeadd2001:db8:2::/64via2001:db8:0::2ip-6routeadddefaultviafe80::1deveth0ip-6routeadddefaultviafe80::1deveth0ip -6routeadd2001:db8:0::/64deveth0ip -6routeadd2001:db8:1::/64via2001:db8:0::1eth02001:db8:1::2/64eth02001:db8:2::1/64eth02001:db8:2::2/64containers'link-localaddressesarenotdisplayedip -6routeadd2001:db8:1::/64devdocker0ip -6routeadd2001:db8:2::/64devdocker0managedbyDocker \ No newline at end of file diff --git a/docs/sources/articles/dockerfile_best-practices.md b/docs/sources/articles/dockerfile_best-practices.md index 21334c16e4..2ea796582d 100644 --- a/docs/sources/articles/dockerfile_best-practices.md +++ b/docs/sources/articles/dockerfile_best-practices.md @@ -65,7 +65,7 @@ uses. Be strategic and cautious about the number of layers you use. Whenever possible, ease later changes by sorting multi-line arguments alphanumerically. This will help you avoid duplication of packages and make the list much easier to update. This also makes PRs a lot easier to read and -review. Adding a space before a backslash (`\`) helps as well. +review. Adding a space before a backslash (`\`) helps as well. Here’s an example from the [`buildpack-deps` image](https://github.com/docker-library/buildpack-deps): @@ -291,32 +291,32 @@ auto-extraction capability, you should always use `COPY`. ### [`ENTRYPOINT`](https://docs.docker.com/reference/builder/#entrypoint) -The best use for `ENTRYPOINT` is as a helper script. Using `ENTRYPOINT` for -other tasks can make your code harder to understand. For example, +The best use for `ENTRYPOINT` is to set the image's main command, allowing that +image to be run as though it was that command (and then use `CMD` as the +default flags). -....docker run -it official-image bash +Let's start with an example of an image for the command line tool `s3cmd`: -is much easier to understand than + ENTRYPOINT ["s3cmd"] + CMD ["--help"] -....docker run -it --entrypoint bash official-image -i +Now the image can be run like this to show the command's help: -This is especially true for new Docker users, who might naturally assume the -above command will work fine. In cases where an image uses `ENTRYPOINT` for -anything other than just a wrapper script, the command will fail and the -beginning user will then be forced to learn about `ENTRYPOINT` and -`--entrypoint`. + $ docker run s3cmd -In order to avoid a situation where commands are run without clear visibility -to the user, make sure your script ends with something like `exec "$@"` (see -[the exec builtin command](http://wiki.bash-hackers.org/commands/builtin/exec)). -After the entrypoint completes, the script will transparently bootstrap the command -invoked by the user, making what has been run clear to the user (for example, -`docker run -it mysql mysqld --some --flags` will transparently run -`mysqld --some --flags` after `ENTRYPOINT` runs `initdb`). +Or using the right parameters to execute a command: -For example, let’s look at the `Dockerfile` for the -[Postgres Official Image](https://github.com/docker-library/postgres). -It refers to the following script: + $ docker run s3cmd ls s3://mybucket + +This is useful because the image name can double as a reference to the binary as +shown in the command above. + +The `ENTRYPOINT` instruction can also be used in combination with a helper +script, allowing it to function in a similar way to the command above, even +when starting the tool may require more than one step. + +For example, the [Postgres Official Image](https://registry.hub.docker.com/_/postgres/) +uses the following script as its `ENTRYPOINT`: ```bash #!/bin/bash @@ -335,12 +335,34 @@ fi exec "$@" ``` -That script then gets copied into the container and run via `ENTRYPOINT` on -container startup: +> **Note**: +> This script uses [the `exec` Bash command](http://wiki.bash-hackers.org/commands/builtin/exec) +> so that the final running application becomes the container's PID 1. This allows +> the application to receive any Unix signals sent to the container. +> See the [`ENTRYPOINT`](https://docs.docker.com/reference/builder/#ENTRYPOINT) +> help for more details. + + +The helper script is copied into the container and run via `ENTRYPOINT` on +container start: COPY ./docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] +This script allows the user to interact with Postgres in several ways. + +It can simply start Postgres: + + $ docker run postgres + +Or, it can be used to run Postgres and pass parameters to the server: + + $ docker run postgres postgres --help + +Lastly, it could also be used to start a totally different tool, such Bash: + + $ docker run --rm -it postgres bash + ### [`VOLUME`](https://docs.docker.com/reference/builder/#volume) The `VOLUME` instruction should be used to expose any database storage area, diff --git a/docs/sources/articles/dsc.md b/docs/sources/articles/dsc.md index 8d75b8f816..18cbc0a8e9 100644 --- a/docs/sources/articles/dsc.md +++ b/docs/sources/articles/dsc.md @@ -43,7 +43,7 @@ More detailed usage information can be found at The Docker installation configuration is equivalent to running: ``` -apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys\ +apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys\ 36A1D7869245C8950F966E92D8576A8BA88D21E9 sh -c "echo deb https://get.docker.com/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list" diff --git a/docs/sources/articles/host_integration.md b/docs/sources/articles/host_integration.md index 89fd2a1f7a..cbcb21a357 100644 --- a/docs/sources/articles/host_integration.md +++ b/docs/sources/articles/host_integration.md @@ -59,12 +59,11 @@ a new service that will be started after the docker daemon service has started. /usr/bin/docker start -a redis_server end script - ### systemd [Unit] Description=Redis container - Author=Me + Requires=docker.service After=docker.service [Service] @@ -74,3 +73,14 @@ a new service that will be started after the docker daemon service has started. [Install] WantedBy=local.target + +If you need to pass options to the redis container (such as `--env`), +then you'll need to use `docker run` rather than `docker start`. This will +create a new container every time the service is started, which will be stopped +and removed when the service is stopped. + + [Service] + ... + ExecStart=/usr/bin/docker run --env foo=bar --name redis_server redis + ExecStop=/usr/bin/docker stop -t 2 redis_server ; /usr/bin/docker rm -f redis_server + ... diff --git a/docs/sources/articles/https.md b/docs/sources/articles/https.md index b65ec667a1..94d9ca3f22 100644 --- a/docs/sources/articles/https.md +++ b/docs/sources/articles/https.md @@ -71,8 +71,14 @@ name) matches the hostname you will use to connect to Docker: Next, we're going to sign the public key with our CA: +Since TLS connections can be made via IP address as well as DNS name, they need +to be specified when creating the certificate. For example, to allow connections +using `10.10.10.20` and `127.0.0.1`: + + $ echo subjectAltName = IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf + $ openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem \ - -CAcreateserial -out server-cert.pem + -CAcreateserial -out server-cert.pem -extfile extfile.cnf Signature ok subject=/CN=your.host.com Getting CA Private Key diff --git a/docs/sources/articles/https/Dockerfile b/docs/sources/articles/https/Dockerfile index 494aa30305..a3cc132c51 100644 --- a/docs/sources/articles/https/Dockerfile +++ b/docs/sources/articles/https/Dockerfile @@ -6,5 +6,5 @@ ADD make_certs.sh / WORKDIR /data -VOLUMES ["/data"] +VOLUME ["/data"] CMD /make_certs.sh diff --git a/docs/sources/articles/https/Makefile b/docs/sources/articles/https/Makefile index b751c1e43f..f06e0d256e 100644 --- a/docs/sources/articles/https/Makefile +++ b/docs/sources/articles/https/Makefile @@ -4,11 +4,11 @@ HOST:=boot2docker makescript: ./parsedocs.sh > make_certs.sh -build: makescript +build: clean makescript docker build -t makecerts . cert: build - docker run --rm -it -v $(CURDIR):/data -e HOST=$(HOST) makecerts + docker run --rm -it -v $(CURDIR):/data -e HOST=$(HOST) -e YOUR_PUBLIC_IP=$(shell ip a | grep "inet " | sed "s/.*inet \([0-9.]*\)\/.*/\1/" | xargs echo | sed "s/ /,IP:/g") makecerts certs: cert @@ -18,7 +18,7 @@ run: client: sudo docker --tls --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$(HOST):6666 version sudo docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$(HOST):6666 info - sudo curl https://$(HOST):6666/images/json --cert cert.pem --key key.pem --cacert ca.pem + sudo curl https://$(HOST):6666/images/json --cert ./cert.pem --key ./key.pem --cacert ./ca.pem clean: - rm ca-key.pem ca.pem ca.srl cert.pem client.csr extfile.cnf key.pem server-cert.pem server-key.pem server.csr + rm -f ca-key.pem ca.pem ca.srl cert.pem client.csr extfile.cnf key.pem server-cert.pem server-key.pem server.csr extfile.cnf diff --git a/docs/sources/articles/https/make_certs.sh b/docs/sources/articles/https/make_certs.sh index 85b7ae153c..39001fdb50 100755 --- a/docs/sources/articles/https/make_certs.sh +++ b/docs/sources/articles/https/make_certs.sh @@ -1,23 +1,23 @@ -#!/bin/bash - +#!/bin/sh openssl genrsa -aes256 -out ca-key.pem 2048 - -echo "enter your Docker daemon's hostname as the 'Common Name'= ($HOST)" - -#TODO add this as an ENV to docker run? openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem - - -# server cert openssl genrsa -out server-key.pem 2048 openssl req -subj "/CN=$HOST" -new -key server-key.pem -out server.csr -openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem \ - -CAcreateserial -out server-cert.pem - -#client cert +echo subjectAltName = IP:$YOUR_PUBLIC_IP > extfile.cnf +openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf openssl genrsa -out key.pem 2048 openssl req -subj '/CN=client' -new -key key.pem -out client.csr - echo extendedKeyUsage = clientAuth > extfile.cnf -openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem \ - -CAcreateserial -out cert.pem -extfile extfile.cnf +openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf +rm -v client.csr server.csr +chmod -v 0400 ca-key.pem key.pem server-key.pem +chmod -v 0444 ca.pem server-cert.pem cert.pem +# docker -d --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:7778 +# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:7778 version +mkdir -pv ~/.docker +cp -v {ca,cert,key}.pem ~/.docker +export DOCKER_HOST=tcp://$HOST:7778 DOCKER_TLS_VERIFY=1 +# docker ps +export DOCKER_CERT_PATH=~/.docker/zone1/ +# docker --tlsverify ps +# curl https://$HOST:7778/images/json --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem diff --git a/docs/sources/articles/networking.md b/docs/sources/articles/networking.md index 03693eb4d8..7247d298d8 100644 --- a/docs/sources/articles/networking.md +++ b/docs/sources/articles/networking.md @@ -183,12 +183,36 @@ Four different options affect container domain name services. only look up `host` but also `host.example.com`. Use `--dns-search=.` if you don't wish to set the search domain. -Note that Docker, in the absence of either of the last two options -above, will make `/etc/resolv.conf` inside of each container look like -the `/etc/resolv.conf` of the host machine where the `docker` daemon is -running. You might wonder what happens when the host machine's +Regarding DNS settings, in the absence of either the `--dns=IP_ADDRESS...` +or the `--dns-search=DOMAIN...` option, Docker makes each container's +`/etc/resolv.conf` look like the `/etc/resolv.conf` of the host machine (where +the `docker` daemon runs). When creating the container's `/etc/resolv.conf`, +the daemon filters out all localhost IP address `nameserver` entries from +the host's original file. + +Filtering is necessary because all localhost addresses on the host are +unreachable from the container's network. After this filtering, if there +are no more `nameserver` entries left in the container's `/etc/resolv.conf` +file, the daemon adds public Google DNS nameservers +(8.8.8.8 and 8.8.4.4) to the container's DNS configuration. If IPv6 is +enabled on the daemon, the public IPv6 Google DNS nameservers will also +be added (2001:4860:4860::8888 and 2001:4860:4860::8844). + +> **Note**: +> If you need access to a host's localhost resolver, you must modify your +> DNS service on the host to listen on a non-localhost address that is +> reachable from within the container. + +You might wonder what happens when the host machine's `/etc/resolv.conf` file changes. The `docker` daemon has a file change notifier active which will watch for changes to the host DNS configuration. + +> **Note**: +> The file change notifier relies on the Linux kernel's inotify feature. +> Because this feature is currently incompatible with the overlay filesystem +> driver, a Docker daemon using "overlay" will not be able to take advantage +> of the `/etc/resolv.conf` auto-update feature. + When the host file changes, all stopped containers which have a matching `resolv.conf` to the host will be updated immediately to this newest host configuration. Containers which are running when the host configuration @@ -221,13 +245,11 @@ Whether a container can talk to the world is governed by two factors. Docker will go set `ip_forward` to `1` for you when the server starts up. To check the setting or turn it on manually: - ``` - $ cat /proc/sys/net/ipv4/ip_forward - 0 - $ echo 1 > /proc/sys/net/ipv4/ip_forward - $ cat /proc/sys/net/ipv4/ip_forward - 1 - ``` + $ sysctl net.ipv4.conf.all.forwarding + net.ipv4.conf.all.forwarding = 0 + $ sysctl net.ipv4.conf.all.forwarding=1 + $ sysctl net.ipv4.conf.all.forwarding + net.ipv4.conf.all.forwarding = 1 Many using Docker will want `ip_forward` to be on, to at least make communication *possible* between containers and @@ -363,17 +385,18 @@ to provide special options when invoking `docker run`. These options are covered in more detail in the [Docker User Guide](/userguide/dockerlinks) page. There are two approaches. -First, you can supply `-P` or `--publish-all=true|false` to `docker run` -which is a blanket operation that identifies every port with an `EXPOSE` -line in the image's `Dockerfile` and maps it to a host port somewhere in -the range 49153–65535. This tends to be a bit inconvenient, since you -then have to run other `docker` sub-commands to learn which external -port a given service was mapped to. +First, you can supply `-P` or `--publish-all=true|false` to `docker run` which +is a blanket operation that identifies every port with an `EXPOSE` line in the +image's `Dockerfile` or `--expose ` commandline flag and maps it to a +host port somewhere within an *ephemeral port range*. The `docker port` command +then needs to be used to inspect created mapping. The *ephemeral port range* is +configured by `/proc/sys/net/ipv4/ip_local_port_range` kernel parameter, +typically ranging from 32768 to 61000. -More convenient is the `-p SPEC` or `--publish=SPEC` option which lets -you be explicit about exactly which external port on the Docker server — -which can be any port at all, not just those in the 49153-65535 block — -you want mapped to which port in the container. +Mapping can be specified explicitly using `-p SPEC` or `--publish=SPEC` option. +It allows you to particularize which port on docker server - which can be any +port at all, not just one within the *ephemeral port range* — you want mapped +to which port in the container. Either way, you should be able to peek at what Docker has accomplished in your network stack by examining your NAT tables. @@ -433,7 +456,7 @@ To assign globally routable IPv6 addresses to your containers you have to specify an IPv6 subnet to pick the addresses from. Set the IPv6 subnet via the `--fixed-cidr-v6` parameter when starting Docker daemon: - docker -d --ipv6 --fixed-cidr-v6="2001:db8:0:2::/64" + docker -d --ipv6 --fixed-cidr-v6="2001:db8:1::/64" The subnet for Docker containers should at least have a size of `/80`. This way an IPv6 address can end with the container's MAC address and you prevent NDP @@ -443,11 +466,11 @@ With the `--fixed-cidr-v6` parameter set Docker will add a new route to the routing table. Further IPv6 routing will be enabled (you may prevent this by starting Docker daemon with `--ip-forward=false`): - $ route -A inet6 add 2001:db8:0:2::/64 dev docker0 - $ echo 1 > /proc/sys/net/ipv6/conf/default/forwarding - $ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding + $ ip -6 route add 2001:db8:1::/64 dev docker0 + $ sysctl net.ipv6.conf.default.forwarding=1 + $ sysctl net.ipv6.conf.all.forwarding=1 -All traffic to the subnet `2001:db8:0:2::/64` will now be routed +All traffic to the subnet `2001:db8:1::/64` will now be routed via the `docker0` interface. Be aware that IPv6 forwarding may interfere with your existing IPv6 @@ -456,54 +479,104 @@ your host's interfaces you should set `accept_ra` to `2`. Otherwise IPv6 enabled forwarding will result in rejecting Router Advertisements. E.g., if you want to configure `eth0` via Router Advertisements you should set: - ``` - $ echo 2 > /proc/sys/net/ipv6/conf/eth0/accept_ra - ``` + $ sysctl net.ipv6.conf.eth0.accept_ra=2 ![](/article-img/ipv6_basic_host_config.svg) Every new container will get an IPv6 address from the defined subnet. Further a default route will be added via the gateway `fe80::1` on `eth0`: - docker run -it ubuntu bash -c "ifconfig eth0; route -A inet6" + docker run -it ubuntu bash -c "ip -6 addr show dev eth0; ip -6 route show" - eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 - inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 - inet6 addr: 2001:db8:0:2::1/64 Scope:Global - inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link - UP BROADCAST MTU:1500 Metric:1 - RX packets:1 errors:0 dropped:0 overruns:0 frame:0 - TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:0 - RX bytes:110 (110.0 B) TX bytes:110 (110.0 B) + 15: eth0: mtu 1500 + inet6 2001:db8:1:0:0:242:ac11:3/64 scope global + valid_lft forever preferred_lft forever + inet6 fe80::42:acff:fe11:3/64 scope link + valid_lft forever preferred_lft forever - Kernel IPv6 routing table - Destination Next Hop Flag Met Ref Use If - 2001:db8:0:2::/64 :: U 256 0 0 eth0 - fe80::/64 :: U 256 0 0 eth0 - ::/0 fe80::1 UG 1024 0 0 eth0 - ::/0 :: !n -1 1 1 lo - ::1/128 :: Un 0 1 0 lo - ff00::/8 :: U 256 1 0 eth0 - ::/0 :: !n -1 1 1 lo + 2001:db8:1::/64 dev eth0 proto kernel metric 256 + fe80::/64 dev eth0 proto kernel metric 256 + default via fe80::1 dev eth0 metric 1024 In this example the Docker container is assigned a link-local address with the -network suffix `/64` (here: `fe80::42:acff:fe11:2/64`) and a globally routable -IPv6 address (here: `2001:db8:0:2::1/64`). The container will create connections -to addresses outside of the `2001:db8:0:2::/64` network via the link-local -gateway at `fe80::1` on `eth0`. +network suffix `/64` (here: `fe80::42:acff:fe11:3/64`) and a globally routable +IPv6 address (here: `2001:db8:1:0:0:242:ac11:3/64`). The container will create +connections to addresses outside of the `2001:db8:1::/64` network via the +link-local gateway at `fe80::1` on `eth0`. -Often servers or virtual machines get a `/64` IPv6 subnet assigned. In this case -you can split it up further and provide Docker a `/80` subnet while using a -separate `/80` subnet for other applications on the host: +Often servers or virtual machines get a `/64` IPv6 subnet assigned (e.g. +`2001:db8:23:42::/64`). In this case you can split it up further and provide +Docker a `/80` subnet while using a separate `/80` subnet for other +applications on the host: ![](/article-img/ipv6_slash64_subnet_config.svg) -In this setup the subnet `2001:db8::/80` with a range from `2001:db8::0:0:0:0` -to `2001:db8::0:ffff:ffff:ffff` is attached to `eth0`, with the host listening -at `2001:db8::1`. The subnet `2001:db8:0:0:0:1::/80` with an address range from -`2001:db8::1:0:0:0` to `2001:db8::1:ffff:ffff:ffff` is attached to `docker0` and -will be used by containers. +In this setup the subnet `2001:db8:23:42::/80` with a range from `2001:db8:23:42:0:0:0:0` +to `2001:db8:23:42:0:ffff:ffff:ffff` is attached to `eth0`, with the host listening +at `2001:db8:23:42::1`. The subnet `2001:db8:23:42:1::/80` with an address range from +`2001:db8:23:42:1:0:0:0` to `2001:db8:23:42:1:ffff:ffff:ffff` is attached to +`docker0` and will be used by containers. + +#### Using NDP proxying + +If your Docker host is only part of an IPv6 subnet but has not got an IPv6 +subnet assigned you can use NDP proxying to connect your containers via IPv6 to +the internet. +For example your host has the IPv6 address `2001:db8::c001`, is part of the +subnet `2001:db8::/64` and your IaaS provider allows you to configure the IPv6 +addresses `2001:db8::c000` to `2001:db8::c00f`: + + $ ip -6 addr show + 1: lo: mtu 65536 + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qlen 1000 + inet6 2001:db8::c001/64 scope global + valid_lft forever preferred_lft forever + inet6 fe80::601:3fff:fea1:9c01/64 scope link + valid_lft forever preferred_lft forever + +Let's split up the configurable address range into two subnets +`2001:db8::c000/125` and `2001:db8::c008/125`. The first one can be used by the +host itself, the latter by Docker: + + docker -d --ipv6 --fixed-cidr-v6 2001:db8::c008/125 + +You notice the Docker subnet is within the subnet managed by your router that +is connected to `eth0`. This means all devices (containers) with the addresses +from the Docker subnet are expected to be found within the router subnet. +Therefore the router thinks it can talk to these containers directly. + +![](/article-img/ipv6_ndp_proxying.svg) + +As soon as the router wants to send an IPv6 packet to the first container it +will transmit a neighbor solicitation request, asking, who has +`2001:db8::c009`? But it will get no answer because noone on this subnet has +this address. The container with this address is hidden behind the Docker host. +The Docker host has to listen to neighbor solication requests for the container +address and send a response that itself is the device that is responsible for +the address. This is done by a Kernel feature called `NDP Proxy`. You can +enable it by executing + + $ sysctl net.ipv6.conf.eth0.proxy_ndp=1 + +Now you can add the container's IPv6 address to the NDP proxy table: + + $ ip -6 neigh add proxy 2001:db8::c009 dev eth0 + +This command tells the Kernel to answer to incoming neighbor solicitation requests +regarding the IPv6 address `2001:db8::c009` on the device `eth0`. As a +consequence of this all traffic to this IPv6 address will go into the Docker +host and it will forward it according to its routing table via the `docker0` +device to the container network: + + $ ip -6 route show + 2001:db8::c008/125 dev docker0 metric 1 + 2001:db8::/64 dev eth0 proto kernel metric 256 + +You have to execute the `ip -6 neigh add proxy ...` command for every IPv6 +address in your Docker subnet. Unfortunately there is no functionality for +adding a whole subnet by executing one command. ### Docker IPv6 Cluster @@ -514,29 +587,29 @@ example: ![](/article-img/ipv6_switched_network_example.svg) -The Docker hosts are in the `2000::/64` subnet. Host1 is configured -to provide addresses from the `2001::/64` subnet to its containers. It has three -routes configured: +The Docker hosts are in the `2001:db8:0::/64` subnet. Host1 is configured +to provide addresses from the `2001:db8:1::/64` subnet to its containers. It +has three routes configured: -- Route all traffic to `2000::/64` via `eth0` -- Route all traffic to `2001::/64` via `docker0` -- Route all traffic to `2002::/64` via Host2 with IP `2000::2` +- Route all traffic to `2001:db8:0::/64` via `eth0` +- Route all traffic to `2001:db8:1::/64` via `docker0` +- Route all traffic to `2001:db8:2::/64` via Host2 with IP `2001:db8::2` Host1 also acts as a router on OSI layer 3. When one of the network clients tries to contact a target that is specified in Host1's routing table Host1 will forward the traffic accordingly. It acts as a router for all networks it knows: -`2000:/64`, `2001:/64` and `2002::/64`. +`2001:db8::/64`, `2001:db8:1::/64` and `2001:db8:2::/64`. -On Host2 we have nearly the same configuration. Host2's containers will get IPv6 -addresses from `2002::/64`. Host2 has three routes configured: +On Host2 we have nearly the same configuration. Host2's containers will get +IPv6 addresses from `2001:db8:2::/64`. Host2 has three routes configured: -- Route all traffic to `2000::/64` via `eth0` -- Route all traffic to `2002::/64` via `docker0` -- Route all traffic to `2001::/64` via Host1 with IP `2000::1` +- Route all traffic to `2001:db8:0::/64` via `eth0` +- Route all traffic to `2001:db8:2::/64` via `docker0` +- Route all traffic to `2001:db8:1::/64` via Host1 with IP `2001:db8:0::1` -The difference to Host1 is that the network `2002::/64` is directly attached to -the host via its `docker0` interface whereas it reaches `2001::/64` via Host1's -IPv6 address `2000::1`. +The difference to Host1 is that the network `2001:db8:2::/64` is directly +attached to the host via its `docker0` interface whereas it reaches +`2001:db8:1::/64` via Host1's IPv6 address `2001:db8::1`. This way every container is able to contact every other container. The containers `Container1-*` share the same subnet and contact each other directly. @@ -781,10 +854,11 @@ The steps with which Docker configures a container are: 5. Give the container's `eth0` a new IP address from within the bridge's range of network addresses, and set its default route to - the IP address that the Docker host owns on the bridge. If available - the IP address is generated from the MAC address. This prevents ARP - cache invalidation problems, when a new container comes up with an - IP used in the past by another container with another MAC. + the IP address that the Docker host owns on the bridge. The MAC + address is generated from the IP address unless otherwise specified. + This prevents ARP cache invalidation problems, when a new container + comes up with an IP used in the past by another container with another + MAC. With these steps complete, the container now possesses an `eth0` (virtual) network card and will find itself able to communicate with diff --git a/docs/sources/articles/registry_mirror.md b/docs/sources/articles/registry_mirror.md index a7493e9aec..adc470d713 100644 --- a/docs/sources/articles/registry_mirror.md +++ b/docs/sources/articles/registry_mirror.md @@ -50,7 +50,8 @@ port `5000` and mirrors the content at `registry-1.docker.io`: sudo docker run -p 5000:5000 \ -e STANDALONE=false \ -e MIRROR_SOURCE=https://registry-1.docker.io \ - -e MIRROR_SOURCE_INDEX=https://index.docker.io registry + -e MIRROR_SOURCE_INDEX=https://index.docker.io \ + registry ## Test it out diff --git a/docs/sources/contributing.md b/docs/sources/contributing.md deleted file mode 100644 index 0a1e4fd282..0000000000 --- a/docs/sources/contributing.md +++ /dev/null @@ -1,7 +0,0 @@ -# Contributing - -## Contents: - - - [Contributing to Docker](contributing/) - - [Setting Up a Dev Environment](devenvironment/) - diff --git a/docs/sources/contributing/contributing.md b/docs/sources/contributing/contributing.md deleted file mode 100644 index 850b01ce12..0000000000 --- a/docs/sources/contributing/contributing.md +++ /dev/null @@ -1,24 +0,0 @@ -page_title: Contribution Guidelines -page_description: Contribution guidelines: create issues, conventions, pull requests -page_keywords: contributing, docker, documentation, help, guideline - -# Contributing to Docker - -Want to hack on Docker? Awesome! - -The repository includes [all the instructions you need to get started]( -https://github.com/docker/docker/blob/master/CONTRIBUTING.md). - -The [developer environment Dockerfile]( -https://github.com/docker/docker/blob/master/Dockerfile) -specifies the tools and versions used to test and build Docker. - -If you're making changes to the documentation, see the [README.md]( -https://github.com/docker/docker/blob/master/docs/README.md). - -The [documentation environment Dockerfile]( -https://github.com/docker/docker/blob/master/docs/Dockerfile) -specifies the tools and versions used to build the Documentation. - -Further interesting details can be found in the [Packaging hints]( -https://github.com/docker/docker/blob/master/project/PACKAGERS.md). diff --git a/docs/sources/contributing/devenvironment.md b/docs/sources/contributing/devenvironment.md deleted file mode 100644 index 607ed4d9ed..0000000000 --- a/docs/sources/contributing/devenvironment.md +++ /dev/null @@ -1,167 +0,0 @@ -page_title: Setting Up a Dev Environment -page_description: Guides on how to contribute to docker -page_keywords: Docker, documentation, developers, contributing, dev environment - -# Setting Up a Dev Environment - -To make it easier to contribute to Docker, we provide a standard -development environment. It is important that the same environment be -used for all tests, builds and releases. The standard development -environment defines all build dependencies: system libraries and -binaries, go environment, go dependencies, etc. - -**Things you need:** - - * Docker - * git - * make - -## Install Docker - -Docker's build environment itself is a Docker container, so the first -step is to install Docker on your system. - -You can follow the [install instructions most relevant to your -system](https://docs.docker.com/installation/). Make sure you -have a working, up-to-date docker installation, then continue to the -next step. - -## Install tools used for this tutorial - -Install `git`; honest, it's very good. You can use -other ways to get the Docker source, but they're not anywhere near as -easy. - -Install `make`. This tutorial uses our base Makefile -to kick off the docker containers in a repeatable and consistent way. -Again, you can do it in other ways but you need to do more work. - -## Check out the Source - - $ git clone https://git@github.com/docker/docker - $ cd docker - -To checkout a different revision just use `git checkout` -with the name of branch or revision number. - -## Build the Environment - -This following command builds a development environment using the -`Dockerfile` in the current directory. Essentially, it installs all -the build and runtime dependencies necessary to build and test Docker. -Your first build will take some time to complete. On Linux systems and on Mac -OS X from within the `boot2docker` shell: - - $ make build - -> **Note**: -> On Mac OS X, the Docker make targets such as `build`, `binary`, and `test` -> should **not** be built by the 'root' user. Therefore, you shouldn't use `sudo` when -> running these commands on OS X. -> On Linux, we suggest you add your current user to the `docker` group via -> [these -> instructions](http://docs.docker.com/installation/ubuntulinux/#giving-non-root-access). - -If the build is successful, congratulations! You have produced a clean -build of docker, neatly encapsulated in a standard build environment. - - -## Build the Docker Binary - -To create the Docker binary, run this command: - - $ make binary - -This will create the Docker binary in `./bundles/-dev/binary/`. If you -do not see files in the `./bundles` directory in your host, your `BINDDIR` -setting is not set quite right. You want to run the following command: - - $ make BINDDIR=. binary - -If you are on a non-Linux platform, e.g., OSX, you'll want to run `make cross` -or `make BINDDIR=. cross`. - -### Using your built Docker binary - -The binary is available outside the container in the directory -`./bundles/-dev/binary/`. You can swap your -host docker executable with this binary for live testing - for example, -on ubuntu: - - $ sudo service docker stop ; sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/-dev/binary/docker--dev $(which docker);sudo service docker start - -> **Note**: -> Its safer to run the tests below before swapping your hosts docker binary. - -## Run the Tests - -To execute the test cases, run this command: - - $ make test - -If the test are successful then the tail of the output should look -something like this - - --- PASS: TestWriteBroadcaster (0.00 seconds) - === RUN TestRaceWriteBroadcaster - --- PASS: TestRaceWriteBroadcaster (0.00 seconds) - === RUN TestTruncIndex - --- PASS: TestTruncIndex (0.00 seconds) - === RUN TestCompareKernelVersion - --- PASS: TestCompareKernelVersion (0.00 seconds) - === RUN TestHumanSize - --- PASS: TestHumanSize (0.00 seconds) - === RUN TestParseHost - --- PASS: TestParseHost (0.00 seconds) - === RUN TestParseRepositoryTag - --- PASS: TestParseRepositoryTag (0.00 seconds) - === RUN TestGetResolvConf - --- PASS: TestGetResolvConf (0.00 seconds) - === RUN TestParseRelease - --- PASS: TestParseRelease (0.00 seconds) - === RUN TestDependencyGraphCircular - --- PASS: TestDependencyGraphCircular (0.00 seconds) - === RUN TestDependencyGraph - --- PASS: TestDependencyGraph (0.00 seconds) - PASS - ok github.com/docker/docker/utils 0.017s - -If $TESTFLAGS is set in the environment, it is passed as extra arguments -to `go test`. You can use this to select certain tests to run, e.g., - - $ TESTFLAGS='-test.run \^TestBuild\$' make test - -If the output indicates "FAIL" and you see errors like this: - - server.go:1302 Error: Insertion failed because database is full: database or disk is full - - utils_test.go:179: Error copy: exit status 1 (cp: writing '/tmp/docker-testd5c9-[...]': No space left on device - -Then you likely don't have enough memory available the test suite. 2GB -is recommended. - -## Use Docker - -You can run an interactive session in the newly built container: - - $ make shell - - # type 'exit' or Ctrl-D to exit - -## Build And View The Documentation - -If you want to read the documentation from a local website, or are -making changes to it, you can build the documentation and then serve it -by: - - $ make docs - - # when its done, you can point your browser to http://yourdockerhost:8000 - # type Ctrl-C to exit - -**Need More Help?** - -If you need more help then hop on to the [#docker-dev IRC -channel](irc://chat.freenode.net#docker-dev) or post a message on the -[Docker developer mailing -list](https://groups.google.com/d/forum/docker-dev). diff --git a/docs/sources/docker-hub/accounts.md b/docs/sources/docker-hub/accounts.md index be3212005e..e4623f9980 100644 --- a/docs/sources/docker-hub/accounts.md +++ b/docs/sources/docker-hub/accounts.md @@ -40,15 +40,15 @@ organizations [you belong to and add new organizations]( https://hub.docker.com/account/organizations/) from the Account Settings tab. They are also listed below your user name on your repositories page and in your account profile. -![organizations](/docker-hub/orgs.png) +![organizations](/docker-hub/hub-images/orgs.png) From within your organizations you can create groups that allow you to further manage who can interact with your repositories. -![groups](/docker-hub/groups.png) +![groups](/docker-hub/hub-images/groups.png) You can add or invite users to join groups by clicking on the organization and then clicking the edit button for the group to which you want to add members. Enter a user-name (for current Hub users) or email address (if they are not yet Hub users) for the person you want to invite. They will receive an email invitation to join the group. -![invite members](/docker-hub/invite.png) +![invite members](/docker-hub/hub-images/invite.png) diff --git a/docs/sources/docker-hub/builds.md b/docs/sources/docker-hub/builds.md index 164018e827..1613ad1d4b 100644 --- a/docs/sources/docker-hub/builds.md +++ b/docs/sources/docker-hub/builds.md @@ -63,13 +63,15 @@ public or private GitHub repositories with a `Dockerfile`. ### GitHub Submodules -If your GitHub repository contains links to private submodules, you'll -need to add a deploy key from your Docker Hub repository. +If your GitHub repository contains links to private submodules, you'll get an +error message in your build. -Your Docker Hub deploy key is located under the "Build Details" -menu on the Automated Build's main page in the Hub. Add this key -to your GitHub submodule by visiting the Settings page for the -repository on GitHub and selecting "Deploy keys". +Normally, the Docker Hub sets up a deploy key in your GitHub repository. +Unfortunately, GitHub only allows a repository deploy key to access a single repository. + +To work around this, you need to create a dedicated user account in GitHub and attach +the automated build's deploy key that account. This dedicated build account +can be limited to read-only access to just the repositories required to build. @@ -82,15 +84,33 @@ repository on GitHub and selecting "Deploy keys". - - + + - - + + + + + + + + + + + + + + + + +
    1.Your automated build's deploy key is in the "Build Details" menu -under "Deploy keys".First, create the new account in GitHub. It should be given read-only + access to the main repository and all submodules that are needed.
    2.In your GitHub submodule's repository Settings page, add the -deploy key from your Docker Hub Automated Build.This can be accomplished by adding the account to a read-only team in + the organization(s) where the main GitHub repository and all submodule + repositories are kept.
    3.Next, remove the deploy key from the main GitHub repository. This can be done in the GitHub repository's "Deploy keys" Settings section.
    4.Your automated build's deploy key is in the "Build Details" menu + under "Deploy keys".
    5.In your dedicated GitHub User account, add the deploy key from your + Docker Hub Automated Build.
    diff --git a/docs/sources/docker-hub/hub-images/build-trigger.png b/docs/sources/docker-hub/hub-images/build-trigger.png index 25597a27bd..ea4e99b453 100644 Binary files a/docs/sources/docker-hub/hub-images/build-trigger.png and b/docs/sources/docker-hub/hub-images/build-trigger.png differ diff --git a/docs/sources/docker-hub/hub-images/gh_add_ssh_user_key.png b/docs/sources/docker-hub/hub-images/gh_add_ssh_user_key.png new file mode 100644 index 0000000000..7d0092170f Binary files /dev/null and b/docs/sources/docker-hub/hub-images/gh_add_ssh_user_key.png differ diff --git a/docs/sources/docker-hub/hub-images/gh_org_members.png b/docs/sources/docker-hub/hub-images/gh_org_members.png new file mode 100644 index 0000000000..465f5da565 Binary files /dev/null and b/docs/sources/docker-hub/hub-images/gh_org_members.png differ diff --git a/docs/sources/docker-hub/hub-images/gh_repo_deploy_key.png b/docs/sources/docker-hub/hub-images/gh_repo_deploy_key.png new file mode 100644 index 0000000000..983b5eec77 Binary files /dev/null and b/docs/sources/docker-hub/hub-images/gh_repo_deploy_key.png differ diff --git a/docs/sources/docker-hub/hub-images/gh_team_members.png b/docs/sources/docker-hub/hub-images/gh_team_members.png new file mode 100644 index 0000000000..3bdf4abd95 Binary files /dev/null and b/docs/sources/docker-hub/hub-images/gh_team_members.png differ diff --git a/docs/sources/docker-hub/hub-images/github_deploy_key.png b/docs/sources/docker-hub/hub-images/github_deploy_key.png deleted file mode 100644 index a0ec6a918f..0000000000 Binary files a/docs/sources/docker-hub/hub-images/github_deploy_key.png and /dev/null differ diff --git a/docs/sources/docker-hub/groups.png b/docs/sources/docker-hub/hub-images/groups.png similarity index 100% rename from docs/sources/docker-hub/groups.png rename to docs/sources/docker-hub/hub-images/groups.png diff --git a/docs/sources/docker-hub/hub.png b/docs/sources/docker-hub/hub-images/hub.png similarity index 100% rename from docs/sources/docker-hub/hub.png rename to docs/sources/docker-hub/hub-images/hub.png diff --git a/docs/sources/docker-hub/hub-images/invite.png b/docs/sources/docker-hub/hub-images/invite.png index e6b74d0617..0a157ffbf0 100644 Binary files a/docs/sources/docker-hub/hub-images/invite.png and b/docs/sources/docker-hub/hub-images/invite.png differ diff --git a/docs/sources/docker-hub/hub-images/orgs.png b/docs/sources/docker-hub/hub-images/orgs.png new file mode 100644 index 0000000000..604ed95a09 Binary files /dev/null and b/docs/sources/docker-hub/hub-images/orgs.png differ diff --git a/docs/sources/docker-hub/repos.png b/docs/sources/docker-hub/hub-images/repos.png similarity index 100% rename from docs/sources/docker-hub/repos.png rename to docs/sources/docker-hub/hub-images/repos.png diff --git a/docs/sources/docker-hub/index.md b/docs/sources/docker-hub/index.md index 92d0ee063b..c29a5f7873 100644 --- a/docs/sources/docker-hub/index.md +++ b/docs/sources/docker-hub/index.md @@ -4,7 +4,7 @@ page_keywords: Docker, docker, registry, accounts, plans, Dockerfile, Docker Hub # Docker Hub -![DockerHub](/docker-hub/hub.png) +![DockerHub](/docker-hub/hub-images/hub.png) ## [Accounts](accounts/) diff --git a/docs/sources/docker-hub/invite.png b/docs/sources/docker-hub/invite.png deleted file mode 100644 index 5534d2b888..0000000000 Binary files a/docs/sources/docker-hub/invite.png and /dev/null differ diff --git a/docs/sources/docker-hub/orgs.png b/docs/sources/docker-hub/orgs.png deleted file mode 100644 index 6a49cc65dd..0000000000 Binary files a/docs/sources/docker-hub/orgs.png and /dev/null differ diff --git a/docs/sources/docker-hub/repos.md b/docs/sources/docker-hub/repos.md index 042cb572f5..576583584f 100644 --- a/docs/sources/docker-hub/repos.md +++ b/docs/sources/docker-hub/repos.md @@ -4,7 +4,7 @@ page_keywords: Docker, docker, registry, accounts, plans, Dockerfile, Docker Hub # Repositories and Images on Docker Hub -![repositories](/docker-hub/repos.png) +![repositories](/docker-hub/hub-images/repos.png) ## Searching for repositories and images diff --git a/docs/sources/examples/mongodb.md b/docs/sources/examples/mongodb.md index 28f7824594..c4fbf57681 100644 --- a/docs/sources/examples/mongodb.md +++ b/docs/sources/examples/mongodb.md @@ -59,7 +59,7 @@ a MongoDB repository file for the package manager. # Installation: # Import MongoDB public GPG key AND create a MongoDB list file - RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 + RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv 7F0CEB10 RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/10gen.list After this initial preparation we can update our packages and install MongoDB. diff --git a/docs/sources/examples/mongodb/Dockerfile b/docs/sources/examples/mongodb/Dockerfile index 9333eb5811..c17a6360e5 100644 --- a/docs/sources/examples/mongodb/Dockerfile +++ b/docs/sources/examples/mongodb/Dockerfile @@ -7,7 +7,7 @@ MAINTAINER Docker # Installation: # Import MongoDB public GPG key AND create a MongoDB list file -RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 +RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv 7F0CEB10 RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/10gen.list # Update apt-get sources AND install MongoDB diff --git a/docs/sources/examples/nodejs_web_app.md b/docs/sources/examples/nodejs_web_app.md index 7358a3f50f..56f7687cd2 100644 --- a/docs/sources/examples/nodejs_web_app.md +++ b/docs/sources/examples/nodejs_web_app.md @@ -157,7 +157,7 @@ Print the output of your app: ## Test -To test your app, get the the port of your app that Docker mapped: +To test your app, get the port of your app that Docker mapped: $ sudo docker ps diff --git a/docs/sources/examples/postgresql_service.Dockerfile b/docs/sources/examples/postgresql_service.Dockerfile index d0f37669d1..9c0c0d4fc7 100644 --- a/docs/sources/examples/postgresql_service.Dockerfile +++ b/docs/sources/examples/postgresql_service.Dockerfile @@ -7,7 +7,7 @@ MAINTAINER SvenDowideit@docker.com # Add the PostgreSQL PGP key to verify their Debian packages. # It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc -RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 +RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 # Add PostgreSQL's repository. It contains the most recent stable release # of PostgreSQL, ``9.3``. diff --git a/docs/sources/examples/postgresql_service.md b/docs/sources/examples/postgresql_service.md index 21044d369a..87960098ff 100644 --- a/docs/sources/examples/postgresql_service.md +++ b/docs/sources/examples/postgresql_service.md @@ -29,7 +29,7 @@ Start by creating a new `Dockerfile`: # Add the PostgreSQL PGP key to verify their Debian packages. # It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc - RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 + RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 # Add PostgreSQL's repository. It contains the most recent stable release # of PostgreSQL, ``9.3``. diff --git a/docs/sources/faq.md b/docs/sources/faq.md index f517db73a4..0f64ff9b93 100644 --- a/docs/sources/faq.md +++ b/docs/sources/faq.md @@ -1,15 +1,17 @@ -page_title: FAQ -page_description: Most frequently asked questions. +page_title: FAQ page_description: Most frequently asked questions. page_keywords: faq, questions, documentation, docker -# FAQ +# Frequently Asked Questions (FAQ) + +If you don't see your question here, feel free to submit new ones to +. Or, you can fork [the +repo](https://github.com/docker/docker) and contribute them yourself by editing +the documentation sources. -## Most frequently asked questions ### How much does Docker cost? -Docker is 100% free. It is open source, so you can use it without -paying. +Docker is 100% free. It is open source, so you can use it without paying. ### What open source license are you using? @@ -19,107 +21,90 @@ https://github.com/docker/docker/blob/master/LICENSE) ### Does Docker run on Mac OS X or Windows? -Docker currently runs only on Linux, but you can use VirtualBox to run -Docker in a virtual machine on your box, and get the best of both worlds. -Check out the [*Mac OS X*](../installation/mac/#macosx) and [*Microsoft -Windows*](../installation/windows/#windows) installation guides. The small -Linux distribution boot2docker can be run inside virtual machines on these -two operating systems. +Docker currently runs only on Linux, but you can use VirtualBox to run Docker in +a virtual machine on your box, and get the best of both worlds. Check out the +[*Mac OS X*](../installation/mac/#macosx) and [*Microsoft +Windows*](../installation/windows/#windows) installation guides. The small Linux +distribution boot2docker can be run inside virtual machines on these two +operating systems. {{ include "no-remote-sudo.md" }} ### How do containers compare to virtual machines? -They are complementary. VMs are best used to allocate chunks of -hardware resources. Containers operate at the process level, which -makes them very lightweight and perfect as a unit of software -delivery. +They are complementary. VMs are best used to allocate chunks of hardware +resources. Containers operate at the process level, which makes them very +lightweight and perfect as a unit of software delivery. ### What does Docker add to just plain LXC? -Docker is not a replacement for LXC. "LXC" refers to capabilities of -the Linux kernel (specifically namespaces and control groups) which -allow sandboxing processes from one another, and controlling their -resource allocations. On top of this low-level foundation of kernel -features, Docker offers a high-level tool with several powerful -functionalities: +Docker is not a replacement for LXC. "LXC" refers to capabilities of the Linux +kernel (specifically namespaces and control groups) which allow sandboxing +processes from one another, and controlling their resource allocations. On top +of this low-level foundation of kernel features, Docker offers a high-level tool +with several powerful functionalities: - - *Portable deployment across machines.* - Docker defines a format for bundling an application and all - its dependencies into a single object which can be transferred - to any Docker-enabled machine, and executed there with the - guarantee that the execution environment exposed to the - application will be the same. LXC implements process - sandboxing, which is an important pre-requisite for portable - deployment, but that alone is not enough for portable - deployment. If you sent me a copy of your application - installed in a custom LXC configuration, it would almost - certainly not run on my machine the way it does on yours, - because it is tied to your machine's specific configuration: - networking, storage, logging, distro, etc. Docker defines an - abstraction for these machine-specific settings, so that the - exact same Docker container can run - unchanged - on many - different machines, with many different configurations. + - *Portable deployment across machines.* Docker defines a format for bundling + an application and all its dependencies into a single object which can be + transferred to any Docker-enabled machine, and executed there with the + guarantee that the execution environment exposed to the application will be the + same. LXC implements process sandboxing, which is an important pre-requisite + for portable deployment, but that alone is not enough for portable deployment. + If you sent me a copy of your application installed in a custom LXC + configuration, it would almost certainly not run on my machine the way it does + on yours, because it is tied to your machine's specific configuration: + networking, storage, logging, distro, etc. Docker defines an abstraction for + these machine-specific settings, so that the exact same Docker container can + run - unchanged - on many different machines, with many different + configurations. - - *Application-centric.* - Docker is optimized for the deployment of applications, as - opposed to machines. This is reflected in its API, user - interface, design philosophy and documentation. By contrast, - the `lxc` helper scripts focus on - containers as lightweight machines - basically servers that - boot faster and need less RAM. We think there's more to - containers than just that. + - *Application-centric.* Docker is optimized for the deployment of + applications, as opposed to machines. This is reflected in its API, user + interface, design philosophy and documentation. By contrast, the `lxc` helper + scripts focus on containers as lightweight machines - basically servers that + boot faster and need less RAM. We think there's more to containers than just + that. - - *Automatic build.* - Docker includes [*a tool for developers to automatically - assemble a container from their source - code*](../reference/builder/#dockerbuilder), with full control - over application dependencies, build tools, packaging etc. - They are free to use `make`, `maven`, `chef`, `puppet`, `salt,` - Debian packages, RPMs, source tarballs, or any combination of the - above, regardless of the configuration of the machines. + - *Automatic build.* Docker includes [*a tool for developers to automatically + assemble a container from their source + code*](../reference/builder/#dockerbuilder), with full control over application + dependencies, build tools, packaging etc. They are free to use `make`, `maven`, + `chef`, `puppet`, `salt,` Debian packages, RPMs, source tarballs, or any + combination of the above, regardless of the configuration of the machines. - - *Versioning.* - Docker includes git-like capabilities for tracking successive - versions of a container, inspecting the diff between versions, - committing new versions, rolling back etc. The history also - includes how a container was assembled and by whom, so you get - full traceability from the production server all the way back - to the upstream developer. Docker also implements incremental - uploads and downloads, similar to `git pull`, so new versions - of a container can be transferred by only sending diffs. + - *Versioning.* Docker includes git-like capabilities for tracking successive + versions of a container, inspecting the diff between versions, committing new + versions, rolling back etc. The history also includes how a container was + assembled and by whom, so you get full traceability from the production server + all the way back to the upstream developer. Docker also implements incremental + uploads and downloads, similar to `git pull`, so new versions of a container + can be transferred by only sending diffs. - - *Component re-use.* - Any container can be used as a [*"base image"*]( - ../terms/image/#base-image-def) to create more specialized components. - This can be done manually or as part of an automated build. For example - you can prepare the ideal Python environment, and use it as a base for - 10 different applications. Your ideal Postgresql setup can be re-used for - all your future projects. And so on. + - *Component re-use.* Any container can be used as a [*"base image"*]( + ../terms/image/#base-image-def) to create more specialized components. This can + be done manually or as part of an automated build. For example you can prepare + the ideal Python environment, and use it as a base for 10 different + applications. Your ideal Postgresql setup can be re-used for all your future + projects. And so on. - - *Sharing.* - Docker has access to a [public registry](https://hub.docker.com) where - thousands of people have uploaded useful containers: anything from Redis, - CouchDB, Postgres to IRC bouncers to Rails app servers to Hadoop to - base images for various Linux distros. The - [*registry*](../reference/api/registry_index_spec/#registryindexspec) - also includes an official "standard library" of useful - containers maintained by the Docker team. The registry itself - is open-source, so anyone can deploy their own registry to - store and transfer private containers, for internal server - deployments for example. + - *Sharing.* Docker has access to a [public registry](https://hub.docker.com) + where thousands of people have uploaded useful containers: anything from Redis, + CouchDB, Postgres to IRC bouncers to Rails app servers to Hadoop to base images + for various Linux distros. The + [*registry*](../reference/api/registry_index_spec/#registryindexspec) also + includes an official "standard library" of useful containers maintained by the + Docker team. The registry itself is open-source, so anyone can deploy their own + registry to store and transfer private containers, for internal server + deployments for example. - - *Tool ecosystem.* - Docker defines an API for automating and customizing the - creation and deployment of containers. There are a huge number - of tools integrating with Docker to extend its capabilities. - PaaS-like deployment (Dokku, Deis, Flynn), multi-node - orchestration (Maestro, Salt, Mesos, Openstack Nova), - management dashboards (docker-ui, Openstack Horizon, - Shipyard), configuration management (Chef, Puppet), continuous - integration (Jenkins, Strider, Travis), etc. Docker is rapidly - establishing itself as the standard for container-based - tooling. + - *Tool ecosystem.* Docker defines an API for automating and customizing the + creation and deployment of containers. There are a huge number of tools + integrating with Docker to extend its capabilities. PaaS-like deployment + (Dokku, Deis, Flynn), multi-node orchestration (Maestro, Salt, Mesos, Openstack + Nova), management dashboards (docker-ui, Openstack Horizon, Shipyard), + configuration management (Chef, Puppet), continuous integration (Jenkins, + Strider, Travis), etc. Docker is rapidly establishing itself as the standard + for container-based tooling. ### What is different between a Docker container and a VM? @@ -128,104 +113,100 @@ http://stackoverflow.com/questions/16047306/how-is-docker-io-different-from-a-no ### Do I lose my data when the container exits? -Not at all! Any data that your application writes to disk gets preserved -in its container until you explicitly delete the container. The file -system for the container persists even after the container halts. +Not at all! Any data that your application writes to disk gets preserved in its +container until you explicitly delete the container. The file system for the +container persists even after the container halts. ### How far do Docker containers scale? -Some of the largest server farms in the world today are based on -containers. Large web deployments like Google and Twitter, and platform -providers such as Heroku and dotCloud all run on container technology, -at a scale of hundreds of thousands or even millions of containers -running in parallel. +Some of the largest server farms in the world today are based on containers. +Large web deployments like Google and Twitter, and platform providers such as +Heroku and dotCloud all run on container technology, at a scale of hundreds of +thousands or even millions of containers running in parallel. ### How do I connect Docker containers? -Currently the recommended way to link containers is via the link -primitive. You can see details of how to [work with links -here](/userguide/dockerlinks). +Currently the recommended way to link containers is via the link primitive. You +can see details of how to [work with links here](/userguide/dockerlinks). -Also useful for more flexible service portability is the -[Ambassador linking pattern](/articles/ambassador_pattern_linking/). +Also useful for more flexible service portability is the [Ambassador linking +pattern](/articles/ambassador_pattern_linking/). ### How do I run more than one process in a Docker container? Any capable process supervisor such as [http://supervisord.org/]( -http://supervisord.org/), runit, s6, or daemontools can do the trick. -Docker will start up the process management daemon which will then fork -to run additional processes. As long as the processor manager daemon continues -to run, the container will continue to as well. You can see a more substantial -example [that uses supervisord here](/articles/using_supervisord/). +http://supervisord.org/), runit, s6, or daemontools can do the trick. Docker +will start up the process management daemon which will then fork to run +additional processes. As long as the processor manager daemon continues to run, +the container will continue to as well. You can see a more substantial example +[that uses supervisord here](/articles/using_supervisord/). ### What platforms does Docker run on? Linux: - - Ubuntu 12.04, 13.04 et al - - Fedora 19/20+ - - RHEL 6.5+ - - Centos 6+ - - Gentoo - - ArchLinux - - openSUSE 12.3+ + - Ubuntu 12.04, 13.04 et al + - Fedora 19/20+ + - RHEL 6.5+ + - CentOS 6+ + - Gentoo + - ArchLinux + - openSUSE 12.3+ - CRUX 3.0+ Cloud: - - Amazon EC2 - - Google Compute Engine + - Amazon EC2 + - Google Compute Engine - Rackspace ### How do I report a security issue with Docker? You can learn about the project's security policy -[here](https://www.docker.com/security/) and report security issues to -this [mailbox](mailto:security@docker.com). +[here](https://www.docker.com/security/) and report security issues to this +[mailbox](mailto:security@docker.com). ### Why do I need to sign my commits to Docker with the DCO? Please read [our blog post]( -http://blog.docker.com/2014/01/docker-code-contributions-require-developer-certificate-of-origin/) -on the introduction of the DCO. +http://blog.docker.com/2014/01/docker-code-contributions-require-developer-certificate-of-origin/) on the introduction of the DCO. ### When building an image, should I prefer system libraries or bundled ones? *This is a summary of a discussion on the [docker-dev mailing list]( https://groups.google.com/forum/#!topic/docker-dev/L2RBSPDu1L0).* -Virtually all programs depend on third-party libraries. Most frequently, -they will use dynamic linking and some kind of package dependency, so -that when multiple programs need the same library, it is installed only once. +Virtually all programs depend on third-party libraries. Most frequently, they +will use dynamic linking and some kind of package dependency, so that when +multiple programs need the same library, it is installed only once. -Some programs, however, will bundle their third-party libraries, because -they rely on very specific versions of those libraries. For instance, -Node.js bundles OpenSSL; MongoDB bundles V8 and Boost (among others). +Some programs, however, will bundle their third-party libraries, because they +rely on very specific versions of those libraries. For instance, Node.js bundles +OpenSSL; MongoDB bundles V8 and Boost (among others). -When creating a Docker image, is it better to use the bundled libraries, -or should you build those programs so that they use the default system -libraries instead? +When creating a Docker image, is it better to use the bundled libraries, or +should you build those programs so that they use the default system libraries +instead? -The key point about system libraries is not about saving disk or memory -space. It is about security. All major distributions handle security -seriously, by having dedicated security teams, following up closely -with published vulnerabilities, and disclosing advisories themselves. -(Look at the [Debian Security Information](https://www.debian.org/security/) -for an example of those procedures.) Upstream developers, however, -do not always implement similar practices. +The key point about system libraries is not about saving disk or memory space. +It is about security. All major distributions handle security seriously, by +having dedicated security teams, following up closely with published +vulnerabilities, and disclosing advisories themselves. (Look at the [Debian +Security Information](https://www.debian.org/security/) for an example of those +procedures.) Upstream developers, however, do not always implement similar +practices. -Before setting up a Docker image to compile a program from source, -if you want to use bundled libraries, you should check if the upstream -authors provide a convenient way to announce security vulnerabilities, -and if they update their bundled libraries in a timely manner. If they -don't, you are exposing yourself (and the users of your image) to -security vulnerabilities. +Before setting up a Docker image to compile a program from source, if you want +to use bundled libraries, you should check if the upstream authors provide a +convenient way to announce security vulnerabilities, and if they update their +bundled libraries in a timely manner. If they don't, you are exposing yourself +(and the users of your image) to security vulnerabilities. Likewise, before using packages built by others, you should check if the channels providing those packages implement similar security best practices. Downloading and installing an "all-in-one" .deb or .rpm sounds great at first, -except if you have no way to figure out that it contains a copy of the -OpenSSL library vulnerable to the [Heartbleed](http://heartbleed.com/) bug. +except if you have no way to figure out that it contains a copy of the OpenSSL +library vulnerable to the [Heartbleed](http://heartbleed.com/) bug. ### Why is `DEBIAN_FRONTEND=noninteractive` discouraged in Dockerfiles? @@ -234,46 +215,49 @@ When building Docker images on Debian and Ubuntu you may have seen errors like: unable to initialize frontend: Dialog These errors don't stop the image from being built but inform you that the -installation process tried to open a dialog box, but was unable to. -Generally, these errors are safe to ignore. +installation process tried to open a dialog box, but was unable to. Generally, +these errors are safe to ignore. -Some people circumvent these errors by changing the `DEBIAN_FRONTEND` +Some people circumvent these errors by changing the `DEBIAN_FRONTEND` environment variable inside the Dockerfile using: ENV DEBIAN_FRONTEND=noninteractive -This prevents the installer from opening dialog boxes during installation -which stops the errors. +This prevents the installer from opening dialog boxes during installation which +stops the errors. -While this may sound like a good idea, it *may* have side effects. -The `DEBIAN_FRONTEND` environment variable will be inherited by all -images and containers built from your image, effectively changing -their behavior. People using those images will run into problems when -installing software interactively, because installers will not show -any dialog boxes. +While this may sound like a good idea, it *may* have side effects. The +`DEBIAN_FRONTEND` environment variable will be inherited by all images and +containers built from your image, effectively changing their behavior. People +using those images will run into problems when installing software +interactively, because installers will not show any dialog boxes. Because of this, and because setting `DEBIAN_FRONTEND` to `noninteractive` is mainly a 'cosmetic' change, we *discourage* changing it. -If you *really* need to change its setting, make sure to change it -back to its [default value](https://www.debian.org/releases/stable/i386/ch05s03.html.en) +If you *really* need to change its setting, make sure to change it back to its +[default value](https://www.debian.org/releases/stable/i386/ch05s03.html.en) afterwards. -### Can I help by adding some questions and answers? +### Why do I get `Connection reset by peer` when making a request to a service running in a container? + +Typically, this message is returned if the service is already bound to your +localhost. As a result, requests coming to the container from outside are +dropped. To correct this problem, change the service's configuration on your +localhost so that the service accepts requests from all IPs. If you aren't sure +how to do this, check the documentation for your OS. -Definitely! You can fork [the repo](https://github.com/docker/docker) and -edit the documentation sources. ### Where can I find more answers? You can find more answers on: -- [Docker user mailinglist](https://groups.google.com/d/forum/docker-user) -- [Docker developer mailinglist](https://groups.google.com/d/forum/docker-dev) -- [IRC, docker on freenode](irc://chat.freenode.net#docker) -- [GitHub](https://github.com/docker/docker) -- [Ask questions on Stackoverflow](http://stackoverflow.com/search?q=docker) + +- [Docker user mailinglist](https://groups.google.com/d/forum/docker-user) +- [Docker developer mailinglist](https://groups.google.com/d/forum/docker-dev) +- [IRC, docker on freenode](irc://chat.freenode.net#docker) +- [GitHub](https://github.com/docker/docker) +- [Ask questions on Stackoverflow](http://stackoverflow.com/search?q=docker) - [Join the conversation on Twitter](http://twitter.com/docker) -Looking for something else to read? Checkout the [User -Guide](/userguide/). +Looking for something else to read? Checkout the [User Guide](/userguide/). diff --git a/docs/sources/installation.md b/docs/sources/installation.md index 7eaabeeefe..5fa52fa978 100644 --- a/docs/sources/installation.md +++ b/docs/sources/installation.md @@ -23,4 +23,5 @@ techniques for installing Docker all the time. - [Amazon EC2](amazon/) - [Rackspace Cloud](rackspace/) - [Google Cloud Platform](google/) + - [Joyent Compute Service](joyent/) - [Binaries](binaries/) diff --git a/docs/sources/installation/MAINTAINERS b/docs/sources/installation/MAINTAINERS deleted file mode 100644 index aca13975fd..0000000000 --- a/docs/sources/installation/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -google.md: Johan Euphrosine (@proppy) -softlayer.md: Phil Jackson (@underscorephil) diff --git a/docs/sources/installation/azure.md b/docs/sources/installation/azure.md new file mode 100644 index 0000000000..a8e700fead --- /dev/null +++ b/docs/sources/installation/azure.md @@ -0,0 +1,27 @@ +page_title: Installation on Microsoft Azure Platform +page_description: Instructions for creating a Docker-ready virtual machine on Microsoft Azure cloud platform. +page_keywords: Docker, Docker documentation, installation, azure, microsoft + +# Microsoft Azure + + +## Creating a Docker host machine on Azure + +Please check out to the following detailed tutorials on [Microsoft Azure][0] +website to find out different ways to create a Docker-ready Linux virtual +machines on Azure: + +* [Docker Virtual Machine Extensions on Azure][1] + * [How to use the Docker VM Extension from Azure Cross-Platform Interface][2] + * [How to use the Docker VM Extension with the Azure Portal][3] +* [Using Docker Machine with Azure][4] + +## What next? + +Continue with the [User Guide](/userguide/). + +[0]: http://azure.microsoft.com/ +[1]: http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-vm-extension/ +[2]: http://azure.microsoft.com/documentation/articles/virtual-machines-docker-with-xplat-cli/ +[3]: http://azure.microsoft.com/documentation/articles/virtual-machines-docker-with-portal/ +[4]: http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-machine/ \ No newline at end of file diff --git a/docs/sources/installation/centos.md b/docs/sources/installation/centos.md index 06dc8bfee8..862d508988 100644 --- a/docs/sources/installation/centos.md +++ b/docs/sources/installation/centos.md @@ -6,8 +6,8 @@ page_keywords: Docker, Docker documentation, requirements, linux, centos, epel, Docker is supported on the following versions of CentOS: -- [*CentOS 7 (64-bit)*](#installing-docker---centos-7) -- [*CentOS 6.5 (64-bit)*](#installing-docker---centos-6.5) or later +- [*CentOS 7 (64-bit)*](#installing-docker-centos-7) +- [*CentOS 6.5 (64-bit)*](#installing-docker-centos-6.5) or later These instructions are likely work for other binary compatible EL6/EL7 distributions such as Scientific Linux, but they haven't been tested. @@ -46,7 +46,7 @@ start or restart `firewalld` after Docker, you will have to restart the Docker d ## Installing Docker - CentOS-6.5 -For Centos-6.5, the Docker package is part of [Extra Packages +For CentOS-6.5, the Docker package is part of [Extra Packages for Enterprise Linux (EPEL)](https://fedoraproject.org/wiki/EPEL) repository, a community effort to create and maintain additional packages for the RHEL distribution. diff --git a/docs/sources/installation/debian.md b/docs/sources/installation/debian.md index 74acd1d42b..4644a2440d 100644 --- a/docs/sources/installation/debian.md +++ b/docs/sources/installation/debian.md @@ -31,7 +31,7 @@ To verify that everything has worked as expected: Which should download the `ubuntu` image, and then start `bash` in a container. -> **Note**: +> **Note**: > If you want to enable memory and swap accounting see > [this](/installation/ubuntulinux/#memory-and-swap-accounting). @@ -48,18 +48,20 @@ which is officially supported by Docker. ### Installation 1. Install Kernel from wheezy-backports - + Add the following line to your `/etc/apt/sources.list` `deb http://http.debian.net/debian wheezy-backports main` then install the `linux-image-amd64` package (note the use of `-t wheezy-backports`) - + $ sudo apt-get update $ sudo apt-get install -t wheezy-backports linux-image-amd64 -2. Install Docker using the get.docker.com script: +2. Restart your system. This is necessary for Debian to use your new kernel. + +3. Install Docker using the get.docker.com script: `curl -sSL https://get.docker.com/ | sh` @@ -78,7 +80,7 @@ run the `docker` client as a user in the `docker` group then you don't need to add `sudo` to all the client commands. From Docker 0.9.0 you can use the `-G` flag to specify an alternative group. -> **Warning**: +> **Warning**: > The `docker` group (or the group specified with the `-G` flag) is > `root`-equivalent; see [*Docker Daemon Attack Surface*]( > /articles/security/#docker-daemon-attack-surface) details. diff --git a/docs/sources/installation/images/bad_host.png b/docs/sources/installation/images/bad_host.png new file mode 100644 index 0000000000..cdc78defc5 Binary files /dev/null and b/docs/sources/installation/images/bad_host.png differ diff --git a/docs/sources/installation/images/cool_view.png b/docs/sources/installation/images/cool_view.png new file mode 100644 index 0000000000..8eebf21658 Binary files /dev/null and b/docs/sources/installation/images/cool_view.png differ diff --git a/docs/sources/installation/images/good_host.png b/docs/sources/installation/images/good_host.png new file mode 100644 index 0000000000..58b9783d3a Binary files /dev/null and b/docs/sources/installation/images/good_host.png differ diff --git a/docs/sources/installation/images/kitematic.png b/docs/sources/installation/images/kitematic.png new file mode 100644 index 0000000000..5bb221ccf7 Binary files /dev/null and b/docs/sources/installation/images/kitematic.png differ diff --git a/docs/sources/installation/images/linux_docker_host.png b/docs/sources/installation/images/linux_docker_host.png new file mode 100644 index 0000000000..42895c2f76 Binary files /dev/null and b/docs/sources/installation/images/linux_docker_host.png differ diff --git a/docs/sources/installation/images/mac_docker_host.png b/docs/sources/installation/images/mac_docker_host.png new file mode 100644 index 0000000000..9aa71a4ebc Binary files /dev/null and b/docs/sources/installation/images/mac_docker_host.png differ diff --git a/docs/sources/installation/images/newsite_view.png b/docs/sources/installation/images/newsite_view.png new file mode 100644 index 0000000000..27b6b1a4dd Binary files /dev/null and b/docs/sources/installation/images/newsite_view.png differ diff --git a/docs/sources/installation/images/win/hp_bios_vm.JPG b/docs/sources/installation/images/win/hp_bios_vm.JPG index b44cabeac1..468d95ef5a 100644 Binary files a/docs/sources/installation/images/win/hp_bios_vm.JPG and b/docs/sources/installation/images/win/hp_bios_vm.JPG differ diff --git a/docs/sources/installation/images/win/run_04.gif b/docs/sources/installation/images/win/run_04.gif index a89f2a917b..75092762fc 100644 Binary files a/docs/sources/installation/images/win/run_04.gif and b/docs/sources/installation/images/win/run_04.gif differ diff --git a/docs/sources/installation/images/win/ts_go_bios.JPG b/docs/sources/installation/images/win/ts_go_bios.JPG index 05f2310ad3..c4159fc715 100644 Binary files a/docs/sources/installation/images/win/ts_go_bios.JPG and b/docs/sources/installation/images/win/ts_go_bios.JPG differ diff --git a/docs/sources/installation/images/win/ts_no_docker.JPG b/docs/sources/installation/images/win/ts_no_docker.JPG index 51fa766711..9ccba01c1e 100644 Binary files a/docs/sources/installation/images/win/ts_no_docker.JPG and b/docs/sources/installation/images/win/ts_no_docker.JPG differ diff --git a/docs/sources/installation/joyent.md b/docs/sources/installation/joyent.md new file mode 100644 index 0000000000..daa33b7996 --- /dev/null +++ b/docs/sources/installation/joyent.md @@ -0,0 +1,23 @@ +page_title: Install on Joyent Public Cloud +page_description: Installation instructions for Docker on the Joyent Compute Service. +page_keywords: Docker, Docker documentation, installation, joyent, Joyent Public Cloud, Joyent Compute Service, Joyent Container Service + +## Install on Joyent Public Cloud + +1. Sign in to the [Joyent customer portal](https://my.joyent.com/) + +2. [Create a Docker host](https://docs.joyent.com/jpc/managing-docker-containers/creating-a-docker-host). + +## Start and manage containers + +1. [Start containers in the web UI](https://docs.joyent.com/jpc/managing-docker-containers/starting-a-container) + +2. [Configure the Docker CLI on your laptop](https://docs.joyent.com/jpc/managing-docker-containers/access-your-jpc-docker-hosts-from-the-docker-cli) to connect to the remote host to launch and manage containers. + +3. SSH into the Docker host. + +4. Launch containers using the Docker CLI. + +## Where to go next + +Continue with the [Docker user guide](/userguide/), read Joyent's [getting started blog post](https://www.joyent.com/blog/first-steps-with-joyents-container-service), and [full documentation](https://docs.joyent.com/jpc/managing-docker-containers). \ No newline at end of file diff --git a/docs/sources/installation/mac.md b/docs/sources/installation/mac.md index d31cd697b6..9bf7632680 100644 --- a/docs/sources/installation/mac.md +++ b/docs/sources/installation/mac.md @@ -2,115 +2,326 @@ page_title: Installation on Mac OS X page_description: Instructions for installing Docker on OS X using boot2docker. page_keywords: Docker, Docker documentation, requirements, boot2docker, VirtualBox, SSH, Linux, OSX, OS X, Mac -# Installing Docker on Mac OS X +# Install Docker on Mac OS X -> **Note:** -> Docker is supported on Mac OS X 10.6 "Snow Leopard" or newer. +You can install Docker using Boot2Docker to run `docker` commands at your command-line. +Choose this installation if you are familiar with the command-line or plan to +contribute to the Docker project on GitHub. -Because the Docker Engine uses Linux-specific kernel features, you'll need to use a -lightweight virtual machine (VM) to run it on OS X. You use the OS X Docker client to -control the virtualized Docker Engine to build, run, and manage Docker containers. +Alternatively, you may want to try Kitematic, an application that lets you set up Docker and +run containers using a graphical user interface (GUI). -To make this process easier, we've built a helper application called -[Boot2Docker](https://github.com/boot2docker/boot2docker) that installs a -virtual machine (using VirtualBox) that's all set up to run the Docker daemon. +Download Kitematic -## Demonstration - +## Command-line Docker with Boot2Docker -## Installation +Because the Docker daemon uses Linux-specific kernel features, you can't run +Docker natively in OS X. Instead, you must install the Boot2Docker application. +The application includes a VirtualBox Virtual Machine (VM), Docker itself, and the +Boot2Docker management tool. -1. Download the latest release of the [Docker for OS X Installer]( - https://github.com/boot2docker/osx-installer/releases/latest) (Look for the - green Boot2Docker-x.x.x.pkg button near the bottom of the page.) +The Boot2Docker management tool is a lightweight Linux virtual machine made +specifically to run the Docker daemon on Mac OS X. The VirtualBox VM runs +completely from RAM, is a small ~24MB download, and boots in approximately 5s. -2. Run the installer by double-clicking the downloaded package, which will install a -VirtualBox VM, Docker itself, and the Boot2Docker management tool. - ![](/installation/images/osx-installer.png) +**Requirements** -3. Locate the `Boot2Docker` app in your `Applications` folder and run it. - Or, you can initialize Boot2Docker from the command line by running: +Your Mac must be running OS X 10.6 "Snow Leopard" or newer to run Boot2Docker. - $ boot2docker init - $ boot2docker start - $ $(boot2docker shellinit) +### Learn the key concepts before installing -A terminal window will open and you'll see the virtual machine starting up. -Once you have an initialized virtual machine, you can control it with `boot2docker stop` -and `boot2docker start`. +In a Docker installation on Linux, your machine is both the localhost and the +Docker host. In networking, localhost means your computer. The Docker host is +the machine on which the containers run. -> **Note:** -> If you see a message in the terminal that looks something like this: -> -> `To connect the Docker client to the Docker daemon, please set: export -DOCKER_HOST=tcp://192.168.59.103:2375` -> -you can safely set the environment variable as instructed. +On a typical Linux installation, the Docker client, the Docker daemon, and any +containers run directly on your localhost. This means you can address ports on a +Docker container using standard localhost addressing such as `localhost:8000` or +`0.0.0.0:8376`. -View the -[Boot2Docker ReadMe](https://github.com/boot2docker/boot2docker/blob/master/README.md) -for more information. +![Linux Architecture Diagram](/installation/images/linux_docker_host.png) -## Upgrading +In an OS X installation, the `docker` daemon is running inside a Linux virtual +machine provided by Boot2Docker. -1. Download the latest release of the [Docker for OS X Installer]( - https://github.com/boot2docker/osx-installer/releases/latest) +![OSX Architecture Diagram](/installation/images/mac_docker_host.png) -2. If Boot2Docker is currently running, stop it with `boot2docker stop`. Then, run -the installer package, which will update Docker and the Boot2Docker management tool. +In OS X, the Docker host address is the address of the Linux VM. +When you start the `boot2docker` process, the VM is assigned an IP address. Under +`boot2docker` ports on a container map to ports on the VM. To see this in +practice, work through the exercises on this page. -3. To complete the upgrade, you also need to update your existing virtual machine. Open a -terminal window and run: - $ boot2docker stop - $ boot2docker download - $ boot2docker start +### Install Boot2Docker -This will download an .iso image containing a fresh VM and start it up. Your upgrade is -complete. You can test it by following the directions below. +1. Go to the [boot2docker/osx-installer ]( +https://github.com/boot2docker/osx-installer/releases/latest) release page. -## Running Docker +4. Download Boot2Docker by clicking `Boot2Docker-x.x.x.pkg` in the "Downloads" +section. -{{ include "no-remote-sudo.md" }} +3. Install Boot2Docker by double-clicking the package. -From your terminal, you can test that Docker is running with our small `hello-world` -example image: -Start the vm (`boot2docker start`) and then run: + The installer places Boot2Docker in your "Applications" folder. - $ docker run hello-world +The installation places the `docker` and `boot2docker` binaries in your +`/usr/local/bin` directory. -This should download the `hello-world` image, which then creates a small -container with an executable that prints a brief `Hello from Docker.` message. -## Container port redirection +## Start the Boot2Docker Application -The latest version of `boot2docker` sets up a host-only network adaptor which provides -access to the container's ports. +To run a Docker container, you first start the `boot2docker` VM and then issue +`docker` commands to create, load, and manage containers. You can launch +`boot2docker` from your Applications folder or from the command line. -If you run a container with an exposed port, +> **NOTE**: Boot2Docker is designed as a development tool. You should not use +> it in production environments. - $ docker run --rm -i -t -p 80:80 nginx +### From the Applications folder -then you should be able to access that Nginx server using the IP address reported by: +When you launch the "Boot2Docker" application from your "Applications" folder, the +application: - $ boot2docker ip +* opens a terminal window -Typically, it is 192.168.59.103:2375, but VirtualBox's DHCP implementation might change -this address in the future. +* creates a $HOME/.boot2docker directory -# Further details +* creates a VirtualBox ISO and certs -If you are curious, the username for the boot2docker default user is `docker` and the -password is `tcuser`. +* starts a VirtualBox VM running the `docker` daemon -The Boot2Docker management tool provides several additional commands for working with the -VM and Docker: +Once the launch completes, you can run `docker` commands. A good way to verify +your setup succeeded is to run the `hello-world` container. - $ ./boot2docker - Usage: ./boot2docker [] - {help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|delete|download|version} [] + $ docker run hello-world + Unable to find image 'hello-world:latest' locally + 511136ea3c5a: Pull complete + 31cbccb51277: Pull complete + e45a5af57b00: Pull complete + hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. + Status: Downloaded newer image for hello-world:latest + Hello from Docker. + This message shows that your installation appears to be working correctly. -Continue with the [User Guide](/userguide/). + To generate this message, Docker took the following steps: + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. + (Assuming it was not already locally available.) + 3. The Docker daemon created a new container from that image which runs the + executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it + to your terminal. -For further information or to report issues, please visit the [Boot2Docker site](http://boot2docker.io). + To try something more ambitious, you can run an Ubuntu container with: + $ docker run -it ubuntu bash + + For more examples and ideas, visit: + http://docs.docker.com/userguide/ + + +A more typical way to start and stop `boot2docker` is using the command line. + +### From your command line + +Initialize and run `boot2docker` from the command line, do the following: + +1. Create a new Boot2Docker VM. + + $ boot2docker init + + This creates a new virtual machine. You only need to run this command once. + +2. Start the `boot2docker` VM. + + $ boot2docker start + +3. Display the environment variables for the Docker client. + + $ boot2docker shellinit + Writing /Users/mary/.boot2docker/certs/boot2docker-vm/ca.pem + Writing /Users/mary/.boot2docker/certs/boot2docker-vm/cert.pem + Writing /Users/mary/.boot2docker/certs/boot2docker-vm/key.pem + export DOCKER_HOST=tcp://192.168.59.103:2376 + export DOCKER_CERT_PATH=/Users/mary/.boot2docker/certs/boot2docker-vm + export DOCKER_TLS_VERIFY=1 + + The specific paths and address on your machine will be different. + +4. To set the environment variables in your shell do the following: + + $ eval "$(boot2docker shellinit)" + + You can also set them manually by using the `export` commands `boot2docker` + returns. + +5. Run the `hello-world` container to verify your setup. + + $ docker run hello-world + + +## Basic Boot2Docker Exercises + +At this point, you should have `boot2docker` running and the `docker` client +environment initialized. To verify this, run the following commands: + + $ boot2docker status + $ docker version + +Work through this section to try some practical container tasks using `boot2docker` VM. + +### Access container ports + +1. Start an NGINX container on the DOCKER_HOST. + + $ docker run -d -P --name web nginx + + Normally, the `docker run` commands starts a container, runs it, and then + exits. The `-d` flag keeps the container running in the background + after the `docker run` command completes. The `-P` flag publishes exposed ports from the + container to your local host; this lets you access them from your Mac. + +2. Display your running container with `docker ps` command + + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 5fb65ff765e9 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 0.0.0.0:49156->443/tcp, 0.0.0.0:49157->80/tcp web + + At this point, you can see `nginx` is running as a daemon. + +3. View just the container's ports. + + $ docker port web + 443/tcp -> 0.0.0.0:49156 + 80/tcp -> 0.0.0.0:49157 + + This tells you that the `web` container's port `80` is mapped to port + `49157` on your Docker host. + +4. Enter the `http://localhost:49157` address (`localhost` is `0.0.0.0`) in your browser: + + ![Bad Address](/installation/images/bad_host.png) + + This didn't work. The reason it doesn't work is your `DOCKER_HOST` address is + not the localhost address (0.0.0.0) but is instead the address of the + `boot2docker` VM. + +5. Get the address of the `boot2docker` VM. + + $ boot2docker ip + 192.168.59.103 + +6. Enter the `http://192.168.59.103:49157` address in your browser: + + ![Correct Addressing](/installation/images/good_host.png) + + Success! + +7. To stop and then remove your running `nginx` container, do the following: + + $ docker stop web + $ docker rm web + +### Mount a volume on the container + +When you start `boot2docker`, it automatically shares your `/Users` directory +with the VM. You can use this share point to mount directories onto your container. +The next exercise demonstrates how to do this. + +1. Change to your user `$HOME` directory. + + $ cd $HOME + +2. Make a new `site` directory. + + $ mkdir site + +3. Change into the `site` directory. + + $ cd site + +4. Create a new `index.html` file. + + $ echo "my new site" > index.html + +5. Start a new `nginx` container and replace the `html` folder with your `site` directory. + + $ docker run -d -P -v $HOME/site:/usr/share/nginx/html --name mysite nginx + +6. Get the `mysite` container's port. + + $ docker port mysite + 80/tcp -> 0.0.0.0:49166 + 443/tcp -> 0.0.0.0:49165 + +7. Open the site in a browser: + + ![My site page](/installation/images/newsite_view.png) + +8. Try adding a page to your `$HOME/site` in real time. + + $ echo "This is cool" > cool.html + +9. Open the new page in the browser. + + ![Cool page](/installation/images/cool_view.png) + +9. Stop and then remove your running `mysite` container. + + $ docker stop mysite + $ docker rm mysite + +## Upgrade Boot2Docker + +If you running Boot2Docker 1.4.1 or greater, you can upgrade Boot2Docker from +the command line. If you are running an older version, you should use the +package provided by the `boot2docker` repository. + +### From the command line + +To upgrade from 1.4.1 or greater, you can do this: + +1. Open a terminal on your local machine. + +2. Stop the `boot2docker` application. + + $ boot2docker stop + +3. Run the upgrade command. + + $ boot2docker upgrade + + +### Use the installer + +To upgrade any version of Boot2Docker, do this: + +1. Open a terminal on your local machine. + +2. Stop the `boot2docker` application. + + $ boot2docker stop + +3. Go to the [boot2docker/osx-installer ]( + https://github.com/boot2docker/osx-installer/releases/latest) release page. + +4. Download Boot2Docker by clicking `Boot2Docker-x.x.x.pkg` in the "Downloads" +section. + +2. Install Boot2Docker by double-clicking the package. + + The installer places Boot2Docker in your "Applications" folder. + + +## Learning more and Acknowledgement + + +Use `boot2docker help` to list the full command line reference. For more +information about using SSH or SCP to access the Boot2Docker VM, see the README +at [Boot2Docker repository](https://github.com/boot2docker/boot2docker). + +Thanks to Chris Jones whose [blog](http://goo.gl/Be6cCk) inspired me to redo +this page. + +Continue with the [Docker User Guide](/userguide/). \ No newline at end of file diff --git a/docs/sources/installation/ubuntulinux.md b/docs/sources/installation/ubuntulinux.md index 5f36b2a587..85a37d768d 100644 --- a/docs/sources/installation/ubuntulinux.md +++ b/docs/sources/installation/ubuntulinux.md @@ -1,395 +1,305 @@ -page_title: Installation on Ubuntu -page_description: Instructions for installing Docker on Ubuntu. +page_title: Installation on Ubuntu +page_description: Instructions for installing Docker on Ubuntu. page_keywords: Docker, Docker documentation, requirements, virtualbox, installation, ubuntu -# Ubuntu +#Ubuntu -Docker is supported on the following versions of Ubuntu: +Docker is supported on these Ubuntu operating systems: - - [*Ubuntu Trusty 14.04 (LTS) (64-bit)*](#ubuntu-trusty-1404-lts-64-bit) - - [*Ubuntu Precise 12.04 (LTS) (64-bit)*](#ubuntu-precise-1204-lts-64-bit) - - [*Ubuntu Raring 13.04 and Saucy 13.10 (64 - bit)*](#ubuntu-raring-1304-and-saucy-1310-64-bit) +- Ubuntu Trusty 14.04 (LTS) +- Ubuntu Precise 12.04 (LTS) +- Ubuntu Saucy 13.10 -Please read [*Docker and UFW*](#docker-and-ufw), if you plan to use [UFW -(Uncomplicated Firewall)](https://help.ubuntu.com/community/UFW) +This page instructs you to install using Docker-managed release packages and +installation mechanisms. Using these packages ensures you get the latest release +of Docker. If you wish to install using Ubuntu-managed packages, consult your +Ubuntu documentation. -## Ubuntu Trusty 14.04 (LTS) (64-bit) +##Prerequisites -Ubuntu Trusty comes with a 3.13.0 Linux kernel, and a `docker.io` package which -installs Docker 1.0.1 and all its prerequisites from Ubuntu's repository. +Docker requires a 64-bit installation regardless of your Ubuntu version. +Additionally, your kernel must be 3.10 at minimum. The latest 3.10 minor version +or a newer maintained version are also acceptable. -> **Note**: -> Ubuntu (and Debian) contain a much older KDE3/GNOME2 package called ``docker``, so the -> Ubuntu-maintained package and executable are named ``docker.io``. +Kernels older than 3.10 lack some of the features required to run Docker +containers. These older versions are known to have bugs which cause data loss +and frequently panic under certain conditions. -### Ubuntu-maintained Package Installation +To check your current kernel version, open a terminal and use `uname -r` to display +your kernel version: -To install the latest Ubuntu package (this is **not** the most recent Docker release): + $ uname -r + 3.11.0-15-generic - $ sudo apt-get update - $ sudo apt-get install docker.io +>**Caution** Some Ubuntu OS versions **require a version higher than 3.10** to +>run Docker, see the prerequisites on this page that apply to your Ubuntu +>version. -Then, to enable tab-completion of Docker commands in BASH, either restart BASH or: +###For Trusty 14.04 - $ source /etc/bash_completion.d/docker.io +There are no prerequisites for this version. -> **Note**: -> Since the Ubuntu package is quite dated at this point, you may want to use -> the following section to install the most recent release of Docker. -> If you install the Docker version, you do not need to install ``docker.io`` from Ubuntu. +###For Precise 12.04 (LTS) -### Docker-maintained Package Installation +For Ubuntu Precise, Docker requires the 3.13 kernel version. If your kernel +version is older than 3.13, you must upgrade it. Refer to this table to see +which packages are required for your environment: -If you'd like to try the latest version of Docker: + + +
    linux-image-generic-lts-trusty Generic +Linux kernel image. This kernel has AUFS built in. This is required to run +Docker.
    linux-headers-generic-lts-trustyAllows packages such as ZFS and VirtualBox guest additions +which depend on them. If you didn't install the headers for your existing +kernel, then you can skip these headers for the"trusty" kernel. If you're +unsure, you should include this package for safety.
    xserver-xorg-lts-trusty Optional in non-graphical environments without Unity/Xorg. +Required when running Docker on machine with a graphical environment. -First, check that your APT system can deal with `https` -URLs: the file `/usr/lib/apt/methods/https` -should exist. If it doesn't, you need to install the package -`apt-transport-https`. +

    To learn more about the reasons for these packages, read the installation +instructions for backported kernels, specifically the LTS +Enablement Stack — refer to note 5 under each version.

    libgl1-mesa-glx-lts-trusty
      - [ -e /usr/lib/apt/methods/https ] || { - apt-get update - apt-get install apt-transport-https - } +To upgrade your kernel and install the additional packages, do the following: -Then, add the Docker repository key to your local keychain. +1. Open a terminal on your Ubuntu host. - $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 +2. Update your package manager. -Add the Docker repository to your apt sources list, update and install -the `lxc-docker` package. + $ sudo apt-get update -*You may receive a warning that the package isn't trusted. Answer yes to -continue installation.* +3. Install both the required and optional packages. - $ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\ - > /etc/apt/sources.list.d/docker.list" - $ sudo apt-get update - $ sudo apt-get install lxc-docker + $ sudo apt-get install linux-image-generic-lts-trusty -> **Note**: -> -> There is also a simple `curl` script available to help with this process. -> -> $ curl -sSL https://get.docker.com/ubuntu/ | sudo sh + Depending on your environment, you may install more as described in the preceding table. -To verify that everything has worked as expected: +4. Reboot your host. - $ sudo docker run -i -t ubuntu /bin/bash + $ sudo reboot -Which should download the `ubuntu` image, and then start `bash` in a container. +5. After your system reboots, go ahead and [install Docker](#installing-docker-on-ubuntu). -Type `exit` to exit -**Done!**, continue with the [User Guide](/userguide/). +###For Saucy 13.10 (64 bit) +Docker uses AUFS as the default storage backend. If you don't have this +prerequisite installed, Docker's installation process adds it. -## Ubuntu Precise 12.04 (LTS) (64-bit) +##Installing Docker on Ubuntu -This installation path should work at all times. +Make sure you have intalled the prerequisites for your Ubuntu version. Then, +install Docker using the following: -### Dependencies +1. Log into your Ubuntu installation as a user with `sudo` privileges. -**Linux kernel 3.13** +2. Verify that you have `wget` installed. -For Ubuntu Precise, the currently recommended kernel version is 3.13. -Ubuntu Precise installations with older kernels must be upgraded. The -kernel you'll install when following these steps has AUFS built in. -We also include the generic headers to enable packages that depend on them, -like ZFS and the VirtualBox guest additions. If you didn't install the -headers for your "precise" kernel, then you can skip these headers for the -"trusty" kernel. If you're unsure, you should include the headers for safety. + $ which wget -> **Warning**: -> Kernels 3.8 and 3.11 are no longer supported by Canonical. Systems -> running these kernels need to be updated using the instructions below. -> Running Docker on these unsupported systems isn't supported either. -> These old kernels are no longer patched for security vulnerabilities -> and severe bugs which lead to data loss. + If `wget` isn't installed, install it after updating your manager: -Please read the installation instructions for backported kernels at -Ubuntu.org to understand why you also need to install the Xorg packages -when running Docker on a machine with a graphical environment like Unity. -[LTS Enablement Stack](https://wiki.ubuntu.com/Kernel/LTSEnablementStack) refer to note 5 under -each version. + $ sudo apt-get update $ sudo apt-get install wget - # install the backported kernel - $ sudo apt-get update - $ sudo apt-get install linux-image-generic-lts-trusty linux-headers-generic-lts-trusty - - # install the backported kernel and xorg if using Unity/Xorg - $ sudo apt-get install --install-recommends linux-generic-lts-trusty xserver-xorg-lts-trusty libgl1-mesa-glx-lts-trusty +3. Get the latest Docker package. - # reboot - $ sudo reboot + $ wget -qO- https://get.docker.com/ | sh -### Installation + The system prompts you for your `sudo` password. Then, it downloads and + installs Docker and its dependencies. -> **Warning**: -> These instructions have changed for 0.6. If you are upgrading from an -> earlier version, you will need to follow them again. +4. Verify `docker` is installed correctly. -Docker is available as a Debian package, which makes installation easy. -**See the** [*Mirrors*](#mirrors) **section below if you are not -in the United States.** Other sources of the Debian packages may be -faster for you to install. + $ sudo docker run hello-world -First, check that your APT system can deal with `https` -URLs: the file `/usr/lib/apt/methods/https` -should exist. If it doesn't, you need to install the package -`apt-transport-https`. + This command downloads a test image and runs it in a container. - [ -e /usr/lib/apt/methods/https ] || { - apt-get update - apt-get install apt-transport-https - } +## Optional Configurations for Docker on Ubuntu -Then, add the Docker repository key to your local keychain. +This section contains optional procedures for configuring your Ubuntu to work +better with Docker. - $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 +* [Create a docker group](#create-a-docker-group) +* [Adjust memory and swap accounting](#adjust-memory-and-swap-accounting) +* [Enable UFW forwarding](#enable-ufw-forwarding) +* [Configure a DNS server for use by Docker](#configure-a-dns-server-for-docker) -Add the Docker repository to your apt sources list, update and install -the `lxc-docker` package. +### Create a docker group -*You may receive a warning that the package isn't trusted. Answer yes to -continue installation.* +The `docker` daemon binds to a Unix socket instead of a TCP port. By default +that Unix socket is owned by the user `root` and other users can access it with +`sudo`. For this reason, `docker` daemon always runs as the `root` user. - $ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\ - > /etc/apt/sources.list.d/docker.list" - $ sudo apt-get update - $ sudo apt-get install lxc-docker +To avoid having to use `sudo` when you use the `docker` command, create a Unix +group called `docker` and add users to it. When the `docker` daemon starts, it +makes the ownership of the Unix socket read/writable by the `docker` group. -> **Note**: -> -> There is also a simple `curl` script available to help with this process. -> -> $ curl -sSL https://get.docker.com/ubuntu/ | sudo sh +>**Warning**: The `docker` group is equivalent to the `root` user; For details +>on how this impacts security in your system, see [*Docker Daemon Attack +>Surface*](/articles/security/#docker-daemon-attack-surface) for details. -Now verify that the installation has worked by downloading the -`ubuntu` image and launching a container. +To create the `docker` group and add your user: - $ sudo docker run -i -t ubuntu /bin/bash +1. Log into Ubuntu as a user with `sudo` privileges. -Type `exit` to exit + This procedure assumes you log in as the `ubuntu` user. -**Done!**, continue with the [User Guide](/userguide/). +3. Create the `docker` group and add your user. -## Ubuntu Raring 13.04 and Saucy 13.10 (64 bit) + $ sudo usermod -aG docker ubuntu -These instructions cover both Ubuntu Raring 13.04 and Saucy 13.10. +3. Log out and log back in. -### Dependencies + This ensures your user is running with the correct permissions. -**Optional AUFS filesystem support** +4. Verify your work by running `docker` without `sudo`. -Ubuntu Raring already comes with the 3.8 kernel, so we don't need to -install it. However, not all systems have AUFS filesystem support -enabled. AUFS support is optional as of version 0.7, but it's still -available as a driver and we recommend using it if you can. + $ docker run hello-world -To make sure AUFS is installed, run the following commands: - $ sudo apt-get update - $ sudo apt-get install linux-image-extra-`uname -r` +### Adjust memory and swap accounting -### Installation +When users run Docker, they may see these messages when working with an image: -Docker is available as a Debian package, which makes installation easy. + WARNING: Your kernel does not support cgroup swap limit. WARNING: Your + kernel does not support swap limit capabilities. Limitation discarded. -> **Warning**: -> Please note that these instructions have changed for 0.6. If you are -> upgrading from an earlier version, you will need to follow them again. +To prevent these messages, enable memory and swap accounting on your system. To +enable these on system using GNU GRUB (GNU GRand Unified Bootloader), do the +following. -First add the Docker repository key to your local keychain. +1. Log into Ubuntu as a user with `sudo` privileges. - $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 +2. Edit the `/etc/default/grub` file. -Add the Docker repository to your apt sources list, update and install -the `lxc-docker` package. +3. Set the `GRUB_CMDLINE_LINUX` value as follows: - $ sudo sh -c "echo deb http://get.docker.com/ubuntu docker main\ - > /etc/apt/sources.list.d/docker.list" - $ sudo apt-get update - $ sudo apt-get install lxc-docker + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" -Now verify that the installation has worked by downloading the -`ubuntu` image and launching a container. +4. Save and close the file. - $ sudo docker run -i -t ubuntu /bin/bash +5. Update GRUB. -Type `exit` to exit + $ sudo update-grub -**Done!**, now continue with the [User Guide](/userguide/). +6. Reboot your system. -### Upgrade -To install the latest version of Docker, use the standard -`apt-get` method: +### Enable UFW forwarding - # update your sources list - $ sudo apt-get update +If you use [UFW (Uncomplicated Firewall)](https://help.ubuntu.com/community/UFW) +on the same host as you run Docker, you'll need to do additional configuration. +Docker uses a bridge to manage container networking. By default, UFW drops all +forwarding traffic. As a result, for Docker to run when UFW is +enabled, you must set UFW's forwarding policy appropriately. - # install the latest - $ sudo apt-get install lxc-docker +Also, UFW's default set of rules denies all incoming traffic. If you want to be able +to reach your containers from another host then you should also allow incoming +connections on the Docker port (default `2375`). -## Giving non-root access +To configure UFW and allow incoming connections on the Docker port: -The `docker` daemon always runs as the `root` user, and since Docker -version 0.5.2, the `docker` daemon binds to a Unix socket instead of a -TCP port. By default that Unix socket is owned by the user `root`, and -so, by default, you can access it with `sudo`. +1. Log into Ubuntu as a user with `sudo` privileges. -Starting in version 0.5.3, if you (or your Docker installer) create a -Unix group called `docker` and add users to it, then the `docker` daemon -will make the ownership of the Unix socket read/writable by the `docker` -group when the daemon starts. The `docker` daemon must always run as the -`root` user, but if you run the `docker` client as a user in the -`docker` group then you don't need to add `sudo` to all the client -commands. From Docker 0.9.0 you can use the `-G` flag to specify an -alternative group. +2. Verify that UFW is installed and enabled. -> **Warning**: -> The `docker` group (or the group specified with the `-G` flag) is -> `root`-equivalent; see [*Docker Daemon Attack Surface*]( -> /articles/security/#docker-daemon-attack-surface) for details. + $ sudo ufw status -**Example:** +3. Open the `/etc/default/ufw` file for editing. - # Add the docker group if it doesn't already exist. - $ sudo groupadd docker + $ sudo nano /etc/default/ufw - # Add the connected user "${USER}" to the docker group. - # Change the user name to match your preferred user. - # You may have to logout and log back in again for - # this to take effect. - $ sudo gpasswd -a ${USER} docker +4. Set the `DEFAULT_FORWARD_POLICY` policy to: - # Restart the Docker daemon. - # If you are in Ubuntu 14.04, use docker.io instead of docker - $ sudo service docker restart + DEFAULT_FORWARD_POLICY="ACCEPT" -## Memory and Swap Accounting +5. Save and close the file. -If you want to enable memory and swap accounting, you must add the -following command-line parameters to your kernel: +6. Reload UFW to use the new setting. - cgroup_enable=memory swapaccount=1 + $ sudo ufw reload -On systems using GRUB (which is the default for Ubuntu), you can add -those parameters by editing `/etc/default/grub` and -extending `GRUB_CMDLINE_LINUX`. Look for the -following line: +7. Allow incoming connections on the Docker port. - GRUB_CMDLINE_LINUX="" + $ sudo ufw allow 2375/tcp -And replace it by the following one: +### Configure a DNS server for use by Docker - GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" +Systems that run Ubuntu or an Ubuntu derivative on the desktop typically use +`127.0.0.1` as the default `nameserver` in `/etc/resolv.conf` file. The +NetworkManager also sets up `dnsmasq` to use the real DNS servers of the +connection and sets up `nameserver 127.0.0.1` in /`etc/resolv.conf`. -Then run `sudo update-grub`, and reboot. +When starting containers on desktop machines with these configurations, Docker +users see this warning: -These parameters will help you get rid of the following warnings: + WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers + can't use it. Using default external servers : [8.8.8.8 8.8.4.4] - WARNING: Your kernel does not support cgroup swap limit. - WARNING: Your kernel does not support swap limit capabilities. Limitation discarded. +The warning occurs because Docker containers can't use the local DNS nameserver. +Instead, Docker defaults to using an external nameserver. -## Troubleshooting +To avoid this warning, you can specify a DNS server for use by Docker +containers. Or, you can disable `dnsmasq` in NetworkManager. Though, disabiling +`dnsmasq` might make DNS resolution slower on some networks. -On Linux Mint, the `cgroup-lite` and `apparmor` packages are not -installed by default. Before Docker will work correctly, you will need -to install this via: +To specify a DNS server for use by Docker: - $ sudo apt-get update && sudo apt-get install cgroup-lite apparmor +1. Log into Ubuntu as a user with `sudo` privileges. -## Docker and UFW +2. Open the `/etc/default/docker` file for editing. -Docker uses a bridge to manage container networking. By default, UFW -drops all forwarding traffic. As a result you will need to enable UFW -forwarding: + $ sudo nano /etc/default/docker - $ sudo nano /etc/default/ufw +3. Add a setting for Docker. - # Change: - # DEFAULT_FORWARD_POLICY="DROP" - # to - DEFAULT_FORWARD_POLICY="ACCEPT" + DOCKER_OPTS="--dns 8.8.8.8" -Then reload UFW: + Replace `8.8.8.8` with a local DNS server such as `192.168.1.1`. You can also + specify multiple DNS servers. Separated them with spaces, for example: - $ sudo ufw reload + --dns 8.8.8.8 --dns 192.168.1.1 -UFW's default set of rules denies all incoming traffic. If you want to -be able to reach your containers from another host then you should allow -incoming connections on the Docker port (default 2375): + >**Warning**: If you're doing this on a laptop which connects to various + >networks, make sure to choose a public DNS server. - $ sudo ufw allow 2375/tcp +4. Save and close the file. -## Docker and local DNS server warnings +5. Restart the Docker daemon. -Systems which are running Ubuntu or an Ubuntu derivative on the desktop -will use 127.0.0.1 as the default nameserver in /etc/resolv.conf. -NetworkManager sets up dnsmasq to use the real DNS servers of the -connection and sets up nameserver 127.0.0.1 in /etc/resolv.conf. + $ sudo restart docker -When starting containers on these desktop machines, users will see a -warning: - WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4] +  +  -This warning is shown because the containers can't use the local DNS -nameserver and Docker will default to using an external nameserver. +**Or, as an alternative to the previous procedure,** disable `dnsmasq` in +NetworkManager (this might slow your network). -This can be worked around by specifying a DNS server to be used by the -Docker daemon for the containers: +1. Open the `/etc/default/docker` file for editing. - $ sudo nano /etc/default/docker - --- - # Add: - DOCKER_OPTS="--dns 8.8.8.8" - # 8.8.8.8 could be replaced with a local DNS server, such as 192.168.1.1 - # multiple DNS servers can be specified: --dns 8.8.8.8 --dns 192.168.1.1 + $ sudo nano /etc/NetworkManager/NetworkManager.conf -The Docker daemon has to be restarted: +2. Comment out the `dns=dsnmasq` line: - $ sudo restart docker + dns=dnsmasq -> **Warning**: -> If you're doing this on a laptop which connects to various networks, -> make sure to choose a public DNS server. +3. Save and close the file. -An alternative solution involves disabling dnsmasq in NetworkManager by -following these steps: +4. Restart both the NetworkManager and Docker. - $ sudo nano /etc/NetworkManager/NetworkManager.conf - ---- - # Change: - dns=dnsmasq - # to - #dns=dnsmasq + $ sudo restart network-manager $ sudo restart docker -NetworkManager and Docker need to be restarted afterwards: - $ sudo restart network-manager - $ sudo restart docker +## Upgrade Docker -> **Warning**: This might make DNS resolution slower on some networks. +To install the latest version of Docker, use the standard `-N` flag with `wget`: -## Mirrors + $ wget -N https://get.docker.com/ | sh -You should `ping get.docker.com` and compare the -latency to the following mirrors, and pick whichever one is best for -you. - -### Yandex - -[Yandex](http://yandex.ru/) in Russia is mirroring the Docker Debian -packages, updating every 6 hours. -Substitute `http://mirror.yandex.ru/mirrors/docker/` for -`http://get.docker.com/ubuntu` in the instructions above. -For example: - - $ sudo sh -c "echo deb http://mirror.yandex.ru/mirrors/docker/ docker main\ - > /etc/apt/sources.list.d/docker.list" - $ sudo apt-get update - $ sudo apt-get install lxc-docker diff --git a/docs/sources/introduction/understanding-docker.md b/docs/sources/introduction/understanding-docker.md index c561459e67..9c9995972f 100644 --- a/docs/sources/introduction/understanding-docker.md +++ b/docs/sources/introduction/understanding-docker.md @@ -72,7 +72,7 @@ Docker has two major components: platform for sharing and managing Docker containers. -**Note:** Docker is licensed under the open source Apache 2.0 license. +> **Note:** Docker is licensed under the open source Apache 2.0 license. ## What is Docker's architecture? Docker uses a client-server architecture. The Docker *client* talks to the diff --git a/docs/sources/project.md b/docs/sources/project.md new file mode 100644 index 0000000000..fc1fe18ed3 --- /dev/null +++ b/docs/sources/project.md @@ -0,0 +1,19 @@ +# Project + +## Contents: + +-[README first](who-written-for.md) +-[Get the required software](software-required.md) +-[Configure Git for contributing](set-up-git.md) +-[Work with a development container](set-up-dev-env.md) +-[Run tests and test documentation](test-and-docs.md) +-[Understand contribution workflow](make-a-contribution.md) +-[Find an issue](find-an-issue.md) +-[Work on an issue](work-issue.md) +-[Create a pull request](create-pr.md) +-[Participate in the PR Review](review-pr.md) +-[Advanced contributing](advanced-contributing.md) +-[Where to get help](get-help.md) +-[Coding style guide](coding-style.md) +-[Documentation style guide](doc-style.md) + diff --git a/docs/sources/project/advanced-contributing.md b/docs/sources/project/advanced-contributing.md new file mode 100644 index 0000000000..df5756d9d7 --- /dev/null +++ b/docs/sources/project/advanced-contributing.md @@ -0,0 +1,139 @@ +page_title: Advanced contributing +page_description: Explains workflows for refactor and design proposals +page_keywords: contribute, project, design, refactor, proposal + +# Advanced contributing + +In this section, you learn about the more advanced contributions you can make. +They are advanced because they have a more involved workflow or require greater +programming experience. Don't be scared off though, if you like to stretch and +challenge yourself, this is the place for you. + +This section gives generalized instructions for advanced contributions. You'll +read about the workflow but there are not specific descriptions of commands. +Your goal should be to understand the processes described. + +At this point, you should have read and worked through the earlier parts of +the project contributor guide. You should also have + made at least one project contribution. + +## Refactor or cleanup proposal + +A refactor or cleanup proposal changes Docker's internal structure without +altering the external behavior. To make this type of proposal: + +1. Fork `docker/docker`. + +2. Make your changes in a feature branch. + +3. Sync and rebase with `master` as you work. + +3. Run the full test suite. + +4. Submit your code through a pull request (PR). + + The PR's title should have the format: + + **Cleanup:** _short title_ + + If your changes required logic changes, note that in your request. + +5. Work through Docker's review process until merge. + + +## Design proposal + +A design proposal solves a problem or adds a feature to the Docker software. +The process for submitting design proposals requires two pull requests, one +for the design and one for the implementation. + +![Simple process](/project/images/proposal.png) + +The important thing to notice is that both the design pull request and the +implementation pull request go through a review. In other words, there is +considerable time commitment in a design proposal; so, you might want to pair +with someone on design work. + +The following provides greater detail on the process: + +1. Come up with an idea. + + Ideas usually come from limitations users feel working with a product. So, + take some time to really use Docker. Try it on different platforms; explore + how it works with different web applications. Go to some community events + and find out what other users want. + +2. Review existing issues and proposals to make sure no other user is proposing a similar idea. + + The design proposals are all online in our GitHub pull requests. + +3. Talk to the community about your idea. + + We have lots of community forums + where you can get feedback on your idea. Float your idea in a forum or two + to get some commentary going on it. + +4. Fork `docker/docker` and clone the repo to your local host. + +5. Create a new Markdown file in the area you wish to change. + + For example, if you want to redesign our daemon create a new file under the + `daemon/` folder. + +6. Name the file descriptively, for example `redesign-daemon-proposal.md`. + +7. Write a proposal for your change into the file. + + This is a Markdown file that describes your idea. Your proposal + should include information like: + + * Why is this changed needed or what are the use cases? + * What are the requirements this change should meet? + * What are some ways to design/implement this feature? + * Which design/implementation do you think is best and why? + * What are the risks or limitations of your proposal? + + This is your chance to convince people your idea is sound. + +8. Submit your proposal in a pull request to `docker/docker`. + + The title should have the format: + + **Proposal:** _short title_ + + The body of the pull request should include a brief summary of your change + and then say something like "_See the file for a complete description_". + +9. Refine your proposal through review. + + The maintainers and the community review your proposal. You'll need to + answer questions and sometimes explain or defend your approach. This is + chance for everyone to both teach and learn. + +10. Pull request accepted. + + Your request may also be rejected. Not every idea is a good fit for Docker. + Let's assume though your proposal succeeded. + +11. Implement your idea. + + Implementation uses all the standard practices of any contribution. + + * fork `docker/docker` + * create a feature branch + * sync frequently back to master + * test as you go and full test before a PR + + If you run into issues, the community is there to help. + +12. When you have a complete implementation, submit a pull request back to `docker/docker`. + +13. Review and iterate on your code. + + If you are making a large code change, you can expect greater scrutiny + during this phase. + +14. Acceptance and merge! + diff --git a/docs/sources/project/coding-style.md b/docs/sources/project/coding-style.md new file mode 100644 index 0000000000..e5b6f5fe9c --- /dev/null +++ b/docs/sources/project/coding-style.md @@ -0,0 +1,93 @@ +page_title: Coding Style Checklist +page_description: List of guidelines for coding Docker contributions +page_keywords: change, commit, squash, request, pull request, test, unit test, integration tests, Go, gofmt, LGTM + +# Coding Style Checklist + +This checklist summarizes the material you experienced working through [make a +code contribution](/project/make-a-contribution) and [advanced +contributing](/project/advanced-contributing). The checklist applies to code +that is program code or code that is documentation code. + +## Change and commit code + +* Fork the `docker/docker` repository. + +* Make changes on your fork in a feature branch. Name your branch `XXXX-something` + where `XXXX` is the issue number you are working on. + +* Run `gofmt -s -w file.go` on each changed file before + committing your changes. Most editors have plug-ins that do this automatically. + +* Update the documentation when creating or modifying features. + +* Commits that fix or close an issue should reference them in the commit message + `Closes #XXXX` or `Fixes #XXXX`. Mentions help by automatically closing the + issue on a merge. + +* After every commit, run the test suite and ensure it is passing. + +* Sync and rebase frequently as you code to keep up with `docker` master. + +* Set your `git` signature and make sure you sign each commit. + +* Do not add yourself to the `AUTHORS` file. This file is autogenerated from the + Git history. + +## Tests and testing + +* Submit unit tests for your changes. + +* Make use of the builtin Go test framework built. + +* Use existing Docker test files (`name_test.go`) for inspiration. + +* Run the full test suite on your + branch before submitting a pull request. + +* Run `make docs` to build the documentation and then check it locally. + +* Use an online grammar + checker or similar to test you documentation changes for clarity, + concision, and correctness. + +## Pull requests + +* Sync and cleanly rebase on top of Docker's `master` without multiple branches + mixed into the PR. + +* Before the pull request, squash your commits into logical units of work using + `git rebase -i` and `git push -f`. + +* Include documentation changes in the same commit so that a revert would + remove all traces of the feature or fix. + +* Reference each issue in your pull request description (`#XXXX`) + +## Respond to pull requests reviews + +* Docker maintainers use LGTM (**l**ooks-**g**ood-**t**o-**m**e) in PR comments + to indicate acceptance. + +* Code review comments may be added to your pull request. Discuss, then make + the suggested modifications and push additional commits to your feature + branch. + +* Incorporate changes on your feature branch and push to your fork. This + automatically updates your open pull request. + +* Post a comment after pushing to alert reviewers to PR changes; pushing a + change does not send notifications. + +* A change requires LGTMs from an absolute majority maintainers of an + affected component. For example, if you change `docs/` and `registry/` code, + an absolute majority of the `docs/` and the `registry/` maintainers must + approve your PR. + +## Merges after pull requests + +* After a merge, [a master build](https://master.dockerproject.com/) is + available almost immediately. + +* If you made a documentation change, you can see it at + [docs.master.dockerproject.com](http://docs.master.dockerproject.com/). diff --git a/docs/sources/project/create-pr.md b/docs/sources/project/create-pr.md new file mode 100644 index 0000000000..197aee849d --- /dev/null +++ b/docs/sources/project/create-pr.md @@ -0,0 +1,127 @@ +page_title: Create a pull request (PR) +page_description: Basic workflow for Docker contributions +page_keywords: contribute, pull request, review, workflow, beginner, squash, commit + +# Create a pull request (PR) + +A pull request (PR) sends your changes to the Docker maintainers for review. You +create a pull request on GitHub. A pull request "pulls" changes from your forked +repository into the `docker/docker` repository. + +You can see the +list of active pull requests to Docker on GitHub. + +## Check Your Work + +Before you create a pull request, check your work. + +1. In a terminal window, go to the root of your `docker-fork` repository. + + $ cd ~/repos/docker-fork + +2. Checkout your feature branch. + + $ git checkout 11038-fix-rhel-link + Already on '11038-fix-rhel-link' + +3. Run the full test suite on your branch. + + $ make test + + All the tests should pass. If they don't, find out why and correct the + situation. + +4. Optionally, if modified the documentation, build the documentation: + + $ make docs + +5. Commit and push any changes that result from your checks. + +## Rebase your branch + +Always rebase and squash your commits before making a pull request. + +1. Fetch any of the last minute changes from `docker/docker`. + + $ git fetch upstream master + From github.com:docker/docker + * branch master -> FETCH_HEAD + +3. Start an interactive rebase. + + $ git rebase -i upstream/master + +4. Rebase opens an editor with a list of commits. + + pick 1a79f55 Tweak some of the other text for grammar + pick 53e4983 Fix a link + pick 3ce07bb Add a new line about RHEL + + If you run into trouble, `git --rebase abort` removes any changes and gets + you back to where you started. + +4. Squash the `pick` keyword with `squash` on all but the first commit. + + pick 1a79f55 Tweak some of the other text for grammar + squash 53e4983 Fix a link + squash 3ce07bb Add a new line about RHEL + + After closing the file, `git` opens your editor again to edit the commit + message. + +5. Edit and save your commit message. + + `git commit -s` + + Make sure your message includes + +/* GitHub label styles */ +.gh-label { + display: inline-block; + padding: 3px 4px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + border-radius: 2px; + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.12); +} + +/* Experience */ +.gh-label.beginner { background-color: #B5E0B5; color: #333333; } +.gh-label.expert { background-color: #599898; color: #ffffff; } +.gh-label.master { background-color: #306481; color: #ffffff; } +.gh-label.novice { background-color: #D6F2AC; color: #333333; } +.gh-label.proficient { background-color: #8DC7A9; color: #333333; } + +/* Kind */ +.gh-label.bug { background-color: #FF9DA4; color: #333333; } +.gh-label.cleanup { background-color: #FFB7B3; color: #333333; } +.gh-label.content { background-color: #CDD3C2; color: #333333; } +.gh-label.feature { background-color: #B7BEB7; color: #333333; } +.gh-label.graphics { background-color: #E1EFCB; color: #333333; } +.gh-label.improvement { background-color: #EBD2BB; color: #333333; } +.gh-label.proposal { background-color: #FFD9C0; color: #333333; } +.gh-label.question { background-color: #EEF1D1; color: #333333; } +.gh-label.usecase { background-color: #F0E4C2; color: #333333; } +.gh-label.writing { background-color: #B5E9D5; color: #333333; } + + + + + +# Find and claim an issue + +On this page, you choose what you want to work on. As a contributor you can work +on whatever you want. If you are new to contributing, you should start by +working with our known issues. + +## Understand the issue types + +An existing issue is something reported by a Docker user. As issues come in, +our maintainers triage them. Triage is its own topic. For now, it is important +for you to know that triage includes ranking issues according to difficulty. + +Triaged issues have one of these labels: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    LevelExperience level guideline
    exp/beginnerYou have made less than 10 contributions in your life time to any open source project.
    exp/noviceYou have made more than 10 contributions to an open source project or at least 5 contributions to Docker.
    exp/proficientYou have made more than 5 contributions to Docker which amount to at least 200 code lines or 1000 documentation lines.
    exp/expertYou have made less than 20 commits to Docker which amount to 500-1000 code lines or 1000-3000 documentation lines.
    exp/masterYou have made more than 20 commits to Docker and greater than 1000 code lines or 3000 documentation lines.
    + +As the table states, these labels are meant as guidelines. You might have +written a whole plugin for Docker in a personal project and never contributed to +Docker. With that kind of experience, you could take on an exp/expert or exp/master level task. + +## Claim a beginner or novice issue + +In this section, you find and claim an open documentation lines issue. + + +1. Go to the `docker/docker`
    repository. + +2. Click on the "Issues" link. + + A list of the open issues appears. + + ![Open issues](/project/images/issue_list.png) + +3. Look for the exp/beginner items on the list. + +4. Click on the "labels" dropdown and select exp/beginner. + + The system filters to show only open exp/beginner issues. + +5. Open an issue that interests you. + + The comments on the issues can tell you both the problem and the potential + solution. + +6. Make sure that no other user has chosen to work on the issue. + + We don't allow external contributors to assign issues to themselves. So, you + need to read the comments to find if a user claimed the issue by leaving a + `#dibs` comment on the issue. + +7. When you find an open issue that both interests you and is unclaimed, add a +`#dibs` comment. + + ![Easy issue](/project/images/easy_issue.png) + + This example uses issue 11038. Your issue # will be different depending on + what you claimed. After a moment, Gordon the Docker bot, changes the issue + status to claimed. + +8. Make a note of the issue number; you'll need it later. + +## Sync your fork and create a new branch + +If you have followed along in this guide, you forked the `docker/docker` +repository. Maybe that was an hour ago or a few days ago. In any case, before +you start working on your issue, sync your repository with the upstream +`docker/docker` master. Syncing ensures your repository has the latest +changes. + +To sync your repository: + +1. Open a terminal on your local host. + +2. Change directory to the `docker-fork` root. + + $ cd ~/repos/docker-fork + +3. Checkout the master branch. + + $ git checkout master + Switched to branch 'master' + Your branch is up-to-date with 'origin/master'. + + Recall that `origin/master` is a branch on your remote GitHub repository. + +4. Make sure you have the upstream remote `docker/docker` by listing them. + + $ git remote -v + origin https://github.com/moxiegirl/docker.git (fetch) + origin https://github.com/moxiegirl/docker.git (push) + upstream https://github.com/docker/docker.git (fetch) + upstream https://github.com/docker/docker.git ( + + If the `upstream` is missing, add it. + + $ git remote add upstream https://github.com/docker/docker.git + +5. Fetch all the changes from the `upstream/master` branch. + + $ git fetch upstream/master + remote: Counting objects: 141, done. + remote: Compressing objects: 100% (29/29), done. + remote: Total 141 (delta 52), reused 46 (delta 46), pack-reused 66 + Receiving objects: 100% (141/141), 112.43 KiB | 0 bytes/s, done. + Resolving deltas: 100% (79/79), done. + From github.com:docker/docker + 9ffdf1e..01d09e4 docs -> upstream/docs + 05ba127..ac2521b master -> upstream/master + + This command says get all the changes from the `master` branch belonging to + the `upstream` remote. + +7. Rebase your local master with the `upstream/master`. + + $ git rebase upstream/master + First, rewinding head to replay your work on top of it... + Fast-forwarded master to upstream/master. + + This command writes all the commits from the upstream branch into your local + branch. + +8. Check the status of your local branch. + + $ git status + On branch master + Your branch is ahead of 'origin/master' by 38 commits. + (use "git push" to publish your local commits) + nothing to commit, working directory clean + + Your local repository now has any changes from the `upstream` remote. You + need to push the changes to your own remote fork which is `origin/master`. + +9. Push the rebased master to `origin/master`. + + $ git push origin + Username for 'https://github.com': moxiegirl + Password for 'https://moxiegirl@github.com': + Counting objects: 223, done. + Compressing objects: 100% (38/38), done. + Writing objects: 100% (69/69), 8.76 KiB | 0 bytes/s, done. + Total 69 (delta 53), reused 47 (delta 31) + To https://github.com/moxiegirl/docker.git + 8e107a9..5035fa1 master -> master + +9. Create a new feature branch to work on your issue. + + Your branch name should have the format `XXXX-descriptive` where `XXXX` is + the issue number you are working on. For example: + + $ git checkout -b 11038-fix-rhel-link + Switched to a new branch '11038-fix-rhel-link' + + Your branch should be up-to-date with the upstream/master. Why? Because you + branched off a freshly synced master. Let's check this anyway in the next + step. + +9. Rebase your branch from upstream/master. + + $ git rebase upstream/master + Current branch 11038-fix-rhel-link is up to date. + + At this point, your local branch, your remote repository, and the Docker + repository all have identical code. You are ready to make changesfor your + issues. + + +## Where to go next + +At this point, you know what you want to work on and you have a branch to do +your work in. Go onto the next section to learn [how to work on your +changes](/project/work-issue/). diff --git a/docs/sources/project/get-help.md b/docs/sources/project/get-help.md new file mode 100644 index 0000000000..9c98549c9d --- /dev/null +++ b/docs/sources/project/get-help.md @@ -0,0 +1,147 @@ +page_title: Where to chat or get help +page_description: Describes Docker's communication channels +page_keywords: IRC, Google group, Twitter, blog, Stackoverflow + + + +# Where to chat or get help + +There are several communications channels you can use to chat with Docker +community members and developers. + + + + + + + + + + + + + + + + + + + +
    Internet Relay Chat (IRC) + +

    + IRC a direct line to our most knowledgeable Docker users. + The #docker and #docker-dev group on + irc.freenode.net. IRC was first created in 1988. + So, it is a rich chat protocol but it can overwhelm new users. You can search + our chat archives. +

    + Read our IRC quickstart guide below for an easy way to get started. +
    Google Groups + There are two groups. + Docker-user + is for people using Docker containers. + The docker-dev + group is for contributors and other people contributing to the Docker + project. +
    Twitter + You can follow Docker's twitter + to get updates on our products. You can also tweet us questions or just + share blogs or stories. +
    Stack Overflow + Stack Overflow has over 7000K Docker questions listed. We regularly + monitor Docker questions + and so do many other knowledgeable Docker users. +
    + + +## IRC Quickstart + +IRC can also be overwhelming for new users. This quickstart shows you +the easiest way to connect to IRC. + +1. In your browser open http://webchat.freenode.net + + ![Login screen](/project/images/irc_connect.png) + + +2. Fill out the form. + + + + + + + + + + + + + + +
    NicknameThe short name you want to be known as in IRC.
    Channels#docker
    reCAPTCHAUse the value provided.
    + +3. Click "Connect". + + The system connects you to chat. You'll see a lot of text. At the bottom of + the display is a command line. Just above the command line the system asks + you to register. + + ![Login screen](/project/images/irc_after_login.png) + + +4. In the command line, register your nickname. + + /msg NickServ REGISTER password youremail@example.com + + ![Login screen](/project/images/register_nic.png) + + The IRC system sends an email to the address you + enter. The email contains instructions for completing your registration. + +5. Open your mail client and look for the email. + + ![Login screen](/project/images/register_email.png) + +6. Back in the browser, complete the registration according to the email. + + /msg NickServ VERIFY REGISTER moxiegirl_ acljtppywjnr + +7. Join the `#docker` group using the following command. + + /j #docker + + You can also join the `#docker-dev` group. + + /j #docker-dev + +8. To ask questions to the channel just type messages in the command line. + + ![Login screen](/project/images/irc_chat.png) + +9. To quit, close the browser window. + + +### Tips and learning more about IRC + +Next time you return to log into chat, you'll need to re-enter your password +on the command line using this command: + + /msg NickServ identify + +If you forget or lose your password see the FAQ on +freenode.net to learn how to recover it. + +This quickstart was meant to get you up and into IRC very quickly. If you find +IRC useful there is a lot more to learn. Drupal, another open source project, +actually has +written a lot of good documentation about using IRC for their project +(thanks Drupal!). diff --git a/docs/sources/project/glossary.md b/docs/sources/project/glossary.md new file mode 100644 index 0000000000..5324cda153 --- /dev/null +++ b/docs/sources/project/glossary.md @@ -0,0 +1,7 @@ +page_title: Glossary +page_description: tbd +page_keywords: tbd + +## Glossary + +TBD \ No newline at end of file diff --git a/docs/sources/project/images/box.png b/docs/sources/project/images/box.png new file mode 100755 index 0000000000..642385ae68 Binary files /dev/null and b/docs/sources/project/images/box.png differ diff --git a/docs/sources/project/images/branch-sig.png b/docs/sources/project/images/branch-sig.png new file mode 100644 index 0000000000..88be6b1a8b Binary files /dev/null and b/docs/sources/project/images/branch-sig.png differ diff --git a/docs/sources/project/images/checked.png b/docs/sources/project/images/checked.png new file mode 100755 index 0000000000..93ab2be9b3 Binary files /dev/null and b/docs/sources/project/images/checked.png differ diff --git a/docs/sources/project/images/commits_expected.png b/docs/sources/project/images/commits_expected.png new file mode 100644 index 0000000000..d3d8b1e3cf Binary files /dev/null and b/docs/sources/project/images/commits_expected.png differ diff --git a/docs/sources/project/images/contributor-edit.png b/docs/sources/project/images/contributor-edit.png new file mode 100644 index 0000000000..52737d7b46 Binary files /dev/null and b/docs/sources/project/images/contributor-edit.png differ diff --git a/docs/sources/project/images/copy_url.png b/docs/sources/project/images/copy_url.png new file mode 100644 index 0000000000..a715019ed8 Binary files /dev/null and b/docs/sources/project/images/copy_url.png differ diff --git a/docs/sources/project/images/easy_issue.png b/docs/sources/project/images/easy_issue.png new file mode 100644 index 0000000000..de44b7826d Binary files /dev/null and b/docs/sources/project/images/easy_issue.png differ diff --git a/docs/sources/project/images/existing_issue.png b/docs/sources/project/images/existing_issue.png new file mode 100644 index 0000000000..6757e60bb7 Binary files /dev/null and b/docs/sources/project/images/existing_issue.png differ diff --git a/docs/sources/project/images/existing_issue.snagproj b/docs/sources/project/images/existing_issue.snagproj new file mode 100644 index 0000000000..05ae2b0ccf Binary files /dev/null and b/docs/sources/project/images/existing_issue.snagproj differ diff --git a/docs/sources/project/images/fixes_num.png b/docs/sources/project/images/fixes_num.png new file mode 100644 index 0000000000..df52f27fd9 Binary files /dev/null and b/docs/sources/project/images/fixes_num.png differ diff --git a/docs/sources/project/images/fork_docker.png b/docs/sources/project/images/fork_docker.png new file mode 100644 index 0000000000..f7c557cd4f Binary files /dev/null and b/docs/sources/project/images/fork_docker.png differ diff --git a/docs/sources/project/images/fresh_container.png b/docs/sources/project/images/fresh_container.png new file mode 100644 index 0000000000..7f69f2d3a5 Binary files /dev/null and b/docs/sources/project/images/fresh_container.png differ diff --git a/docs/sources/project/images/give_try.png b/docs/sources/project/images/give_try.png new file mode 100644 index 0000000000..c049527616 Binary files /dev/null and b/docs/sources/project/images/give_try.png differ diff --git a/docs/sources/project/images/gordon.jpeg b/docs/sources/project/images/gordon.jpeg new file mode 100644 index 0000000000..8a0df7d463 Binary files /dev/null and b/docs/sources/project/images/gordon.jpeg differ diff --git a/docs/sources/project/images/in_room.png b/docs/sources/project/images/in_room.png new file mode 100644 index 0000000000..4fdec81b9c Binary files /dev/null and b/docs/sources/project/images/in_room.png differ diff --git a/docs/sources/project/images/irc_after_login.png b/docs/sources/project/images/irc_after_login.png new file mode 100644 index 0000000000..79496c806d Binary files /dev/null and b/docs/sources/project/images/irc_after_login.png differ diff --git a/docs/sources/project/images/irc_chat.png b/docs/sources/project/images/irc_chat.png new file mode 100644 index 0000000000..1ab9548067 Binary files /dev/null and b/docs/sources/project/images/irc_chat.png differ diff --git a/docs/sources/project/images/irc_connect.png b/docs/sources/project/images/irc_connect.png new file mode 100644 index 0000000000..f411aabcac Binary files /dev/null and b/docs/sources/project/images/irc_connect.png differ diff --git a/docs/sources/project/images/irc_login.png b/docs/sources/project/images/irc_login.png new file mode 100644 index 0000000000..a7a1dc7eb4 Binary files /dev/null and b/docs/sources/project/images/irc_login.png differ diff --git a/docs/sources/project/images/issue_list.png b/docs/sources/project/images/issue_list.png new file mode 100644 index 0000000000..c0aefdb422 Binary files /dev/null and b/docs/sources/project/images/issue_list.png differ diff --git a/docs/sources/project/images/latest_commits.png b/docs/sources/project/images/latest_commits.png new file mode 100644 index 0000000000..791683a5c5 Binary files /dev/null and b/docs/sources/project/images/latest_commits.png differ diff --git a/docs/sources/project/images/list_example.png b/docs/sources/project/images/list_example.png new file mode 100644 index 0000000000..a306e6e7dd Binary files /dev/null and b/docs/sources/project/images/list_example.png differ diff --git a/docs/sources/project/images/locate_branch.png b/docs/sources/project/images/locate_branch.png new file mode 100644 index 0000000000..8fa02ec454 Binary files /dev/null and b/docs/sources/project/images/locate_branch.png differ diff --git a/docs/sources/project/images/proposal.png b/docs/sources/project/images/proposal.png new file mode 100644 index 0000000000..250781a70d Binary files /dev/null and b/docs/sources/project/images/proposal.png differ diff --git a/docs/sources/project/images/proposal.snagproj b/docs/sources/project/images/proposal.snagproj new file mode 100644 index 0000000000..c9ad49d0e7 Binary files /dev/null and b/docs/sources/project/images/proposal.snagproj differ diff --git a/docs/sources/project/images/pull_request_made.png b/docs/sources/project/images/pull_request_made.png new file mode 100644 index 0000000000..a00535bed1 Binary files /dev/null and b/docs/sources/project/images/pull_request_made.png differ diff --git a/docs/sources/project/images/red_notice.png b/docs/sources/project/images/red_notice.png new file mode 100644 index 0000000000..8839723a37 Binary files /dev/null and b/docs/sources/project/images/red_notice.png differ diff --git a/docs/sources/project/images/register_email.png b/docs/sources/project/images/register_email.png new file mode 100644 index 0000000000..8873411e80 Binary files /dev/null and b/docs/sources/project/images/register_email.png differ diff --git a/docs/sources/project/images/register_nic.png b/docs/sources/project/images/register_nic.png new file mode 100644 index 0000000000..16cf05a396 Binary files /dev/null and b/docs/sources/project/images/register_nic.png differ diff --git a/docs/sources/project/images/three_running.png b/docs/sources/project/images/three_running.png new file mode 100644 index 0000000000..a85dc7471e Binary files /dev/null and b/docs/sources/project/images/three_running.png differ diff --git a/docs/sources/project/images/three_terms.png b/docs/sources/project/images/three_terms.png new file mode 100644 index 0000000000..7caa6ac6e3 Binary files /dev/null and b/docs/sources/project/images/three_terms.png differ diff --git a/docs/sources/project/images/to_from_pr.png b/docs/sources/project/images/to_from_pr.png new file mode 100644 index 0000000000..8dd6638e1b Binary files /dev/null and b/docs/sources/project/images/to_from_pr.png differ diff --git a/docs/sources/project/make-a-contribution.md b/docs/sources/project/make-a-contribution.md new file mode 100644 index 0000000000..e0b4e89720 --- /dev/null +++ b/docs/sources/project/make-a-contribution.md @@ -0,0 +1,35 @@ +page_title: Understand how to contribute +page_description: Explains basic workflow for Docker contributions +page_keywords: contribute, maintainers, review, workflow, process + +# Understand how to contribute + +Contributing is a process where you work with Docker maintainers and the +community to improve Docker. The maintainers are experienced contributors +who specialize in one or more Docker components. Maintainers play a big role +in reviewing contributions. + +There is a formal process for contributing. We try to keep our contribution +process simple so you'll want to contribute frequently. + + +## The basic contribution workflow + +In this guide, you work through Docker's basic contribution workflow by fixing a +single *beginner* issue in the `docker/docker` repository. The workflow +for fixing simple issues looks like this: + +![Simple process](/project/images/existing_issue.png) + +All Docker repositories have code and documentation. You use this same workflow +for either content type. For example, you can find and fix doc or code issues. +Also, you can propose a new Docker feature or propose a new Docker tutorial. + +Some workflow stages do have slight differences for code or documentation +contributions. When you reach that point in the flow, we make sure to tell you. + + +## Where to go next + +Now that you know a little about the contribution process, go to the next section +to [find an issue you want to work on](/project/find-an-issue/). diff --git a/docs/sources/project/review-pr.md b/docs/sources/project/review-pr.md new file mode 100644 index 0000000000..e8cb6c7c04 --- /dev/null +++ b/docs/sources/project/review-pr.md @@ -0,0 +1,124 @@ +page_title: Participate in the PR Review +page_description: Basic workflow for Docker contributions +page_keywords: contribute, pull request, review, workflow, beginner, squash, commit + + +# Participate in the PR Review + +Creating a pull request is nearly the end of the contribution process. At this +point, your code is reviewed both by our continuous integration (CI) systems and +by our maintainers. + +The CI system is an automated system. The maintainers are human beings that also +work on Docker. You need to understand and work with both the "bots" and the +"beings" to review your contribution. + + +## How we proces your review + +First to review your pull request is Gordon. Gordon is fast. He checks your +pull request (PR) for common problems like a missing signature. If Gordon finds a +problem, he'll send an email through your GitHub user account: + +![Gordon](/project/images/gordon.jpeg) + +Our build bot system starts building your changes while Gordon sends any emails. + +The build system double-checks your work by compiling your code with Docker's master +code. Building includes running the same tests you ran locally. If you forgot +to run tests or missed something in fixing problems, the automated build is our +safety check. + +After Gordon and the bots, the "beings" review your work. Docker maintainers look +at your pull request and comment on it. The shortest comment you might see is +`LGTM` which means **l**ooks-**g**ood-**t**o-**m**e. If you get an `LGTM`, that +is a good thing, you passed that review. + +For complex changes, maintainers may ask you questions or ask you to change +something about your submission. All maintainer comments on a PR go to the +email address associated with your GitHub account. Any GitHub user who +"participates" in a PR receives an email to. Participating means creating or +commenting on a PR. + +Our maintainers are very experienced Docker users and open source contributors. +So, they value your time and will try to work efficiently with you by keeping +their comments specific and brief. If they ask you to make a change, you'll +need to update your pull request with additional changes. + +## Update an Existing Pull Request + +To update your existing pull request: + +1. Change one or more files in your local `docker-fork` repository. + +2. Commit the change with the `git commit --amend` command. + + $ git commit --amend + + Git opens an editor containing your last commit message. + +3. Adjust your last comment to reflect this new change. + + Added a new sentence per Anaud's suggestion + + Signed-off-by: Mary Anthony + + # Please enter the commit message for your changes. Lines starting + # with '#' will be ignored, and an empty message aborts the commit. + # On branch 11038-fix-rhel-link + # Your branch is up-to-date with 'origin/11038-fix-rhel-link'. + # + # Changes to be committed: + # modified: docs/sources/installation/mac.md + # modified: docs/sources/installation/rhel.md + +4. Push to your origin. + + $ git push origin + +5. Open your browser to your pull request on GitHub. + + You should see your pull request now contains your newly pushed code. + +6. Add a comment to your pull request. + + GitHub only notifies PR participants when you comment. For example, you can + mention that you updated your PR. Your comment alerts the maintainers that + you made an update. + +A change requires LGTMs from an absolute majority of an affected component's +maintainers. For example, if you change `docs/` and `registry/` code, an +absolute majority of the `docs/` and the `registry/` maintainers must approve +your PR. Once you get approval, we merge your pull request into Docker's +`master` code branch. + +## After the merge + +It can take time to see a merged pull request in Docker's official release. +A master build is available almost immediately though. Docker builds and +updates its development binaries after each merge to `master`. + +1. Browse to https://master.dockerproject.com/. + +2. Look for the binary appropriate to your system. + +3. Download and run the binary. + + You might want to run the binary in a container though. This + will keep your local host environment clean. + +4. View any documentation changes at docs.master.dockerproject.com. + +Once you've verified everything merged, feel free to delete your feature branch +from your fork. For information on how to do this, + +see the GitHub help on deleting branches. + +## Where to go next + +At this point, you have completed all the basic tasks in our contributors guide. +If you enjoyed contributing, let us know by completing another beginner +issue or two. We really appreciate the help. + +If you are very experienced and want to make a major change, go on to +[learn about advanced contributing](/project/advanced-contributing). diff --git a/docs/sources/project/set-up-dev-env.md b/docs/sources/project/set-up-dev-env.md new file mode 100644 index 0000000000..637eef6f58 --- /dev/null +++ b/docs/sources/project/set-up-dev-env.md @@ -0,0 +1,411 @@ +page_title: Work with a development container +page_description: How to use Docker's development environment +page_keywords: development, inception, container, image Dockerfile, dependencies, Go, artifacts + +# Work with a development container + +In this section, you learn to develop like a member of Docker's core team. +The `docker` repository includes a `Dockerfile` at its root. This file defines +Docker's development environment. The `Dockerfile` lists the environment's +dependencies: system libraries and binaries, go environment, go dependencies, +etc. + +Docker's development environment is itself, ultimately a Docker container. +You use the `docker` repository and its `Dockerfile` to create a Docker image, +run a Docker container, and develop code in the container. Docker itself builds, +tests, and releases new Docker versions using this container. + +If you followed the procedures that +set up the prerequisites, you should have a fork of the `docker/docker` +repository. You also created a branch called `dry-run-test`. In this section, +you continue working with your fork on this branch. + +## Clean your host of Docker artifacts + +Docker developers run the latest stable release of the Docker software; Or +Boot2docker and Docker if their machine is Mac OS X. They clean their local +hosts of unnecessary Docker artifacts such as stopped containers or unused +images. Cleaning unnecessary artifacts isn't strictly necessary but it is +good practice, so it is included here. + +To remove unnecessary artifacts. + +1. Verify that you have no unnecessary containers running on your host. + + $ docker ps + + You should see something similar to the following: + + + + + + + + + + + +
    CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
    + + There are no running containers on this host. If you have running but unused + containers, stop and then remove them with the `docker stop` and `docker rm` + commands. + +2. Verify that your host has no dangling images. + + $ docker images + + You should see something similar to the following: + + + + + + + + + +
    REPOSITORYTAGIMAGE IDCREATEDVIRTUAL SIZE
    + + This host has no images. You may have one or more _dangling_ images. A + dangling image is not used by a running container and is not an ancestor of + another image on your system. A fast way to remove dangling containers is + the following: + + $ docker rmi -f $(docker images -q -a -f dangling=true) + + This command uses `docker images` to lists all images (`-a` flag) by numeric + IDs (`-q` flag) and filter them to find dangling images (`-f + dangling=true`). Then, the `docker rmi` command forcibly (`-f` flag) removes + the resulting list. To remove just one image, use the `docker rmi ID` + command. + + +## Build an image + +If you followed the last procedure, your host is clean of unnecessary images +and containers. In this section, you build an image from the Docker development +environment. + +1. Open a terminal. + + Mac users, use `boot2docker status` to make sure Boot2Docker is running. You + may need to run `eval "$(boot2docker shellinit)"` to initialize your shell + environment. + +3. Change into the root of your forked repository. + + $ cd ~/repos/docker-fork + +4. Ensure you are on your `dry-run-test` branch. + + $ git checkout dry-run-test + +5. Compile your development environment container into an image. + + $ docker build -t dry-run-test . + + The `docker build` command returns informational message as it runs. The + first build may take a few minutes to create an image. Using the + instructions in the `Dockerfile`, the build may need to download source and + other images. A successful build returns a final status message similar to + the following: + + Successfully built 676815d59283 + +6. List your Docker images again. + + $ docker images + + You should see something similar to this: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    REPOSTITORYTAGIMAGE IDCREATEDVIRTUAL SIZE
    dry-run-testlatest663fbee70028About a minute ago
    ubuntutrusty2d24f826cb162 days ago188.3 MB
    ubuntutrusty-20150218.12d24f826cb162 days ago188.3 MB
    ubuntu14.042d24f826cb162 days ago188.3 MB
    ubuntu14.04.22d24f826cb162 days ago188.3 MB
    ubuntulatest2d24f826cb162 days ago188.3 MB
    + + Locate your new `dry-run-test` image in the list. You should also see a + number of `ubuntu` images. The build process creates these. They are the + ancestors of your new Docker development image. When you next rebuild your + image, the build process reuses these ancestors images if they exist. + + Keeping the ancestor images improves the build performance. When you rebuild + the child image, the build process uses the local ancestors rather than + retrieving them from the Hub. The build process gets new ancestors only if + DockerHub has updated versions. + +## Start a container and run a test + +At this point, you have created a new Docker development environment image. Now, +you'll use this image to create a Docker container to develop in. Then, you'll +build and run a `docker` binary in your container. + +1. Open two additional terminals on your host. + + At this point, you'll have about three terminals open. + + ![Multiple terminals](/project/images/three_terms.png) + + Mac OSX users, make sure you run `eval "$(boot2docker shellinit)"` in any new + terminals. + +2. In a terminal, create a new container from your `dry-run-test` image. + + $ docker run --privileged --rm -ti dry-run-test /bin/bash + root@5f8630b873fe:/go/src/github.com/docker/docker# + + The command creates a container from your `dry-run-test` image. It opens an + interactive terminal (`-ti`) running a `/bin/bash shell`. The + `--privileged` flag gives the container access to kernel features and device + access. It is this flag that allows you to run a container in a container. + Finally, the `-rm` flag instructs Docker to remove the container when you + exit the `/bin/bash` shell. + + The container includes the source of your image repository in the + `/go/src/github.com/docker/docker` directory. Try listing the contents to + verify they are the same as that of your `docker-fork` repo. + + ![List example](/project/images/list_example.png) + + +3. Investigate your container bit. + + If you do a `go version` you'll find the `go` language is part of the + container. + + root@31ed86e9ddcf:/go/src/github.com/docker/docker# go version + go version go1.4.2 linux/amd64 + + Similarly, if you do a `docker version` you find the container + has no `docker` binary. + + root@31ed86e9ddcf:/go/src/github.com/docker/docker# docker version + bash: docker: command not found + + You will create one in the next steps. + +4. From the `/go/src/github.com/docker/docker` directory make a `docker` binary with the `make.sh` script. + + root@5f8630b873fe:/go/src/github.com/docker/docker# hack/make.sh binary + + You only call `hack/make.sh` to build a binary _inside_ a Docker + development container as you are now. On your host, you'll use `make` + commands (more about this later). + + As it makes the binary, the `make.sh` script reports the build's progress. + When the command completes successfully, you should see the following + output: + + ---> Making bundle: ubuntu (in bundles/1.5.0-dev/ubuntu) + Created package {:path=>"lxc-docker-1.5.0-dev_1.5.0~dev~git20150223.181106.0.1ab0d23_amd64.deb"} + Created package {:path=>"lxc-docker_1.5.0~dev~git20150223.181106.0.1ab0d23_amd64.deb"} + +5. List all the contents of the `binary` directory. + + root@5f8630b873fe:/go/src/github.com/docker/docker# ls bundles/1.5.0-dev/binary/ + docker docker-1.5.0-dev docker-1.5.0-dev.md5 docker-1.5.0-dev.sha256 + + You should see that `binary` directory, just as it sounds, contains the + made binaries. + + +6. Copy the `docker` binary to the `/usr/bin` of your container. + + root@5f8630b873fe:/go/src/github.com/docker/docker# cp bundles/1.5.0-dev/binary/docker /usr/bin + +7. Inside your container, check your Docker version. + + root@5f8630b873fe:/go/src/github.com/docker/docker# docker --version + Docker version 1.5.0-dev, build 6e728fb + + Inside the container you are running a development version. This is version + on the current branch it reflects the value of the `VERSION` file at the + root of your `docker-fork` repository. + +8. Start a `docker` daemon running inside your container. + + root@5f8630b873fe:/go/src/github.com/docker/docker# docker -dD + + The `-dD` flag starts the daemon in debug mode; You'll find this useful + when debugging your code. + +9. Bring up one of the terminals on your local host. + + +10. List your containers and look for the container running the `dry-run-test` image. + + $ docker ps + + + + + + + + + + + + + + + + + + + + +
    CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
    474f07652525dry-run-test:latest"hack/dind /bin/bash14 minutes agoUp 14 minutestender_shockley
    + + In this example, the container's name is `tender_shockley`; yours will be + different. + +11. From the terminal, start another shell on your Docker development container. + + $ docker exec -it tender_shockley bash + + At this point, you have two terminals both with a shell open into your + development container. One terminal is running a debug session. The other + terminal is displaying a `bash` prompt. + +12. At the prompt, test the Docker client by running the `hello-world` container. + + root@9337c96e017a:/go/src/github.com/docker/docker# docker run hello-world + + You should see the image load and return. Meanwhile, you + can see the calls made via the debug session in your other terminal. + + ![List example](/project/images/three_running.png) + + +## Restart a container with your source + +At this point, you have experienced the "Docker inception" technique. That is, +you have: + +* built a Docker image from the Docker repository +* created and started a Docker development container from that image +* built a Docker binary inside of your Docker development container +* launched a `docker` daemon using your newly compiled binary +* called the `docker` client to run a `hello-world` container inside + your development container + +When you really get to developing code though, you'll want to iterate code +changes and builds inside the container. For that you need to mount your local +Docker repository source into your Docker container. Try that now. + +1. If you haven't already, exit out of BASH shells in your running Docker +container. + + If you have followed this guide exactly, exiting out your BASH shells stops + the running container. You can use the `docker ps` command to verify the + development container is stopped. All of your terminals should be at the + local host prompt. + +2. Choose a terminal and make sure you are in your `docker-fork` repository. + + $ pwd + /Users/mary/go/src/github.com/moxiegirl/docker-fork + + Your location will be different because it reflects your environment. + +3. Create a container using `dry-run-test` but this time mount your repository onto the `/go` directory inside the container. + + $ docker run --privileged --rm -ti -v `pwd`:/go/src/github.com/docker/docker dry-run-test /bin/bash + + When you pass `pwd`, `docker` resolves it to your current directory. + +4. From inside the container, list your `binary` directory. + + root@074626fc4b43:/go/src/github.com/docker/docker# ls bundles/1.5.0-dev/binary + ls: cannot access binary: No such file or directory + + Your `dry-run-test` image does not retain any of the changes you made inside + the container. This is the expected behavior for a container. + +5. In a fresh terminal on your local host, change to the `docker-fork` root. + + $ cd ~/repos/docker-fork/ + +6. Create a fresh binary but this time use the `make` command. + + $ make BINDDIR=. binary + + The `BINDDIR` flag is only necessary on Mac OS X but it won't hurt to pass + it on Linux command line. The `make` command, like the `make.sh` script + inside the container, reports its progress. When the make succeeds, it + returns the location of the new binary. + + +7. Back in the terminal running the container, list your `binary` directory. + + root@074626fc4b43:/go/src/github.com/docker/docker# ls bundles/1.5.0-dev/binary + docker docker-1.5.0-dev docker-1.5.0-dev.md5 docker-1.5.0-dev.sha256 + + The compiled binaries created from your repository on your local host are + now available inside your running Docker development container. + +8. Repeat the steps you ran in the previous procedure. + + * copy the binary inside the development container using + `cp bundles/1.5.0-dev/binary/docker /usr/bin` + * start `docker -dD` to launch the Docker daemon inside the container + * run `docker ps` on local host to get the development container's name + * connect to your running container `docker exec -it container_name bash` + * use the `docker run hello-world` command to create and run a container + inside your development container + +## Where to go next + +Congratulations, you have successfully achieved Docker inception. At this point, +you've set up your development environment and verified almost all the essential +processes you need to contribute. Of course, before you start contributing, +[you'll need to learn one more piece of the development environment, the test framework](/project/test-and-docs/). diff --git a/docs/sources/project/set-up-git.md b/docs/sources/project/set-up-git.md new file mode 100644 index 0000000000..2292d93b3c --- /dev/null +++ b/docs/sources/project/set-up-git.md @@ -0,0 +1,238 @@ +page_title: Configure Git for contributing +page_description: Describes how to set up your local machine and repository +page_keywords: GitHub account, repository, clone, fork, branch, upstream, Git, Go, make, + +# Configure Git for contributing + +Work through this page to configure Git and a repository you'll use throughout +the Contributor Guide. The work you do further in the guide, depends on the work +you do here. + +## Fork and clone the Docker code + +Before contributing, you first fork the Docker code repository. A fork copies +a repository at a particular point in time. GitHub tracks for you where a fork +originates. + +As you make contributions, you change your fork's code. When you are ready, +you make a pull request back to the original Docker repository. If you aren't +familiar with this workflow, don't worry, this guide walks you through all the +steps. + +To fork and clone Docker: + +1. Open a browser and log into GitHub with your account. + +2. Go to the docker/docker repository. + +3. Click the "Fork" button in the upper right corner of the GitHub interface. + + ![Branch Signature](/project/images/fork_docker.png) + + GitHub forks the repository to your GitHub account. The original + `docker/docker` repository becomes a new fork `YOUR_ACCOUNT/docker` under + your account. + +4. Copy your fork's clone URL from GitHub. + + GitHub allows you to use HTTPS or SSH protocols for clones. You can use the + `git` command line or clients like Subversion to clone a repository. + + ![Copy clone URL](/project/images/copy_url.png) + + This guide assume you are using the HTTPS protocol and the `git` command + line. If you are comfortable with SSH and some other tool, feel free to use + that instead. You'll need to convert what you see in the guide to what is + appropriate to your tool. + +5. Open a terminal window on your local host and change to your home directory. + + $ cd ~ + +6. Create a `repos` directory. + + $ mkdir repos + +7. Change into your `repos` directory. + + $ cd repos + +5. Clone the fork to your local host into a repository called `docker-fork`. + + $ git clone https://github.com/moxiegirl/docker.git docker-fork + + Naming your local repo `docker-fork` should help make these instructions + easier to follow; experienced coders don't typically change the name. + +6. Change directory into your new `docker-fork` directory. + + $ cd docker-fork + + Take a moment to familiarize yourself with the repository's contents. List + the contents. + +## Set your signature and an upstream remote + +When you contribute to Docker, you must certify you agree with the +Developer Certificate of Origin. +You indicate your agreement by signing your `git` commits like this: + + Signed-off-by: Pat Smith + +To create a signature, you configure your username and email address in Git. +You can set these globally or locally on just your `docker-fork` repository. +You must sign with your real name. We don't accept anonymous contributions or +contributions through pseudonyms. + +As you change code in your fork, you'll want to keep it in sync with the changes +others make in the `docker/docker` repository. To make syncing easier, you'll +also add a _remote_ called `upstream` that points to `docker/docker`. A remote +is just another a project version hosted on the internet or network. + +To configure your username, email, and add a remote: + +1. Change to the root of your `docker-fork` repository. + + $ cd docker-fork + +2. Set your `user.name` for the repository. + + $ git config --local user.name "FirstName LastName" + +3. Set your `user.email` for the repository. + + $ git config --local user.email "emailname@mycompany.com" + +4. Set your local repo to track changes upstream, on the `docker` repository. + + $ git remote add upstream https://github.com/docker/docker.git + +7. Check the result in your `git` configuration. + + $ git config --local -l + core.repositoryformatversion=0 + core.filemode=true + core.bare=false + core.logallrefupdates=true + remote.origin.url=https://github.com/moxiegirl/docker.git + remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* + branch.master.remote=origin + branch.master.merge=refs/heads/master + user.name=Mary Anthony + user.email=mary@docker.com + remote.upstream.url=https://github.com/docker/docker.git + remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/* + + To list just the remotes use: + + $ git remote -v + origin https://github.com/moxiegirl/docker.git (fetch) + origin https://github.com/moxiegirl/docker.git (push) + upstream https://github.com/docker/docker.git (fetch) + upstream https://github.com/docker/docker.git (push) + +## Create and push a branch + +As you change code in your fork, you make your changes on a repository branch. +The branch name should reflect what you are working on. In this section, you +create a branch, make a change, and push it up to your fork. + +This branch is just for testing your config for this guide. The changes are part +of a dry run so the branch name is going to be dry-run-test. To create an push +the branch to your fork on GitHub: + +1. Open a terminal and go to the root of your `docker-fork`. + + $ cd docker-fork + +2. Create a `dry-run-test` branch. + + $ git checkout -b dry-run-test + + This command creates the branch and switches the repository to it. + +3. Verify you are in your new branch. + + $ git branch + * dry-run-test + master + + The current branch has an * (asterisk) marker. So, these results shows you + are on the right branch. + +4. Create a `TEST.md` file in the repository's root. + + $ touch TEST.md + +5. Edit the file and add your email and location. + + ![Add your information](/project/images/contributor-edit.png) + + You can use any text editor you are comfortable with. + +6. Close and save the file. + +7. Check the status of your branch. + + $ git status + On branch dry-run-test + Untracked files: + (use "git add ..." to include in what will be committed) + + TEST.md + + nothing added to commit but untracked files present (use "git add" to track) + + You've only changed the one file. It is untracked so far by git. + +8. Add your file. + + $ git add TEST.md + + That is the only _staged_ file. Stage is fancy word for work that Git is + tracking. + +9. Sign and commit your change. + + $ git commit -s -m "Making a dry run test." + [dry-run-test 6e728fb] Making a dry run test + 1 file changed, 1 insertion(+) + create mode 100644 TEST.md + + Commit messages should have a short summary sentence of no more than 50 + characters. Optionally, you can also include a more detailed explanation + after the summary. Separate the summary from any explanation with an empty + line. + +8. Push your changes to GitHub. + + $ git push --set-upstream origin dry-run-test + Username for 'https://github.com': moxiegirl + Password for 'https://moxiegirl@github.com': + + Git prompts you for your GitHub username and password. Then, the command + returns a result. + + Counting objects: 13, done. + Compressing objects: 100% (2/2), done. + Writing objects: 100% (3/3), 320 bytes | 0 bytes/s, done. + Total 3 (delta 1), reused 0 (delta 0) + To https://github.com/moxiegirl/docker.git + * [new branch] dry-run-test -> dry-run-test + Branch dry-run-test set up to track remote branch dry-run-test from origin. + +9. Open your browser to Github. + +10. Navigate to your Docker fork. + +11. Make sure the `dry-run-test` branch exists, that it has your commit, and the +commit is signed. + + ![Branch Signature](/project/images/branch-sig.png) + +## Where to go next + +Congratulations, you have finished configuring both your local host environment +and Git for contributing. In the next section you'll [learn how to set up and +work in a Docker development container](/project/set-up-dev-env/). diff --git a/docs/sources/project/software-required.md b/docs/sources/project/software-required.md new file mode 100644 index 0000000000..476cbbc2ca --- /dev/null +++ b/docs/sources/project/software-required.md @@ -0,0 +1,91 @@ +page_title: Get the required software +page_description: Describes the software required to contribute to Docker +page_keywords: GitHub account, repository, Docker, Git, Go, make, + +# Get the required software + +Before you begin contributing you must have: + +* a GitHub account +* `git` +* `make` +* `docker` + +You'll notice that `go`, the language that Docker is written in, is not listed. +That's because you don't need it installed; Docker's development environment +provides it for you. You'll learn more about the development environment later. + +### Get a GitHub account + +To contribute to the Docker project, you will need a GitHub account. A free account is +fine. All the Docker project repositories are public and visible to everyone. + +You should also have some experience using both the GitHub application and `git` +on the command line. + +### Install git + +Install `git` on your local system. You can check if `git` is on already on your +system and properly installed with the following command: + + $ git --version + + +This documentation is written using `git` version 2.2.2. Your version may be +different depending on your OS. + +### Install make + +Install `make`. You can check if `make` is on your system with the following +command: + + $ make -v + +This documentation is written using GNU Make 3.81. Your version may be different +depending on your OS. + +### Install or upgrade Docker + +If you haven't already, install the Docker software using the +instructions for your operating system. +If you have an existing installation, check your version and make sure you have +the latest Docker. + +To check if `docker` is already installed on Linux: + + $ docker --version + Docker version 1.5.0, build a8a31ef + +On Mac OS X or Windows, you should have installed Boot2Docker which includes +Docker. You'll need to verify both Boot2Docker and then Docker. This +documentation was written on OS X using the following versions. + + $ boot2docker version + Boot2Docker-cli version: v1.5.0 + Git commit: ccd9032 + + $ docker --version + Docker version 1.5.0, build a8a31ef + +## Linux users and sudo + +This guide assumes you have added your user to the `docker` group on your system. +To check, list the group's contents: + + $ getent group docker + docker:x:999:ubuntu + +If the command returns no matches, you have two choices. You can preface this +guide's `docker` commands with `sudo` as you work. Alternatively, you can add +your user to the `docker` group as follows: + + $ sudo usermod -aG docker ubuntu + +You must log out and back in for this modification to take effect. + + +## Where to go next + +In the next section, you'll [learn how to set up and configure Git for +contributing to Docker](/project/set-up-git/). diff --git a/docs/sources/project/test-and-docs.md b/docs/sources/project/test-and-docs.md new file mode 100644 index 0000000000..d586ea2c3c --- /dev/null +++ b/docs/sources/project/test-and-docs.md @@ -0,0 +1,296 @@ +page_title: Run tests and test documentation +page_description: Describes Docker's testing infrastructure +page_keywords: make test, make docs, Go tests, gofmt, contributing, running tests + +# Run tests and test documentation + +Contributing includes testing your changes. If you change the Docker code, you +may need to add a new test or modify an existing one. Your contribution could +even be adding tests to Docker. For this reason, you need to know a little +about Docker's test infrastructure. + +Many contributors contribute documentation only. Or, a contributor makes a code +contribution that changes how Docker behaves and that change needs +documentation. For these reasons, you also need to know how to build, view, and +test the Docker documentation. + +In this section, you run tests in the `dry-run-test` branch of your Docker +fork. If you have followed along in this guide, you already have this branch. +If you don't have this branch, you can create it or simply use another of your +branches. + +## Understand testing at Docker + +Docker tests use the Go language's test framework. In this framework, files +whose names end in `_test.go` contain test code; you'll find test files like +this throughout the Docker repo. Use these files for inspiration when writing +your own tests. For information on Go's test framework, see Go's testing package +documentation and the go test help. + +You are responsible for _unit testing_ your contribution when you add new or +change existing Docker code. A unit test is a piece of code that invokes a +single, small piece of code ( _unit of work_ ) to verify the unit works as +expected. + +Depending on your contribution, you may need to add _integration tests_. These +are tests that combine two or more work units into one component. These work +units each have unit tests and then, together, integration tests that test the +interface between the components. The `integration` and `integration-cli` +directories in the Docker repository contain integration test code. + +Testing is its own speciality. If you aren't familiar with testing techniques, +there is a lot of information available to you on the Web. For now, you should +understand that, the Docker maintainers may ask you to write a new test or +change an existing one. + +### Run tests on your local host + +Before submitting any code change, you should run the entire Docker test suite. +The `Makefile` contains a target for the entire test suite. The target's name +is simply `test`. The make file contains several targets for testing: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TargetWhat this target does
    testRun all the tests.
    test-unitRun just the unit tests.
    test-integrationRun just integration tests.
    test-integration-cliRun the test for the integration command line interface.
    test-docker-pyRun the tests for Docker API client.
    docs-testRuns the documentation test build.
    + +Run the entire test suite on your current repository: + +1. Open a terminal on your local host. + +2. Change to the root your Docker repository. + + $ cd docker-fork + +3. Make sure you are in your development branch. + + $ git checkout dry-run-test + +4. Run the `make test` command. + + $ make test + + This command does several things, it creates a container temporarily for + testing. Inside that container, the `make`: + + * creates a new binary + * cross-compiles all the binaries for the various operating systems + * runs the all the tests in the system + + It can take several minutes to run all the tests. When they complete + successfully, you see the output concludes with something like this: + + + [PASSED]: top - sleep process should be listed in privileged mode + [PASSED]: version - verify that it works and that the output is properly formatted + PASS + coverage: 70.8% of statements + ---> Making bundle: test-docker-py (in bundles/1.5.0-dev/test-docker-py) + +++ exec docker --daemon --debug --host unix:///go/src/github.com/docker/docker/bundles/1.5.0-dev/test-docker-py/docker.sock --storage-driver vfs --exec-driver native --pidfile /go/src/github.com/docker/docker/bundles/1.5.0-dev/test-docker-py/docker.pid + ................................................................. + ---------------------------------------------------------------------- + Ran 65 tests in 89.266s + + +### Run test targets inside the development container + +If you are working inside a Docker development container, you use the +`hack/make.sh` script to run tests. The `hack/make.sh` script doesn't +have a single target that runs all the tests. Instead, you provide a single +commmand line with multiple targets that does the same thing. + +Try this now. + +1. Open a terminal and change to the `docker-fork` root. + +2. Start a Docker development image. + + If you are following along with this guide, you should have a + `dry-run-test` image. + + $ docker run --privileged --rm -ti -v `pwd`:/go/src/github.com/docker/docker dry-run-test /bin/bash + +3. Run the tests using the `hack/make.sh` script. + + root@5f8630b873fe:/go/src/github.com/docker/docker# hack/make.sh dynbinary binary cross test-unit test-integration test-integration-cli test-docker-py + + The tests run just as they did within your local host. + + +Of course, you can also run a subset of these targets too. For example, to run +just the unit tests: + + root@5f8630b873fe:/go/src/github.com/docker/docker# hack/make.sh dynbinary binary cross test-unit + +Most test targets require that you build these precursor targets first: +`dynbinary binary cross` + + +## Running individual or multiple named tests + +You can use the `TESTFLAGS` environment variable to run a single test. The +flag's value is passed as arguments to the `go test` command. For example, from +your local host you can run the `TestBuild` test with this command: + + $ TESTFLAGS='-test.run ^TestBuild$' make test + +To run the same test inside your Docker development container, you do this: + + root@5f8630b873fe:/go/src/github.com/docker/docker# TESTFLAGS='-run ^TestBuild$' hack/make.sh + +## If test under Boot2Docker fail do to space errors + +Running the tests requires about 2GB of memory. If you are running your +container on bare metal, that is you are not running with Boot2Docker, your +Docker development container is able to take the memory it requires directly +from your local host. + +If you are running Docker using Boot2Docker, the VM uses 2048MB by default. +This means you can exceed the memory of your VM running tests in a Boot2Docker +environment. When the test suite runs out of memory, it returns errors similar +to the following: + + server.go:1302 Error: Insertion failed because database is full: database or + disk is full + + utils_test.go:179: Error copy: exit status 1 (cp: writing + '/tmp/docker-testd5c9-[...]': No space left on device + +To increase the memory on your VM, you need to reinitialize the Boot2Docker VM +with new memory settings. + +1. Stop all running containers. + +2. View the current memory setting. + + $ boot2docker info + { + "Name": "boot2docker-vm", + "UUID": "491736fd-4075-4be7-a6f5-1d4cdcf2cc74", + "Iso": "/Users/mary/.boot2docker/boot2docker.iso", + "State": "running", + "CPUs": 8, + "Memory": 2048, + "VRAM": 8, + "CfgFile": "/Users/mary/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vbox", + "BaseFolder": "/Users/mary/VirtualBox VMs/boot2docker-vm", + "OSType": "", + "Flag": 0, + "BootOrder": null, + "DockerPort": 0, + "SSHPort": 2022, + "SerialFile": "/Users/mary/.boot2docker/boot2docker-vm.sock" + } + + +3. Delete your existing `boot2docker` profile. + + $ boot2docker delete + +4. Reinitialize `boot2docker` and specify a higher memory. + + $ boot2docker init -m 5555 + +5. Verify the memory was reset. + + $ boot2docker info + +6. Restart your container and try your test again. + + +## Build and test the documentation + +The Docker documentation source files are under `docs/sources`. The content is +written using extended Markdown. We use the static generator MkDocs to build Docker's +documentation. Of course, you don't need to install this generator +to build the documentation, it is included with container. + +You should always check your documentation for grammar and spelling. The best +way to do this is with an online grammar checker. + +When you change a documentation source file, you should test your change +locally to make sure your content is there and any links work correctly. You +can build the documentation from the local host. The build starts a container +and loads the documentation into a server. As long as this container runs, you +can browse the docs. + +1. In a terminal, change to the root of your `docker-fork` repository. + + $ cd ~/repos/dry-run-test + +2. Make sure you are in your feature branch. + + $ git status + On branch dry-run-test + Your branch is up-to-date with 'origin/dry-run-test'. + nothing to commit, working directory clean + +3. Build the documentation. + + $ make docs + + When the build completes, you'll see a final output message similar to the + following: + + Successfully built ee7fe7553123 + docker run --rm -it -e AWS_S3_BUCKET -e NOCACHE -p 8000:8000 "docker-docs:dry-run-test" mkdocs serve + Running at: http://0.0.0.0:8000/ + Live reload enabled. + Hold ctrl+c to quit. + +4. Enter the URL in your browser. + + If you are running Boot2Docker, replace the default localhost address + (0.0.0.0) with your DOCKERHOST value. You can get this value at any time by + entering `boot2docker ip` at the command line. + +5. Once in the documentation, look for the red notice to verify you are seeing the correct build. + + ![Beta documentation](/project/images/red_notice.png) + +6. Navigate to your new or changed document. + +7. Review both the content and the links. + +8. Return to your terminal and exit out of the running documentation container. + + +## Where to go next + +Congratulations, you have successfully completed the basics you need to +understand the Docker test framework. In the next steps, you use what you have +learned so far to [contribute to Docker by working on an +issue](/project/make-a-contribution/). diff --git a/docs/sources/project/who-written-for.md b/docs/sources/project/who-written-for.md new file mode 100644 index 0000000000..e3b761a460 --- /dev/null +++ b/docs/sources/project/who-written-for.md @@ -0,0 +1,57 @@ +page_title: README first +page_description: Introduction to project contribution at Docker +page_keywords: Gordon, introduction, turtle, machine, libcontainer, how to + +# README first + +This section of the documentation contains a guide for Docker users who want to +contribute code or documentation to the Docker project. As a community, we +share rules of behavior and interaction. Make sure you are familiar with the community guidelines before continuing. + +## Where and what you can contribute + +The Docker project consists of not just one but several repositories on GitHub. +So, in addition to the `docker/docker` repository, there is the +`docker/libcontainer` repo, the `docker/machine` repo, and several more. +Contribute to any of these and you contribute to the Docker project. + +Not all Docker repositories use the Go language. Also, each repository has its +own focus area. So, if you are an experienced contributor, think about +contributing to a Docker repository that has a language or a focus area you are +familiar with. + +If you are new to the open source community, to Docker, or to formal +programming, you should start out contributing to the `docker/docker` +repository. Why? Because this guide is written for that repository specifically. + +Finally, code or documentation isn't the only way to contribute. You can report +an issue, add to discussions in our community channel, write a blog post, or +take a usability test. You can even propose your own type of contribution. +Right now we don't have a lot written about this yet, so just email + if this type of contributing interests you. + +## A turtle is involved + +![Gordon](/project/images/gordon.jpeg) + +Enough said. + +## How to use this guide + +This is written for the distracted, the overworked, the sloppy reader with fair +`git` skills and a failing memory for the GitHub GUI. The guide attempts to +explain how to use the Docker environment as precisely, predictably, and +procedurally as possible. + +Users who are new to the Docker development environment should start by setting +up their environment. Then, they should try a simple code change. After that, +you should find something to work on or propose at totally new change. + +If you are a programming prodigy, you still may find this documentation useful. +Please feel free to skim past information you find obvious or boring. + +## How to get started + +Start by [getting the software you need to contribute](/project/software-required/). diff --git a/docs/sources/project/work-issue.md b/docs/sources/project/work-issue.md new file mode 100644 index 0000000000..190cec0557 --- /dev/null +++ b/docs/sources/project/work-issue.md @@ -0,0 +1,203 @@ +page_title: Work on your issue +page_description: Basic workflow for Docker contributions +page_keywords: contribute, pull request, review, workflow, beginner, squash, commit + + +# Work on your issue + +The work you do for your issue depends on the specific issue you picked. +This section gives you a step-by-step workflow. Where appropriate, it provides +command examples. + +However, this is a generalized workflow, depending on your issue you may repeat +steps or even skip some. How much time the work takes depends on you --- you +could spend days or 30 minutes of your time. + +## How to work on your local branch + +Follow this workflow as you work: + +1. Review the appropriate style guide. + + If you are changing code, review the coding style guide. Changing documentation? Review the + documentation style guide. + +2. Make changes in your feature branch. + + Your feature branch you created in the last section. Here you use the + development container. If you are making a code change, you can mount your + source into a development container and iterate that way. For documentation + alone, you can work on your local host. + + Review if you forgot the details + of working with a container. + + +3. Test your changes as you work. + + If you have followed along with the guide, you know the `make test` target + runs the entire test suite and `make docs` builds the documentation. If you + forgot the other test targets, see the documentation for testing both code and + documentation. + +4. For code changes, add unit tests if appropriate. + + If you add new functionality or change existing functionality, you should + add a unit test also. Use the existing test files for inspiration. Aren't + sure if you need tests? Skip this step; you can add them later in the + process if necessary. + +5. Format your source files correctly. + + + + + + + + + + + + + + + + + + +
    File typeHow to format
    .go +

    + Format .go files using the gofmt command. + For example, if you edited the `docker.go` file you would format the file + like this: +

    +

    $ gofmt -s -w file.go

    +

    + Most file editors have a plugin to format for you. Check your editor's + documentation. +

    +
    .md and non-.go filesWrap lines to 80 characters.
    + +6. List your changes. + + $ git status + On branch 11038-fix-rhel-link + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: docs/sources/installation/mac.md + modified: docs/sources/installation/rhel.md + + The `status` command lists what changed in the repository. Make sure you see + the changes you expect. + +7. Add your change to Git. + + $ git add docs/sources/installation/mac.md + $ git add docs/sources/installation/rhel.md + + +8. Commit your changes making sure you use the `-s` flag to sign your work. + + $ git commit -s -m "Fixing RHEL link" + +9. Push your change to your repository. + + $ git push origin + Username for 'https://github.com': moxiegirl + Password for 'https://moxiegirl@github.com': + Counting objects: 60, done. + Compressing objects: 100% (7/7), done. + Writing objects: 100% (7/7), 582 bytes | 0 bytes/s, done. + Total 7 (delta 6), reused 0 (delta 0) + To https://github.com/moxiegirl/docker.git + * [new branch] 11038-fix-rhel-link -> 11038-fix-rhel-link + Branch 11038-fix-rhel-link set up to track remote branch 11038-fix-rhel-link from origin. + + The first time you push a change, you must specify the branch. Later, you can just do this: + + git push origin + +## Review your branch on GitHub + +After you push a new branch, you should verify it on GitHub: + +1. Open your browser to GitHub. + +2. Go to your Docker fork. + +3. Select your branch from the dropdown. + + ![Find branch](/project/images/locate_branch.png) + +4. Use the "Compare" button to compare the differences between your branch and master. + + Depending how long you've been working on your branch, your branch maybe + behind Docker's upstream repository. + +5. Review the commits. + + Make sure your branch only shows the work you've done. + +## Pull and rebase frequently + +You should pull and rebase frequently as you work. + +1. Return to the terminal on your local machine. + +2. Make sure you are in your branch. + + $ git branch 11038-fix-rhel-link + +3. Fetch all the changes from the `upstream/master` branch. + + $ git fetch upstream/master + + This command says get all the changes from the `master` branch belonging to + the `upstream` remote. + +4. Rebase your local master with Docker's `upstream/master` branch. + + $ git rebase -i upstream/master + + This command starts an interactive rebase to merge code from Docker's + `upstream/master` branch into your local branch. If you aren't familiar or + comfortable with rebase, you can learn more about rebasing on the web. + +5. Rebase opens an editor with a list of commits. + + pick 1a79f55 Tweak some of the other text for grammar + pick 53e4983 Fix a link + pick 3ce07bb Add a new line about RHEL + + If you run into trouble, `git --rebase abort` removes any changes and gets + you back to where you started. + +6. Squash the `pick` keyword with `squash` on all but the first commit. + + pick 1a79f55 Tweak some of the other text for grammar + squash 53e4983 Fix a link + squash 3ce07bb Add a new line about RHEL + + After closing the file, `git` opens your editor again to edit the commit + message. + +7. Edit and save your commit message. + + Make sure you include your signature. + +8. Push any changes to your fork on GitHub. + + $ git push origin 11038-fix-rhel-link + + +## Where to go next + +At this point, you should understand how to work on an issue. In the next +section, you [learn how to make a pull request](/project/create-pr/). diff --git a/docs/sources/reference/api/docker_remote_api.md b/docs/sources/reference/api/docker_remote_api.md index 30448b040d..3da4cc82d5 100644 --- a/docs/sources/reference/api/docker_remote_api.md +++ b/docs/sources/reference/api/docker_remote_api.md @@ -30,13 +30,56 @@ page_keywords: API, Docker, rcli, REST, documentation Client applications need to take this into account to ensure they will not break when talking to newer Docker daemons. -The current version of the API is v1.17 +The current version of the API is v1.18 Calling `/info` is the same as calling -`/v1.17/info`. +`/v1.18/info`. You can still call an old version of the API using -`/v1.16/info`. +`/v1.17/info`. + +## v1.18 + +### Full Documentation + +[*Docker Remote API v1.18*](/reference/api/docker_remote_api_v1.18/) + +### What's new + +`GET /version` + +**New!** +This endpoint now returns `Os`, `Arch` and `KernelVersion`. + +`POST /containers/create` +`POST /containers/(id)/start` + +**New!** +You can set ulimit settings to be used within the container. + +`GET /info` + +**New!** +This endpoint now returns `SystemTime`, `HttpProxy`,`HttpsProxy` and `NoProxy`. + +`GET /images/json` + +**New!** +Added a `RepoDigests` field to include image digest information. + +`POST /build` + +**New!** +Builds can now set resource constraints for all containers created for the build. + +**New!** +(`CgroupParent`) can be passed in the host config to setup container cgroups under a specific cgroup. + + +`POST /build` + +**New!** +Closing the HTTP request will now cause the build to be canceled. ## v1.17 @@ -46,15 +89,32 @@ You can still call an old version of the API using ### What's new +The build supports `LABEL` command. Use this to add metadata +to an image. For example you could add data describing the content of an image. + +`LABEL "com.example.vendor"="ACME Incorporated"` + +**New!** `POST /containers/(id)/attach` and `POST /exec/(id)/start` **New!** Docker client now hints potential proxies about connection hijacking using HTTP Upgrade headers. +`POST /containers/create` + +**New!** +You can set labels on container create describing the container. + +`GET /containers/json` + +**New!** +The endpoint returns the labels associated with the containers (`Labels`). + `GET /containers/(id)/json` **New!** This endpoint now returns the list current execs associated with the container (`ExecIDs`). +This endpoint now returns the container labels (`Config.Labels`). `POST /containers/(id)/rename` @@ -73,7 +133,10 @@ root filesystem as read only. **New!** This endpoint returns a live stream of a container's resource usage statistics. -> **Note**: this functionality currently only works when using the *libcontainer* exec-driver. +`GET /images/json` + +**New!** +This endpoint now returns the labels associated with each image (`Labels`). ## v1.16 diff --git a/docs/sources/reference/api/docker_remote_api_v1.17.md b/docs/sources/reference/api/docker_remote_api_v1.17.md index 955ae8fb54..96887559c2 100644 --- a/docs/sources/reference/api/docker_remote_api_v1.17.md +++ b/docs/sources/reference/api/docker_remote_api_v1.17.md @@ -177,7 +177,8 @@ Json Parameters: for the container. - **User** - A string value containg the user to use inside the container. - **Memory** - Memory limit in bytes. -- **MemorySwap**- Total memory usage (memory + swap); set `-1` to disable swap. +- **MemorySwap**- Total memory limit (memory + swap); set `-1` to disable swap, + always use this with `memory`, and make the value larger than `memory`. - **CpuShares** - An integer value containing the CPU Shares for container (ie. the relative weight vs othercontainers). **CpuSet** - String value containg the cgroups Cpuset to use. @@ -523,8 +524,6 @@ Status Codes: This endpoint returns a live stream of a container's resource usage statistics. -> **Note**: this functionality currently only works when using the *libcontainer* exec-driver. - **Example request**: GET /containers/redis1/stats HTTP/1.1 @@ -1969,7 +1968,7 @@ This might change in the future. ## 3.3 CORS Requests -To enable cross origin requests to the remote api add the flag -"--api-enable-cors" when running docker in daemon mode. +To set cross origin requests to the remote api, please add flag "--api-enable-cors" +when running docker in daemon mode. - $ docker -d -H="192.168.1.9:2375" --api-enable-cors + $ docker -d -H="192.168.1.9:2375" --api-enable-cors diff --git a/docs/sources/reference/api/docker_remote_api_v1.18.md b/docs/sources/reference/api/docker_remote_api_v1.18.md new file mode 100644 index 0000000000..b5d9c0e5f4 --- /dev/null +++ b/docs/sources/reference/api/docker_remote_api_v1.18.md @@ -0,0 +1,2064 @@ +page_title: Remote API v1.18 +page_description: API Documentation for Docker +page_keywords: API, Docker, rcli, REST, documentation + +# Docker Remote API v1.18 + +## 1. Brief introduction + + - The Remote API has replaced `rcli`. + - The daemon listens on `unix:///var/run/docker.sock` but you can + [Bind Docker to another host/port or a Unix socket]( + /articles/basics/#bind-docker-to-another-hostport-or-a-unix-socket). + - The API tends to be REST, but for some complex commands, like `attach` + or `pull`, the HTTP connection is hijacked to transport `STDOUT`, + `STDIN` and `STDERR`. + +# 2. Endpoints + +## 2.1 Containers + +### List containers + +`GET /containers/json` + +List containers + +**Example request**: + + GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id": "8dfafdbc3a40", + "Image": "ubuntu:latest", + "Command": "echo 1", + "Created": 1367854155, + "Status": "Exit 0", + "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], + "SizeRw": 12288, + "SizeRootFs": 0 + }, + { + "Id": "9cd87474be90", + "Image": "ubuntu:latest", + "Command": "echo 222222", + "Created": 1367854155, + "Status": "Exit 0", + "Ports": [], + "SizeRw": 12288, + "SizeRootFs": 0 + }, + { + "Id": "3176a2479c92", + "Image": "ubuntu:latest", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "Status": "Exit 0", + "Ports":[], + "SizeRw":12288, + "SizeRootFs":0 + }, + { + "Id": "4cb07b47f9fb", + "Image": "ubuntu:latest", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "Status": "Exit 0", + "Ports": [], + "SizeRw": 12288, + "SizeRootFs": 0 + } + ] + +Query Parameters: + +- **all** – 1/True/true or 0/False/false, Show all containers. + Only running containers are shown by default (i.e., this defaults to false) +- **limit** – Show `limit` last created + containers, include non-running ones. +- **since** – Show only containers created since Id, include + non-running ones. +- **before** – Show only containers created before Id, include + non-running ones. +- **size** – 1/True/true or 0/False/false, Show the containers + sizes +- **filters** - a json encoded value of the filters (a map[string][]string) to process on the containers list. Available filters: + - exited=<int> -- containers with exit code of <int> + - status=(restarting|running|paused|exited) + +Status Codes: + +- **200** – no error +- **400** – bad parameter +- **500** – server error + +### Create a container + +`POST /containers/create` + +Create a container + +**Example request**: + + POST /containers/create HTTP/1.1 + Content-Type: application/json + + { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": { + "/tmp": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "MacAddress": "12:34:56:78:9a:bc", + "ExposedPorts": { + "22/tcp": {} + }, + "SecurityOpts": [""], + "HostConfig": { + "Binds": ["/tmp:/tmp"], + "Links": ["redis3:redis"], + "LxcConf": {"lxc.utsname":"docker"}, + "Memory": 0, + "MemorySwap": 0, + "CpuShares": 512, + "CpusetCpus": "0,1", + "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": ["8.8.8.8"], + "DnsSearch": [""], + "ExtraHosts": null, + "VolumesFrom": ["parent", "other:ro"], + "CapAdd": ["NET_ADMIN"], + "CapDrop": ["MKNOD"], + "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [{}], + "LogConfig": { "Type": "json-file", Config: {} }, + "CgroupParent": "" + } + } + +**Example response**: + + HTTP/1.1 201 Created + Content-Type: application/json + + { + "Id":"e90e34656806" + "Warnings":[] + } + +Json Parameters: + +- **Hostname** - A string value containing the desired hostname to use for the + container. +- **Domainname** - A string value containing the desired domain name to use + for the container. +- **User** - A string value containg the user to use inside the container. +- **Memory** - Memory limit in bytes. +- **MemorySwap**- Total memory limit (memory + swap); set `-1` to disable swap, + always use this with `memory`, and make the value larger than `memory`. +- **CpuShares** - An integer value containing the CPU Shares for container + (ie. the relative weight vs othercontainers). +- **Cpuset** - The same as CpusetCpus, but deprecated, please don't use. +- **CpusetCpus** - String value containg the cgroups CpusetCpus to use. +- **AttachStdin** - Boolean value, attaches to stdin. +- **AttachStdout** - Boolean value, attaches to stdout. +- **AttachStderr** - Boolean value, attaches to stderr. +- **Tty** - Boolean value, Attach standard streams to a tty, including stdin if it is not closed. +- **OpenStdin** - Boolean value, opens stdin, +- **StdinOnce** - Boolean value, close stdin after the 1 attached client disconnects. +- **Env** - A list of environment variables in the form of `VAR=value` +- **Labels** - Adds a map of labels that to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` +- **Cmd** - Command to run specified as a string or an array of strings. +- **Entrypoint** - Set the entrypoint for the container a a string or an array + of strings +- **Image** - String value containing the image name to use for the container +- **Volumes** – An object mapping mountpoint paths (strings) inside the + container to empty objects. +- **WorkingDir** - A string value containing the working dir for commands to + run in. +- **NetworkDisabled** - Boolean value, when true disables neworking for the + container +- **ExposedPorts** - An object mapping ports to an empty object in the form of: + `"ExposedPorts": { "/: {}" }` +- **SecurityOpts**: A list of string values to customize labels for MLS + systems, such as SELinux. +- **HostConfig** + - **Binds** – A list of volume bindings for this container. Each volume + binding is a string of the form `container_path` (to create a new + volume for the container), `host_path:container_path` (to bind-mount + a host path into the container), or `host_path:container_path:ro` + (to make the bind-mount read-only inside the container). + - **Links** - A list of links for the container. Each link entry should be of + of the form "container_name:alias". + - **LxcConf** - LXC specific configurations. These configurations will only + work when using the `lxc` execution driver. + - **PortBindings** - A map of exposed container ports and the host port they + should map to. It should be specified in the form + `{ /: [{ "HostPort": "" }] }` + Take note that `port` is specified as a string and not an integer value. + - **PublishAllPorts** - Allocates a random host port for all of a container's + exposed ports. Specified as a boolean value. + - **Privileged** - Gives the container full access to the host. Specified as + a boolean value. + - **ReadonlyRootfs** - Mount the container's root filesystem as read only. + Specified as a boolean value. + - **Dns** - A list of dns servers for the container to use. + - **DnsSearch** - A list of DNS search domains + - **ExtraHosts** - A list of hostnames/IP mappings to be added to the + container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. + - **VolumesFrom** - A list of volumes to inherit from another container. + Specified in the form `[:]` + - **CapAdd** - A list of kernel capabilties to add to the container. + - **Capdrop** - A list of kernel capabilties to drop from the container. + - **RestartPolicy** – The behavior to apply when the container exits. The + value is an object with a `Name` property of either `"always"` to + always restart or `"on-failure"` to restart only when the container + exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` + controls the number of times to retry before giving up. + The default is not to restart. (optional) + An ever increasing delay (double the previous delay, starting at 100mS) + is added before each restart to prevent flooding the server. + - **NetworkMode** - Sets the networking mode for the container. Supported + values are: `bridge`, `host`, and `container:` + - **Devices** - A list of devices to add to the container specified in the + form + `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` + - **Ulimits** - A list of ulimits to be set in the container, specified as + `{ "Name": , "Soft": , "Hard": }`, for example: + `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard", 2048 }}` + - **LogConfig** - Logging configuration to container, format + `{ "Type": "", "Config": {"key1": "val1"}} + Available types: `json-file`, `none`. + `json-file` logging driver. + - **CgroupParent** - Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. + +Query Parameters: + +- **name** – Assign the specified name to the container. Must + match `/?[a-zA-Z0-9_-]+`. + +Status Codes: + +- **201** – no error +- **404** – no such container +- **406** – impossible to attach (container not running) +- **500** – server error + +### Inspect a container + +`GET /containers/(id)/json` + +Return low-level information on the container `id` + + +**Example request**: + + GET /containers/4fa6e0f0c678/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Entrypoint": null, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "ExposedPorts": null, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OnBuild": null, + "OpenStdin": false, + "PortSpecs": null, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": null, + "WorkingDir": "" + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecDriver": "native-0.2", + "ExecIDs": null, + "HostConfig": { + "Binds": null, + "CapAdd": null, + "CapDrop": null, + "ContainerIDFile": "", + "CpusetCpus": "", + "CpuShares": 0, + "Devices": [], + "Dns": null, + "DnsSearch": null, + "ExtraHosts": null, + "IpcMode": "", + "Links": null, + "LxcConf": [], + "Memory": 0, + "MemorySwap": 0, + "NetworkMode": "bridge", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { "Type": "json-file", Config: {} }, + "SecurityOpt": null, + "VolumesFrom": null, + "Ulimits": [{}] + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "Gateway": "", + "IPAddress": "", + "IPPrefixLen": 0, + "MacAddress": "", + "PortMapping": null, + "Ports": null + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "OOMKilled": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": false, + "StartedAt": "2015-01-06T15:47:32.072697474Z" + }, + "Volumes": {}, + "VolumesRW": {} + } + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### List processes running inside a container + +`GET /containers/(id)/top` + +List processes running inside the container `id` + +**Example request**: + + GET /containers/4fa6e0f0c678/top HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Titles": [ + "USER", + "PID", + "%CPU", + "%MEM", + "VSZ", + "RSS", + "TTY", + "STAT", + "START", + "TIME", + "COMMAND" + ], + "Processes": [ + ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"], + ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"] + ] + } + +Query Parameters: + +- **ps_args** – ps arguments to use (e.g., aux) + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Get container logs + +`GET /containers/(id)/logs` + +Get stdout and stderr logs from the container ``id`` + +> **Note**: +> This endpoint works only for containers with `json-file` logging driver. + +**Example request**: + + GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10 HTTP/1.1 + +**Example response**: + + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + {{ STREAM }} + +Query Parameters: + +- **follow** – 1/True/true or 0/False/false, return stream. Default false +- **stdout** – 1/True/true or 0/False/false, show stdout log. Default false +- **stderr** – 1/True/true or 0/False/false, show stderr log. Default false +- **timestamps** – 1/True/true or 0/False/false, print timestamps for + every log line. Default false +- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all + +Status Codes: + +- **101** – no error, hints proxy about hijacking +- **200** – no error, no upgrade header found +- **404** – no such container +- **500** – server error + +### Inspect changes on a container's filesystem + +`GET /containers/(id)/changes` + +Inspect changes on container `id`'s filesystem + +**Example request**: + + GET /containers/4fa6e0f0c678/changes HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + +Values for `Kind`: + +- `0`: Modify +- `1`: Add +- `2`: Delete + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Export a container + +`GET /containers/(id)/export` + +Export the contents of container `id` + +**Example request**: + + GET /containers/4fa6e0f0c678/export HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/octet-stream + + {{ TAR STREAM }} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Get container stats based on resource usage + +`GET /containers/(id)/stats` + +This endpoint returns a live stream of a container's resource usage statistics. + +> **Note**: this functionality currently only works when using the *libcontainer* exec-driver. + +**Example request**: + + GET /containers/redis1/stats HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "read" : "2015-01-08T22:57:31.547920715Z", + "network" : { + "rx_dropped" : 0, + "rx_bytes" : 648, + "rx_errors" : 0, + "tx_packets" : 8, + "tx_dropped" : 0, + "rx_packets" : 8, + "tx_errors" : 0, + "tx_bytes" : 648 + }, + "memory_stats" : { + "stats" : { + "total_pgmajfault" : 0, + "cache" : 0, + "mapped_file" : 0, + "total_inactive_file" : 0, + "pgpgout" : 414, + "rss" : 6537216, + "total_mapped_file" : 0, + "writeback" : 0, + "unevictable" : 0, + "pgpgin" : 477, + "total_unevictable" : 0, + "pgmajfault" : 0, + "total_rss" : 6537216, + "total_rss_huge" : 6291456, + "total_writeback" : 0, + "total_inactive_anon" : 0, + "rss_huge" : 6291456, + "hierarchical_memory_limit" : 67108864, + "total_pgfault" : 964, + "total_active_file" : 0, + "active_anon" : 6537216, + "total_active_anon" : 6537216, + "total_pgpgout" : 414, + "total_cache" : 0, + "inactive_anon" : 0, + "active_file" : 0, + "pgfault" : 964, + "inactive_file" : 0, + "total_pgpgin" : 477 + }, + "max_usage" : 6651904, + "usage" : 6537216, + "failcnt" : 0, + "limit" : 67108864 + }, + "blkio_stats" : {}, + "cpu_stats" : { + "cpu_usage" : { + "percpu_usage" : [ + 16970827, + 1839451, + 7107380, + 10571290 + ], + "usage_in_usermode" : 10000000, + "total_usage" : 36488948, + "usage_in_kernelmode" : 20000000 + }, + "system_cpu_usage" : 20091722000000000, + "throttling_data" : {} + } + } + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Resize a container TTY + +`POST /containers/(id)/resize?h=&w=` + +Resize the TTY for container with `id`. The container must be restarted for the resize to take effect. + +**Example request**: + + POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Length: 0 + Content-Type: text/plain; charset=utf-8 + +Status Codes: + +- **200** – no error +- **404** – No such container +- **500** – Cannot resize container + +### Start a container + +`POST /containers/(id)/start` + +Start the container `id` + +**Example request**: + + POST /containers/(id)/start HTTP/1.1 + Content-Type: application/json + +**Example response**: + + HTTP/1.1 204 No Content + +Json Parameters: + +Status Codes: + +- **204** – no error +- **304** – container already started +- **404** – no such container +- **500** – server error + +### Stop a container + +`POST /containers/(id)/stop` + +Stop the container `id` + +**Example request**: + + POST /containers/e90e34656806/stop?t=5 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **t** – number of seconds to wait before killing the container + +Status Codes: + +- **204** – no error +- **304** – container already stopped +- **404** – no such container +- **500** – server error + +### Restart a container + +`POST /containers/(id)/restart` + +Restart the container `id` + +**Example request**: + + POST /containers/e90e34656806/restart?t=5 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **t** – number of seconds to wait before killing the container + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Kill a container + +`POST /containers/(id)/kill` + +Kill the container `id` + +**Example request**: + + POST /containers/e90e34656806/kill HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters + +- **signal** - Signal to send to the container: integer or string like "SIGINT". + When not set, SIGKILL is assumed and the call will waits for the container to exit. + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Rename a container + +`POST /containers/(id)/rename` + +Rename the container `id` to a `new_name` + +**Example request**: + + POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **name** – new name for the container + +Status Codes: + +- **204** – no error +- **404** – no such container +- **409** - conflict name already assigned +- **500** – server error + +### Pause a container + +`POST /containers/(id)/pause` + +Pause the container `id` + +**Example request**: + + POST /containers/e90e34656806/pause HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Unpause a container + +`POST /containers/(id)/unpause` + +Unpause the container `id` + +**Example request**: + + POST /containers/e90e34656806/unpause HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Attach to a container + +`POST /containers/(id)/attach` + +Attach to the container `id` + +**Example request**: + + POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + {{ STREAM }} + +Query Parameters: + +- **logs** – 1/True/true or 0/False/false, return logs. Default false +- **stream** – 1/True/true or 0/False/false, return stream. + Default false +- **stdin** – 1/True/true or 0/False/false, if stream=true, attach + to stdin. Default false +- **stdout** – 1/True/true or 0/False/false, if logs=true, return + stdout log, if stream=true, attach to stdout. Default false +- **stderr** – 1/True/true or 0/False/false, if logs=true, return + stderr log, if stream=true, attach to stderr. Default false + +Status Codes: + +- **101** – no error, hints proxy about hijacking +- **200** – no error, no upgrade header found +- **400** – bad parameter +- **404** – no such container +- **500** – server error + + **Stream details**: + + When using the TTY setting is enabled in + [`POST /containers/create` + ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"), + the stream is the raw data from the process PTY and client's stdin. + When the TTY is disabled, then the stream is multiplexed to separate + stdout and stderr. + + The format is a **Header** and a **Payload** (frame). + + **HEADER** + + The header will contain the information on which stream write the + stream (stdout or stderr). It also contain the size of the + associated frame encoded on the last 4 bytes (uint32). + + It is encoded on the first 8 bytes like this: + + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + + `STREAM_TYPE` can be: + +- 0: stdin (will be written on stdout) +- 1: stdout +- 2: stderr + + `SIZE1, SIZE2, SIZE3, SIZE4` are the 4 bytes of + the uint32 size encoded as big endian. + + **PAYLOAD** + + The payload is the raw stream. + + **IMPLEMENTATION** + + The simplest way to implement the Attach protocol is the following: + + 1. Read 8 bytes + 2. chose stdout or stderr depending on the first byte + 3. Extract the frame size from the last 4 byets + 4. Read the extracted size and output it on the correct output + 5. Goto 1 + +### Attach to a container (websocket) + +`GET /containers/(id)/attach/ws` + +Attach to the container `id` via websocket + +Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) + +**Example request** + + GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 + +**Example response** + + {{ STREAM }} + +Query Parameters: + +- **logs** – 1/True/true or 0/False/false, return logs. Default false +- **stream** – 1/True/true or 0/False/false, return stream. + Default false +- **stdin** – 1/True/true or 0/False/false, if stream=true, attach + to stdin. Default false +- **stdout** – 1/True/true or 0/False/false, if logs=true, return + stdout log, if stream=true, attach to stdout. Default false +- **stderr** – 1/True/true or 0/False/false, if logs=true, return + stderr log, if stream=true, attach to stderr. Default false + +Status Codes: + +- **200** – no error +- **400** – bad parameter +- **404** – no such container +- **500** – server error + +### Wait a container + +`POST /containers/(id)/wait` + +Block until container `id` stops, then returns the exit code + +**Example request**: + + POST /containers/16253994b7c4/wait HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"StatusCode": 0} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Remove a container + +`DELETE /containers/(id)` + +Remove the container `id` from the filesystem + +**Example request**: + + DELETE /containers/16253994b7c4?v=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **v** – 1/True/true or 0/False/false, Remove the volumes + associated to the container. Default false +- **force** - 1/True/true or 0/False/false, Kill then remove the container. + Default false + +Status Codes: + +- **204** – no error +- **400** – bad parameter +- **404** – no such container +- **500** – server error + +### Copy files or folders from a container + +`POST /containers/(id)/copy` + +Copy files or folders of container `id` + +**Example request**: + + POST /containers/4fa6e0f0c678/copy HTTP/1.1 + Content-Type: application/json + + { + "Resource": "test.txt" + } + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + {{ TAR STREAM }} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +## 2.2 Images + +### List Images + +`GET /images/json` + +**Example request**: + + GET /images/json?all=0 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "RepoTags": [ + "ubuntu:12.04", + "ubuntu:precise", + "ubuntu:latest" + ], + "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", + "Created": 1365714795, + "Size": 131506275, + "VirtualSize": 131506275 + }, + { + "RepoTags": [ + "ubuntu:12.10", + "ubuntu:quantal" + ], + "ParentId": "27cf784147099545", + "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "Created": 1364102658, + "Size": 24653, + "VirtualSize": 180116135 + } + ] + +**Example request, with digest information**: + + GET /images/json?digests=1 HTTP/1.1 + +**Example response, with digest information**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Created": 1420064636, + "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", + "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", + "RepoDigests": [ + "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" + ], + "RepoTags": [ + "localhost:5000/test/busybox:latest", + "playdate:latest" + ], + "Size": 0, + "VirtualSize": 2429728 + } + ] + +The response shows a single image `Id` associated with two repositories +(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use +either of the `RepoTags` values `localhost:5000/test/busybox:latest` or +`playdate:latest` to reference the image. + +You can also use `RepoDigests` values to reference an image. In this response, +the array has only one reference and that is to the +`localhost:5000/test/busybox` repository; the `playdate` repository has no +digest. You can reference this digest using the value: +`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` + +See the `docker run` and `docker build` commands for examples of digest and tag +references on the command line. + +Query Parameters: + +- **all** – 1/True/true or 0/False/false, default false +- **filters** – a json encoded value of the filters (a map[string][]string) to process on the images list. Available filters: + - dangling=true + +### Build image from a Dockerfile + +`POST /build` + +Build an image from a Dockerfile + +**Example request**: + + POST /build HTTP/1.1 + + {{ TAR STREAM }} + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"stream": "Step 1..."} + {"stream": "..."} + {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} + +The input stream must be a tar archive compressed with one of the +following algorithms: identity (no compression), gzip, bzip2, xz. + +The archive must include a build instructions file, typically called +`Dockerfile` at the root of the archive. The `dockerfile` parameter may be +used to specify a different build instructions file by having its value be +the path to the alternate build instructions file to use. + +The archive may include any number of other files, +which will be accessible in the build context (See the [*ADD build +command*](/reference/builder/#dockerbuilder)). + +The build will also be canceled if the client drops the connection by quitting +or being killed. + +Query Parameters: + +- **dockerfile** - path within the build context to the Dockerfile. This is + ignored if `remote` is specified and points to an individual filename. +- **t** – repository name (and optionally a tag) to be applied to + the resulting image in case of success +- **remote** – A Git repository URI or HTTP/HTTPS URI build source. If the + URI specifies a filename, the file's contents are placed into a file + called `Dockerfile`. +- **q** – suppress verbose build output +- **nocache** – do not use the cache when building the image +- **pull** - attempt to pull the image even if an older image exists locally +- **rm** - remove intermediate containers after a successful build (default behavior) +- **forcerm** - always remove intermediate containers (includes rm) +- **memory** - set memory limit for build +- **memswap** - Total memory (memory + swap), `-1` to disable swap +- **cpushares** - CPU shares (relative weight) +- **cpusetcpus** - CPUs in which to allow exection, e.g., `0-3`, `0,1` + + Request Headers: + +- **Content-type** – should be set to `"application/tar"`. +- **X-Registry-Config** – base64-encoded ConfigFile objec + +Status Codes: + +- **200** – no error +- **500** – server error + +### Create an image + +`POST /images/create` + +Create an image, either by pulling it from the registry or by importing it + +**Example request**: + + POST /images/create?fromImage=ubuntu HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "Pulling..."} + {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} + {"error": "Invalid..."} + ... + + When using this endpoint to pull an image from the registry, the + `X-Registry-Auth` header can be used to include + a base64-encoded AuthConfig object. + +Query Parameters: + +- **fromImage** – name of the image to pull +- **fromSrc** – source to import. The value may be a URL from which the image + can be retrieved or `-` to read the image from the request body. +- **repo** – repository +- **tag** – tag +- **registry** – the registry to pull from + + Request Headers: + +- **X-Registry-Auth** – base64-encoded AuthConfig object + +Status Codes: + +- **200** – no error +- **500** – server error + + + +### Inspect an image + +`GET /images/(name)/json` + +Return low-level information on the image `name` + +**Example request**: + + GET /images/ubuntu/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Created": "2013-03-23T22:24:18.818426-07:00", + "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", + "ContainerConfig": + { + "Hostname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "PortSpecs": null, + "Tty": true, + "OpenStdin": true, + "StdinOnce": false, + "Env": null, + "Cmd": ["/bin/bash"], + "Dns": null, + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": null, + "VolumesFrom": "", + "WorkingDir": "" + }, + "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "Parent": "27cf784147099545", + "Size": 6824592 + } + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Get the history of an image + +`GET /images/(name)/history` + +Return the history of the image `name` + +**Example request**: + + GET /images/ubuntu/history HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id": "b750fe79269d", + "Created": 1364102658, + "CreatedBy": "/bin/bash" + }, + { + "Id": "27cf78414709", + "Created": 1364068391, + "CreatedBy": "" + } + ] + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Push an image on the registry + +`POST /images/(name)/push` + +Push the image `name` on the registry + +**Example request**: + + POST /images/test/push HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "Pushing..."} + {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} + {"error": "Invalid..."} + ... + + If you wish to push an image on to a private registry, that image must already have been tagged + into a repository which references that registry host name and port. This repository name should + then be used in the URL. This mirrors the flow of the CLI. + +**Example request**: + + POST /images/registry.acme.com:5000/test/push HTTP/1.1 + + +Query Parameters: + +- **tag** – the tag to associate with the image on the registry, optional + +Request Headers: + +- **X-Registry-Auth** – include a base64-encoded AuthConfig + object. + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Tag an image into a repository + +`POST /images/(name)/tag` + +Tag the image `name` into a repository + +**Example request**: + + POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 + +**Example response**: + + HTTP/1.1 201 OK + +Query Parameters: + +- **repo** – The repository to tag in +- **force** – 1/True/true or 0/False/false, default false +- **tag** - The new tag name + +Status Codes: + +- **201** – no error +- **400** – bad parameter +- **404** – no such image +- **409** – conflict +- **500** – server error + +### Remove an image + +`DELETE /images/(name)` + +Remove the image `name` from the filesystem + +**Example request**: + + DELETE /images/test HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-type: application/json + + [ + {"Untagged": "3e2f21a89f"}, + {"Deleted": "3e2f21a89f"}, + {"Deleted": "53b4f83ac9"} + ] + +Query Parameters: + +- **force** – 1/True/true or 0/False/false, default false +- **noprune** – 1/True/true or 0/False/false, default false + +Status Codes: + +- **200** – no error +- **404** – no such image +- **409** – conflict +- **500** – server error + +### Search images + +`GET /images/search` + +Search for an image on [Docker Hub](https://hub.docker.com). + +> **Note**: +> The response keys have changed from API v1.6 to reflect the JSON +> sent by the registry server to the docker daemon's request. + +**Example request**: + + GET /images/search?term=sshd HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ... + ] + +Query Parameters: + +- **term** – term to search + +Status Codes: + +- **200** – no error +- **500** – server error + +## 2.3 Misc + +### Check auth configuration + +`POST /auth` + +Get the default username and email + +**Example request**: + + POST /auth HTTP/1.1 + Content-Type: application/json + + { + "username":" hannibal", + "password: "xxxx", + "email": "hannibal@a-team.com", + "serveraddress": "https://index.docker.io/v1/" + } + +**Example response**: + + HTTP/1.1 200 OK + +Status Codes: + +- **200** – no error +- **204** – no error +- **500** – server error + +### Display system-wide information + +`GET /info` + +Display system-wide information + +**Example request**: + + GET /info HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Containers":11, + "Images":16, + "Driver":"btrfs", + "DriverStatus": [[""]], + "ExecutionDriver":"native-0.1", + "KernelVersion":"3.12.0-1-amd64" + "NCPU":1, + "MemTotal":2099236864, + "Name":"prod-server-42", + "ID":"7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", + "Debug":false, + "NFd": 11, + "NGoroutines":21, + "SystemTime": "2015-03-10T11:11:23.730591467-07:00" + "NEventsListener":0, + "InitPath":"/usr/bin/docker", + "InitSha1":"", + "IndexServerAddress":["https://index.docker.io/v1/"], + "MemoryLimit":true, + "SwapLimit":false, + "IPv4Forwarding":true, + "Labels":["storage=ssd"], + "DockerRootDir": "/var/lib/docker", + "HttpProxy": "http://test:test@localhost:8080" + "HttpsProxy": "https://test:test@localhost:8080" + "NoProxy": "9.81.1.160" + "OperatingSystem": "Boot2Docker", + } + +Status Codes: + +- **200** – no error +- **500** – server error + +### Show the docker version information + +`GET /version` + +Show the docker version information + +**Example request**: + + GET /version HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Version": "1.5.0", + "Os": "linux", + "KernelVersion": "3.18.5-tinycore64", + "GoVersion": "go1.4.1", + "GitCommit": "a8a31ef", + "Arch": "amd64", + "ApiVersion": "1.18" + } + +Status Codes: + +- **200** – no error +- **500** – server error + +### Ping the docker server + +`GET /_ping` + +Ping the docker server + +**Example request**: + + GET /_ping HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: text/plain + + OK + +Status Codes: + +- **200** - no error +- **500** - server error + +### Create a new image from a container's changes + +`POST /commit` + +Create a new image from a container's changes + +**Example request**: + + POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 + Content-Type: application/json + + { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "PortSpecs": null, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "date" + ], + "Volumes": { + "/tmp": {} + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + } + } + +**Example response**: + + HTTP/1.1 201 Created + Content-Type: application/vnd.docker.raw-stream + + {"Id": "596069db4bf5"} + +Json Parameters: + +- **config** - the container's configuration + +Query Parameters: + +- **container** – source container +- **repo** – repository +- **tag** – tag +- **comment** – commit message +- **author** – author (e.g., "John Hannibal Smith + <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") + +Status Codes: + +- **201** – no error +- **404** – no such container +- **500** – server error + +### Monitor Docker's events + +`GET /events` + +Get container events from docker, either in real time via streaming, or via +polling (using since). + +Docker containers will report the following events: + + create, destroy, die, exec_create, exec_start, export, kill, oom, pause, restart, start, stop, unpause + +and Docker images will report: + + untag, delete + +**Example request**: + + GET /events?since=1374067924 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} + {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} + {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} + {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} + +Query Parameters: + +- **since** – timestamp used for polling +- **until** – timestamp used for polling +- **filters** – a json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: + - event=<string> -- event to filter + - image=<string> -- image to filter + - container=<string> -- container to filter + +Status Codes: + +- **200** – no error +- **500** – server error + +### Get a tarball containing all images in a repository + +`GET /images/(name)/get` + +Get a tarball containing all images and metadata for the repository specified +by `name`. + +If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image +(and its parents) are returned. If `name` is an image ID, similarly only tha +image (and its parents) are returned, but with the exclusion of the +'repositories' file in the tarball, as there were no image names referenced. + +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + GET /images/ubuntu/get + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + Binary data stream + +Status Codes: + +- **200** – no error +- **500** – server error + +### Get a tarball containing all images. + +`GET /images/get` + +Get a tarball containing all images and metadata for one or more repositories. + +For each value of the `names` parameter: if it is a specific name and tag (e.g. +ubuntu:latest), then only that image (and its parents) are returned; if it is +an image ID, similarly only that image (and its parents) are returned and there +would be no names referenced in the 'repositories' file for this image ID. + +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + Binary data stream + +Status Codes: + +- **200** – no error +- **500** – server error + +### Load a tarball with a set of images and tags into docker + +`POST /images/load` + +Load a set of images and tags into the docker repository. +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + POST /images/load + + Tarball in body + +**Example response**: + + HTTP/1.1 200 OK + +Status Codes: + +- **200** – no error +- **500** – server error + +### Image tarball format + +An image tarball contains one directory per image layer (named using its long ID), +each containing three files: + +1. `VERSION`: currently `1.0` - the file format version +2. `json`: detailed layer information, similar to `docker inspect layer_id` +3. `layer.tar`: A tarfile containing the filesystem changes in this layer + +The `layer.tar` file will contain `aufs` style `.wh..wh.aufs` files and directories +for storing attribute changes and deletions. + +If the tarball defines a repository, there will also be a `repositories` file at +the root that contains a list of repository and tag names mapped to layer IDs. + +``` +{"hello-world": + {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} +} +``` + +### Exec Create + +`POST /containers/(id)/exec` + +Sets up an exec instance in a running container `id` + +**Example request**: + + POST /containers/e90e34656806/exec HTTP/1.1 + Content-Type: application/json + + { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "Cmd": [ + "date" + ], + } + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: application/json + + { + "Id": "f90e34656806" + } + +Json Parameters: + +- **AttachStdin** - Boolean value, attaches to stdin of the exec command. +- **AttachStdout** - Boolean value, attaches to stdout of the exec command. +- **AttachStderr** - Boolean value, attaches to stderr of the exec command. +- **Tty** - Boolean value to allocate a pseudo-TTY +- **Cmd** - Command to run specified as a string or an array of strings. + + +Status Codes: + +- **201** – no error +- **404** – no such container + +### Exec Start + +`POST /exec/(id)/start` + +Starts a previously set up exec instance `id`. If `detach` is true, this API +returns after starting the `exec` command. Otherwise, this API sets up an +interactive session with the `exec` command. + +**Example request**: + + POST /exec/e90e34656806/start HTTP/1.1 + Content-Type: application/json + + { + "Detach": false, + "Tty": false, + } + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: application/json + + {{ STREAM }} + +Json Parameters: + +- **Detach** - Detach from the exec command +- **Tty** - Boolean value to allocate a pseudo-TTY + +Status Codes: + +- **201** – no error +- **404** – no such exec instance + + **Stream details**: + Similar to the stream behavior of `POST /container/(id)/attach` API + +### Exec Resize + +`POST /exec/(id)/resize` + +Resizes the tty session used by the exec command `id`. +This API is valid only if `tty` was specified as part of creating and starting the exec command. + +**Example request**: + + POST /exec/e90e34656806/resize HTTP/1.1 + Content-Type: text/plain + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: text/plain + +Query Parameters: + +- **h** – height of tty session +- **w** – width + +Status Codes: + +- **201** – no error +- **404** – no such exec instance + +### Exec Inspect + +`GET /exec/(id)/json` + +Return low-level information about the exec command `id`. + +**Example request**: + + GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: plain/text + + { + "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", + "Running" : false, + "ExitCode" : 2, + "ProcessConfig" : { + "privileged" : false, + "user" : "", + "tty" : false, + "entrypoint" : "sh", + "arguments" : [ + "-c", + "exit 2" + ] + }, + "OpenStdin" : false, + "OpenStderr" : false, + "OpenStdout" : false, + "Container" : { + "State" : { + "Running" : true, + "Paused" : false, + "Restarting" : false, + "OOMKilled" : false, + "Pid" : 3650, + "ExitCode" : 0, + "Error" : "", + "StartedAt" : "2014-11-17T22:26:03.717657531Z", + "FinishedAt" : "0001-01-01T00:00:00Z" + }, + "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", + "Created" : "2014-11-17T22:26:03.626304998Z", + "Path" : "date", + "Args" : [], + "Config" : { + "Hostname" : "8f177a186b97", + "Domainname" : "", + "User" : "", + "AttachStdin" : false, + "AttachStdout" : false, + "AttachStderr" : false, + "PortSpecs" : null, + "ExposedPorts" : null, + "Tty" : false, + "OpenStdin" : false, + "StdinOnce" : false, + "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], + "Cmd" : [ + "date" + ], + "Image" : "ubuntu", + "Volumes" : null, + "WorkingDir" : "", + "Entrypoint" : null, + "NetworkDisabled" : false, + "MacAddress" : "", + "OnBuild" : null, + "SecurityOpt" : null + }, + "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", + "NetworkSettings" : { + "IPAddress" : "172.17.0.2", + "IPPrefixLen" : 16, + "MacAddress" : "02:42:ac:11:00:02", + "Gateway" : "172.17.42.1", + "Bridge" : "docker0", + "PortMapping" : null, + "Ports" : {} + }, + "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", + "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", + "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Name" : "/test", + "Driver" : "aufs", + "ExecDriver" : "native-0.2", + "MountLabel" : "", + "ProcessLabel" : "", + "AppArmorProfile" : "", + "RestartCount" : 0, + "Volumes" : {}, + "VolumesRW" : {} + } + } + +Status Codes: + +- **200** – no error +- **404** – no such exec instance +- **500** - server error + +# 3. Going further + +## 3.1 Inside `docker run` + +As an example, the `docker run` command line makes the following API calls: + +- Create the container + +- If the status code is 404, it means the image doesn't exist: + - Try to pull it + - Then retry to create the container + +- Start the container + +- If you are not in detached mode: +- Attach to the container, using logs=1 (to have stdout and + stderr from the container's start) and stream=1 + +- If in detached mode or only stdin is attached: +- Display the container's id + +## 3.2 Hijacking + +In this version of the API, /attach, uses hijacking to transport stdin, +stdout and stderr on the same socket. + +To hint potential proxies about connection hijacking, Docker client sends +connection upgrade headers similarly to websocket. + + Upgrade: tcp + Connection: Upgrade + +When Docker daemon detects the `Upgrade` header, it will switch its status code +from **200 OK** to **101 UPGRADED** and resend the same headers. + +This might change in the future. + +## 3.3 CORS Requests + +To set cross origin requests to the remote api please give values to +"--api-cors-header" when running docker in daemon mode. Set * will allow all, +default or blank means CORS disabled + + $ docker -d -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" diff --git a/docs/sources/reference/api/registry_api_client_libraries.md b/docs/sources/reference/api/registry_api_client_libraries.md index 7fe986204a..6977af3cc4 100644 --- a/docs/sources/reference/api/registry_api_client_libraries.md +++ b/docs/sources/reference/api/registry_api_client_libraries.md @@ -6,8 +6,9 @@ page_keywords: API, Docker, index, registry, REST, documentation, clients, C#, E These libraries have not been tested by the Docker maintainers for compatibility. Please file issues with the library owners. If you find -more library implementations, please list them in Docker doc bugs and we -will add the libraries here. +more library implementations, please submit a PR with an update to this page +or open an issue in the [Docker](https://github.com/docker/docker/issues) +project and we will add the libraries here. @@ -31,5 +32,11 @@ will add the libraries here. + + + + + +
    https://github.com/kwk/docker-registry-frontend Active
    Godocker-reg-clienthttps://github.com/CenturyLinkLabs/docker-reg-clientActive
    diff --git a/docs/sources/reference/builder.md b/docs/sources/reference/builder.md index d0c928188d..6955d31e0e 100644 --- a/docs/sources/reference/builder.md +++ b/docs/sources/reference/builder.md @@ -107,11 +107,11 @@ images. ### Environment Replacement -**Note:** prior to 1.3, `Dockerfile` environment variables were handled -similarly, in that they would be replaced as described below. However, there -was no formal definition on as to which instructions handled environment -replacement at the time. After 1.3 this behavior will be preserved and -canonical. +> **Note**: prior to 1.3, `Dockerfile` environment variables were handled +> similarly, in that they would be replaced as described below. However, there +> was no formal definition on as to which instructions handled environment +> replacement at the time. After 1.3 this behavior will be preserved and +> canonical. Environment variables (declared with [the `ENV` statement](#env)) can also be used in certain instructions as variables to be interpreted by the `Dockerfile`. Escapes @@ -192,6 +192,10 @@ Or FROM : +Or + + FROM @ + The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image) for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as its first instruction. The image can be any valid image – it is especially easy @@ -204,8 +208,9 @@ to start by **pulling an image** from the [*Public Repositories*]( multiple images. Simply make a note of the last image ID output by the commit before each new `FROM` command. -If no `tag` is given to the `FROM` instruction, `latest` is assumed. If the -used tag does not exist, an error will be returned. +The `tag` or `digest` values are optional. If you omit either of them, the builder +assumes a `latest` by default. The builder returns an error if it cannot match +the `tag` value. ## MAINTAINER @@ -328,6 +333,36 @@ default specified in `CMD`. > the result; `CMD` does not execute anything at build time, but specifies > the intended command for the image. +## LABEL + + LABEL = = = ... + +The `LABEL` instruction adds metadata to an image. A `LABEL` is a +key-value pair. To include spaces within a `LABEL` value, use quotes and +blackslashes as you would in command-line parsing. + + LABEL "com.example.vendor"="ACME Incorporated" + +An image can have more than one label. To specify multiple labels, separate each +key-value pair by an EOL. + + LABEL com.example.label-without-value + LABEL com.example.label-with-value="foo" + LABEL version="1.0" + LABEL description="This text illustrates \ + that label-values can span multiple lines." + +Docker recommends combining labels in a single `LABEL` instruction where +possible. Each `LABEL` instruction produces a new layer which can result in an +inefficient image if you use many labels. This example results in four image +layers. + +Labels are additive including `LABEL`s in `FROM` images. As the system +encounters and then applies a new label, new `key`s override any previous labels +with identical keys. + +To view an image's labels, use the `docker inspect` command. + ## EXPOSE EXPOSE [...] @@ -337,11 +372,12 @@ specified network ports at runtime. Docker uses this information to interconnect containers using links (see the [Docker User Guide](/userguide/dockerlinks)) and to determine which ports to expose to the host when [using the -P flag](/reference/run/#expose-incoming-ports). -**Note:** -`EXPOSE` doesn't define which ports can be exposed to the host or make ports -accessible from the host by default. To expose ports to the host, at runtime, -[use the `-p` flag](/userguide/dockerlinks) or -[the -P flag](/reference/run/#expose-incoming-ports). + +> **Note**: +> `EXPOSE` doesn't define which ports can be exposed to the host or make ports +> accessible from the host by default. To expose ports to the host, at runtime, +> [use the `-p` flag](/userguide/dockerlinks) or +> [the -P flag](/reference/run/#expose-incoming-ports). ## ENV @@ -626,8 +662,7 @@ ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] If you need to write a starter script for a single executable, you can ensure that the final executable receives the Unix signals by using `exec` and `gosu` -(see [the Dockerfile best practices](/articles/dockerfile_best-practices/#entrypoint) -for more details): +commands: ```bash #!/bin/bash @@ -777,14 +812,28 @@ If you then run `docker stop test`, the container will not exit cleanly - the VOLUME ["/data"] -The `VOLUME` instruction will create a mount point with the specified name -and mark it as holding externally mounted volumes from native host or other +The `VOLUME` instruction creates a mount point with the specified name +and marks it as holding externally mounted volumes from native host or other containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log /var/db`. For more information/examples and mounting instructions via the -Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume) +Docker client, refer to +[*Share Directories via Volumes*](/userguide/dockervolumes/#volume) documentation. +The `docker run` command initializes the newly created volume with any data +that exists at the specified location within the base image. For example, +consider the following Dockerfile snippet: + + FROM ubuntu + RUN mkdir /myvol + RUN echo "hello world" > /myvol/greating + VOLUME /myvol + +This Dockerfile results in an image that causes `docker run`, to +create a new mount point at `/myvol` and copy the `greating` file +into the newly created volume. + > **Note**: > The list is parsed as a JSON array, which means that > you must use double-quotes (") around words not single-quotes ('). @@ -893,6 +942,7 @@ For example you might add something like this: FROM ubuntu MAINTAINER Victor Vieux + LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0" RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server # Firefox over VNC diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index 9c9bd1d3c7..6c3eb1c8dd 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -2,7 +2,7 @@ page_title: Command Line Interface page_description: Docker's CLI command description and usage page_keywords: Docker, Docker documentation, CLI, command line -# Command Line +# Docker Command Line {{ include "no-remote-sudo.md" }} @@ -26,15 +26,15 @@ To list the help on any command just execute the command, followed by the `--hel Run a command in a new container - -a, --attach=[] Attach to STDIN, STDOUT or STDERR. + -a, --attach=[] Attach to STDIN, STDOUT or STDERR -c, --cpu-shares=0 CPU shares (relative weight) ... ## Option types Single character command line options can be combined, so rather than -typing `docker run -t -i --name test busybox sh`, -you can write `docker run -ti --name test busybox sh`. +typing `docker run -i -t --name test busybox sh`, +you can write `docker run -it --name test busybox sh`. ### Boolean @@ -74,44 +74,43 @@ expect an integer, and they can only be specified once. A self-sufficient runtime for linux containers. Options: - --api-enable-cors=false Enable CORS headers in the remote API - -b, --bridge="" Attach containers to a pre-existing network bridge - use 'none' to disable container networking - --bip="" Use this CIDR notation address for the network bridge's IP, not compatible with -b - -D, --debug=false Enable debug mode - -d, --daemon=false Enable daemon mode - --dns=[] Force Docker to use specific DNS servers - --dns-search=[] Force Docker to use specific DNS search domains - -e, --exec-driver="native" Force the Docker runtime to use a specific exec driver - --fixed-cidr="" IPv4 subnet for fixed IPs (e.g.: 10.20.0.0/16) - this subnet must be nested in the bridge subnet (which is defined by -b or --bip) - --fixed-cidr-v6="" IPv6 subnet for global IPs (e.g.: 2a00:1450::/64) - -G, --group="docker" Group to assign the unix socket specified by -H when running in daemon mode - use '' (the empty string) to disable setting of a group - -g, --graph="/var/lib/docker" Path to use as the root of the Docker runtime - -H, --host=[] The socket(s) to bind to in daemon mode or connect to in client mode, specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd. - --icc=true Allow unrestricted inter-container and Docker daemon host communication - --insecure-registry=[] Enable insecure communication with specified registries (disables certificate verification for HTTPS and enables HTTP fallback) (e.g., localhost:5000 or 10.20.0.0/16) - --ip=0.0.0.0 Default IP address to use when binding container ports - --ip-forward=true Enable net.ipv4.ip_forward and IPv6 forwarding if --fixed-cidr-v6 is defined. IPv6 forwarding may interfere with your existing IPv6 configuration when using Router Advertisement. - --ip-masq=true Enable IP masquerading for bridge's IP range - --iptables=true Enable Docker's addition of iptables rules - --ipv6=false Enable Docker IPv6 support - -l, --log-level="info" Set the logging level (debug, info, warn, error, fatal) - --label=[] Set key=value labels to the daemon (displayed in `docker info`) - --mtu=0 Set the containers network MTU - if no value is provided: default to the default route MTU or 1500 if no default route is available - -p, --pidfile="/var/run/docker.pid" Path to use for daemon PID file - --registry-mirror=[] Specify a preferred Docker registry mirror - -s, --storage-driver="" Force the Docker runtime to use a specific storage driver - --selinux-enabled=false Enable selinux support. SELinux does not presently support the BTRFS storage driver - --storage-opt=[] Set storage driver options - --tls=false Use TLS; implied by --tlsverify flag - --tlscacert="/home/sven/.docker/ca.pem" Trust only remotes providing a certificate signed by the CA given here - --tlscert="/home/sven/.docker/cert.pem" Path to TLS certificate file - --tlskey="/home/sven/.docker/key.pem" Path to TLS key file - --tlsverify=false Use TLS and verify the remote (daemon: verify client, client: verify daemon) - -v, --version=false Print version information and quit + --api-cors-header="" Set CORS headers in the remote API + -b, --bridge="" Attach containers to a network bridge + --bip="" Specify network bridge IP + -D, --debug=false Enable debug mode + -d, --daemon=false Enable daemon mode + --dns=[] DNS server to use + --dns-search=[] DNS search domains to use + -e, --exec-driver="native" Exec driver to use + --fixed-cidr="" IPv4 subnet for fixed IPs + --fixed-cidr-v6="" IPv6 subnet for fixed IPs + -G, --group="docker" Group for the unix socket + -g, --graph="/var/lib/docker" Root of the Docker runtime + -H, --host=[] Daemon socket(s) to connect to + -h, --help=false Print usage + --icc=true Enable inter-container communication + --insecure-registry=[] Enable insecure registry communication + --ip=0.0.0.0 Default IP when binding container ports + --ip-forward=true Enable net.ipv4.ip_forward + --ip-masq=true Enable IP masquerading + --iptables=true Enable addition of iptables rules + --ipv6=false Enable IPv6 networking + -l, --log-level="info" Set the logging level + --label=[] Set key=value labels to the daemon + --log-driver="json-file" Container's logging driver (json-file/none) + --mtu=0 Set the containers network MTU + -p, --pidfile="/var/run/docker.pid" Path to use for daemon PID file + --registry-mirror=[] Preferred Docker registry mirror + -s, --storage-driver="" Storage driver to use + --selinux-enabled=false Enable selinux support + --storage-opt=[] Set storage driver options + --tls=false Use TLS; implied by --tlsverify + --tlscacert="~/.docker/ca.pem" Trust certs signed only by this CA + --tlscert="~/.docker/cert.pem" Path to TLS certificate file + --tlskey="~/.docker/key.pem" Path to TLS key file + --tlsverify=false Use TLS and verify the remote + -v, --version=false Print version information and quit + --default-ulimit=[] Set default ulimit settings for containers. Options with [] may be specified multiple times. @@ -177,11 +176,7 @@ string is equivalent to setting the `--tlsverify` flag. The following are equiva The Docker client will honor the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` environment variables (or the lowercase versions thereof). `HTTPS_PROXY` takes -precedence over `HTTP_PROXY`. If you happen to have a proxy configured with the -`HTTP_PROXY` or `HTTPS_PROXY` environment variables but still want to -communicate with the Docker daemon over its default `unix` domain socket, -setting the `NO_PROXY` environment variable to the path of the socket -(`/var/run/docker.sock`) is required. +precedence over `HTTP_PROXY`. ### Daemon storage-driver option @@ -210,8 +205,8 @@ share executable memory between devices. Use `docker -d -s btrfs -g /mnt/btrfs_p The `overlay` is a very fast union filesystem. It is now merged in the main Linux kernel as of [3.18.0](https://lkml.org/lkml/2014/10/26/137). -Call `docker -d -s overlay` to use it. -> **Note:** +Call `docker -d -s overlay` to use it. +> **Note:** > It is currently unsupported on `btrfs` or any Copy on Write filesystem > and should only be used over `ext4` partitions. @@ -230,11 +225,11 @@ Currently supported options are: are inherently "sparse", so a 10G device which is mostly empty doesn't use 10 GB of space on the pool. However, the filesystem will use more space for the empty case the larger the device is. - + **Warning**: This value affects the system-wide "base" empty filesystem that may already be initialized and inherited by pulled images. Typically, a change to this value will require additional steps to take effect: - + $ sudo service docker stop $ sudo rm -rf /var/lib/docker $ sudo service docker start @@ -379,7 +374,7 @@ verification failed (i.e., wrong CA). By default, Docker assumes all, but local (see local registries below), registries are secure. Communicating with an insecure registry is not possible if Docker assumes that registry is secure. In order to communicate with an insecure registry, the Docker daemon requires `--insecure-registry` -in one of the following two forms: +in one of the following two forms: * `--insecure-registry myregistry:5000` tells the Docker daemon that myregistry:5000 should be considered insecure. * `--insecure-registry 10.1.0.0/16` tells the Docker daemon that all registries whose domain resolve to an IP address is part @@ -411,6 +406,14 @@ This will only add the proxy and authentication to the Docker daemon's requests your `docker build`s and running containers will need extra configuration to use the proxy +### Default Ulimits + +`--default-ulimit` allows you to set the default `ulimit` options to use for all +containers. It takes the same options as `--ulimit` for `docker run`. If these +defaults are not set, `ulimit` settings will be inheritted, if not set on +`docker run`, from the Docker daemon. Any `--ulimit` options passed to +`docker run` will overwrite these defaults. + ### Miscellaneous options IP masquerading uses address translation to allow containers without a public IP to talk @@ -433,7 +436,7 @@ Docker supports softlinks for the Docker data directory Attach to a running container --no-stdin=false Do not attach STDIN - --sig-proxy=true Proxy all received signals to the process (non-TTY mode only). SIGCHLD, SIGKILL, and SIGSTOP are not proxied. + --sig-proxy=true Proxy all received signals to the process The `docker attach` command allows you to attach to a running container using the container's ID or name, either to view its ongoing output or to control it @@ -484,7 +487,7 @@ attaching to a tty-enabled container (i.e.: launched with `-t`). $ echo $? 0 $ docker ps -a | grep topdemo - 7998ac8581f9 ubuntu:14.04 "/usr/bin/top -b" 38 seconds ago Exited (0) 21 seconds ago topdemo + 7998ac8581f9 ubuntu:14.04 "/usr/bin/top -b" 38 seconds ago Exited (0) 21 seconds ago topdemo And in this second example, you can see the exit code returned by the `bash` process is returned by the `docker attach` command to its caller too: @@ -505,28 +508,62 @@ is returned by the `docker attach` command to its caller too: Build a new image from the source code at PATH - --force-rm=false Always remove intermediate containers, even after unsuccessful builds + -f, --file="" Name of the Dockerfile (Default is 'PATH/Dockerfile') + --force-rm=false Always remove intermediate containers --no-cache=false Do not use cache when building the image --pull=false Always attempt to pull a newer version of the image -q, --quiet=false Suppress the verbose output generated by the containers --rm=true Remove intermediate containers after a successful build - -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success + -t, --tag="" Repository name (and optionally a tag) for the image + -m, --memory="" Memory limit for all build containers + --memory-swap="" Total memory (memory + swap), `-1` to disable swap + -c, --cpu-shares CPU Shares (relative weight) + --cpuset-cpus="" CPUs in which to allow exection, e.g. `0-3`, `0,1` -Use this command to build Docker images from a Dockerfile and a -"context". +Builds Docker images from a Dockerfile and a "context". A build's context is +the files located in the specified `PATH` or `URL`. The build process can +refer to any of the files in the context. For example, your build can use +an [*ADD*](/reference/builder/#add) instruction to reference a file in the +context. -The files at `PATH` or `URL` are called the "context" of the build. The -build process may refer to any of the files in the context, for example -when using an [*ADD*](/reference/builder/#add) instruction. -When a single Dockerfile is given as `URL` or is piped through `STDIN` -(`docker build - < Dockerfile`), then no context is set. +The `URL` parameter can specify the location of a Git repository; in this +case, the repository is the context. The Git repository is recursively +cloned with its submodules. The system does a fresh `git clone -recursive` +in a temporary directory on your local host. Then, this clone is sent to +the Docker daemon as the context. Local clones give you the ability to +access private repositories using local user credentials, VPN's, and so forth. -When a Git repository is set as `URL`, then the repository is used as -the context. The Git repository is cloned with its submodules -(`git clone -recursive`). A fresh `git clone` occurs in a temporary directory -on your local host, and then this is sent to the Docker daemon as the -context. This way, your local user credentials and VPN's etc can be -used to access private repositories. +Instead of specifying a context, you can pass a single Dockerfile in the +`URL` or pipe the file in via `STDIN`. To pipe a Dockerfile from `STDIN`: + + docker build - < Dockerfile + +If you use STDIN or specify a `URL`, the system places the contents into a +file called `Dockerfile`, and any `-f`, `--file` option is ignored. In this +scenario, there is no context. + +### Return code + +On a successful build, a return code of success `0` will be returned. +When the build fails, a non-zero failure code will be returned. + +There should be informational output of the reason for failure output +to `STDERR`: + +``` +$ docker build -t fail . +Sending build context to Docker daemon 2.048 kB +Sending build context to Docker daemon +Step 0 : FROM busybox + ---> 4986bf8c1536 +Step 1 : RUN exit 13 + ---> Running in e26670ec7a0a +INFO[0000] The command [/bin/sh -c exit 13] returned a non-zero code: 13 +$ echo $? +1 +``` + +### .dockerignore file If a file named `.dockerignore` exists in the root of `PATH` then it is interpreted as a newline-separated list of exclusion patterns. @@ -535,7 +572,7 @@ will be excluded from the context. Globbing is done using Go's [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules. Please note that `.dockerignore` files in other subdirectories are -considered as normal files. Filepaths in .dockerignore are absolute with +considered as normal files. Filepaths in `.dockerignore` are absolute with the current directory as the root. Wildcards are allowed but the search is not recursive. @@ -562,6 +599,12 @@ in cases where the same set of files are used for multiple builds. The path must be to a file within the build context. If a relative path is specified then it must to be relative to the current directory. +If the Docker client loses connection to the daemon, the build is canceled. +This happens if you interrupt the Docker client with `ctrl-c` or if the Docker +client is killed for any reason. + +> **Note:** Currently only the "run" phase of the build can be canceled until +> pull cancelation is implemented). See also: @@ -672,8 +715,8 @@ instructions instead of `Dockerfile`. $ sudo docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . $ sudo docker build -f dockerfiles/Dockerfile.prod -t myapp_prod . -The above commands will build the current build context (as specified by -the `.`) twice, once using a debug version of a `Dockerfile` and once using +The above commands will build the current build context (as specified by +the `.`) twice, once using a debug version of a `Dockerfile` and once using a production version. $ cd /home/me/myapp/some/dir/really/deep @@ -681,9 +724,9 @@ a production version. $ sudo docker build -f ../../../../dockerfiles/debug /home/me/myapp These two `docker build` commands do the exact same thing. They both -use the contents of the `debug` file instead of looking for a `Dockerfile` -and will use `/home/me/myapp` as the root of the build context. Note that -`debug` is in the directory structure of the build context, regardless of how +use the contents of the `debug` file instead of looking for a `Dockerfile` +and will use `/home/me/myapp` as the root of the build context. Note that +`debug` is in the directory structure of the build context, regardless of how you refer to it on the command line. > **Note:** `docker build` will return a `no such file or directory` error @@ -700,6 +743,7 @@ you refer to it on the command line. Create a new image from a container's changes -a, --author="" Author (e.g., "John Hannibal Smith ") + -c, --change=[] Apply specified Dockerfile instructions while committing the image -m, --message="" Commit message -p, --pause=true Pause container during commit @@ -714,7 +758,11 @@ while the image is committed. This reduces the likelihood of encountering data corruption during the process of creating the commit. If this behavior is undesired, set the 'p' option to false. -#### Commit an existing container +The `--change` option will apply `Dockerfile` instructions to the image +that is created. +Supported `Dockerfile` instructions: `ADD`|`CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`FROM`|`MAINTAINER`|`RUN`|`USER`|`LABEL`|`VOLUME`|`WORKDIR`|`COPY` + +#### Commit a container $ sudo docker ps ID IMAGE COMMAND CREATED STATUS PORTS @@ -726,14 +774,29 @@ If this behavior is undesired, set the 'p' option to false. REPOSITORY TAG ID CREATED VIRTUAL SIZE SvenDowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB +#### Commit a container with new configurations + + $ sudo docker ps + ID IMAGE COMMAND CREATED STATUS PORTS + c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours + 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours + $ sudo docker inspect -f "{{ .Config.Env }}" c3f279d17e0a + [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin] + $ sudo docker commit --change "ENV DEBUG true" c3f279d17e0a SvenDowideit/testimage:version3 + f5283438590d + $ sudo docker inspect -f "{{ .Config.Env }}" f5283438590d + [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DEBUG=true] + ## cp -Copy files/folders from a container's filesystem to the host -path. Paths are relative to the root of the filesystem. +Copy files or folders from a container's filesystem to the directory on the +host. Use '-' to write the data as a tar file to `STDOUT`. `CONTAINER:PATH` is +relative to the root of the container's filesystem. - Usage: docker cp CONTAINER:PATH HOSTPATH + Usage: docker cp CONTAINER:PATH HOSTDIR|- + + Copy files/folders from the PATH to the HOSTDIR. - Copy files/folders from the PATH to the HOSTPATH ## create @@ -743,48 +806,42 @@ Creates a new container. Create a new container - -a, --attach=[] Attach to STDIN, STDOUT or STDERR. + -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custom host-to-IP mapping (host:ip) -c, --cpu-shares=0 CPU shares (relative weight) --cap-add=[] Add Linux capabilities --cap-drop=[] Drop Linux capabilities + --cgroup-parent="" Optional parent cgroup for the container --cidfile="" Write the container ID to the file - --cpuset="" CPUs in which to allow execution (0-3, 0,1) - --device=[] Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) + --cpuset-cpus="" CPUs in which to allow execution (0-3, 0,1) + --device=[] Add a host device to the container --dns=[] Set custom DNS servers - --dns-search=[] Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) + --dns-search=[] Set custom DNS search domains -e, --env=[] Set environment variables --entrypoint="" Overwrite the default ENTRYPOINT of the image - --env-file=[] Read in a line delimited file of environment variables - --expose=[] Expose a port or a range of ports (e.g. --expose=3300-3310) from the container without publishing it to your host + --env-file=[] Read in a file of environment variables + --expose=[] Expose a port or a range of ports -h, --hostname="" Container host name -i, --interactive=false Keep STDIN open even if not attached - --ipc="" Default is to create a private IPC namespace (POSIX SysV IPC) for the container - 'container:': reuses another container shared memory, semaphores and message queues - 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. - --link=[] Add link to another container in the form of :alias - --lxc-conf=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" - -m, --memory="" Memory limit (format: , where unit = b, k, m or g) + --ipc="" IPC namespace to use + -l, --label=[] Set metadata on the container (e.g., --label=com.example.key=value) + --label-file=[] Read in a line delimited file of labels + --link=[] Add link to another container + --log-driver="" Logging driver for container + --lxc-conf=[] Add custom lxc options + -m, --memory="" Memory limit --mac-address="" Container MAC address (e.g. 92:d0:c6:0a:29:33) --name="" Assign a name to the container --net="bridge" Set the Network mode for the container - 'bridge': creates a new network stack for the container on the docker bridge - 'none': no networking for this container - 'container:': reuses another container network stack - 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. - -P, --publish-all=false Publish all exposed ports to random ports on the host interfaces - -p, --publish=[] Publish a container's port, or a range of ports (e.g., `-p 3300-3310`), to the host - format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort - Both hostPort and containerPort can be specified as a range of ports. - When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. (e.g., `-p 1234-1236:1234-1236/tcp`) - (use 'docker port' to see the actual mapping) + -P, --publish-all=false Publish all exposed ports to random ports + -p, --publish=[] Publish a container's port(s) to the host --privileged=false Give extended privileges to this container - --read-only=false Mount the container's root filesystem as read only - --restart="" Restart policy to apply when a container exits (no, on-failure[:max-retry], always) - --security-opt=[] Security Options + --read-only=false Mount the container's root filesystem as read only + --restart="no" Restart policy (no, on-failure[:max-retry], always) + --security-opt=[] Security options -t, --tty=false Allocate a pseudo-TTY -u, --user="" Username or UID - -v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container) + -v, --volume=[] Bind mount a volume --volumes-from=[] Mount volumes from the specified container(s) -w, --workdir="" Working directory inside the container @@ -798,10 +855,8 @@ container at any point. This is useful when you want to set up a container configuration ahead of time so that it is ready to start when you need it. -Note that volumes set by `create` may be over-ridden by options set with -`start`. - -Please see the [run command](#run) section for more details. +Please see the [run command](#run) section and the [Docker run reference]( +/reference/run/) for more details. #### Examples @@ -875,7 +930,7 @@ For example: Get real time events from the server - -f, --filter=[] Provide filter values (i.e., 'event=stop') + -f, --filter=[] Filter output based on conditions provided --since="" Show all events created since timestamp --until="" Stream events until this timestamp @@ -901,9 +956,10 @@ Using multiple filters will be handled as a *AND*; for example container 588a23dac085 *AND* the event type is *start* Current filters: - * event - * image - * container + +* container +* event +* image #### Examples @@ -972,6 +1028,12 @@ You'll need two shells for this example. $ sudo docker events --filter 'container=7805c1d35632' --filter 'event=stop' 2014-09-03T15:49:29.999999999Z07:00 7805c1d35632: (from redis:2.8) stop + $ sudo docker events --filter 'container=container_1' --filter 'container=container_2' + 2014-09-03T15:49:29.999999999Z07:00 4386fb97867d: (from ubuntu-1:14.04) die + 2014-05-10T17:42:14.999999999Z07:00 4386fb97867d: (from ubuntu-1:14.04) stop + 2014-05-10T17:42:14.999999999Z07:00 7805c1d35632: (from redis:2.8) die + 2014-09-03T15:49:29.999999999Z07:00 7805c1d35632: (from redis:2.8) stop + ## exec Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] @@ -984,8 +1046,8 @@ You'll need two shells for this example. The `docker exec` command runs a new command in a running container. -The command started using `docker exec` will only run while the container's primary -process (`PID 1`) is running, and will not be restarted if the container is restarted. +The command started using `docker exec` only runs while the container's primary +process (`PID 1`) is running, and it is not restarted if the container is restarted. If the container is paused, then the `docker exec` command will fail with an error: @@ -1016,18 +1078,26 @@ This will create a new Bash session in the container `ubuntu_bash`. ## export - Usage: docker export CONTAINER + Usage: docker export [OPTIONS] CONTAINER - Export the contents of a filesystem as a tar archive to STDOUT + Export the contents of a filesystem to a tar archive (streamed to STDOUT by default) -For example: + -o, --output="" Write to a file, instead of STDOUT + + Produces a tarred repository to the standard output stream. + + For example: $ sudo docker export red_panda > latest.tar + Or + + $ sudo docker export --output="latest.tar" red_panda + > **Note:** > `docker export` does not export the contents of volumes associated with the -> container. If a volume is mounted on top of an existing directory in the -> container, `docker export` will export the contents of the *underlying* +> container. If a volume is mounted on top of an existing directory in the +> container, `docker export` will export the contents of the *underlying* > directory, not the contents of the volume. > > Refer to [Backup, restore, or migrate data volumes](/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes) @@ -1059,8 +1129,10 @@ To see how the `docker:latest` image was built: List images - -a, --all=false Show all images (by default filter out the intermediate image layers) - -f, --filter=[] Provide filter values (i.e., 'dangling=true') + -a, --all=false Show all images (default hides intermediate images) + --digests=false Show digests + -f, --filter=[] Filter output based on conditions provided + --help=false Print usage --no-trunc=false Don't truncate output -q, --quiet=false Only show numeric IDs @@ -1109,6 +1181,22 @@ uses up the `VIRTUAL SIZE` listed only once. tryout latest 2629d1fa0b81b222fca63371ca16cbf6a0772d07759ff80e8d1369b926940074 23 hours ago 131.5 MB 5ed6274db6ceb2397844896966ea239290555e74ef307030ebb01ff91b1914df 24 hours ago 1.089 GB +#### Listing image digests + +Images that use the v2 or later format have a content-addressable identifier +called a `digest`. As long as the input used to generate the image is +unchanged, the digest value is predictable. To list image digest values, use +the `--digests` flag: + + $ sudo docker images --digests | head + REPOSITORY TAG DIGEST IMAGE ID CREATED VIRTUAL SIZE + localhost:5000/test/busybox sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 4986bf8c1536 9 weeks ago 2.43 MB + +When pushing or pulling to a 2.0 registry, the `push` or `pull` command +output includes the image digest. You can `pull` using a digest value. You can +also reference by digest in `create`, `run`, and `rmi` commands, as well as the +`FROM` image reference in a Dockerfile. + #### Filtering The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more @@ -1116,6 +1204,7 @@ than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "b Current filters: * dangling (boolean - true or false) + * label (`label=` or `label==`) ##### Untagged images @@ -1152,13 +1241,22 @@ NOTE: Docker will warn you if any containers exist that are using these untagged Usage: docker import URL|- [REPOSITORY[:TAG]] - Create an empty filesystem image and import the contents of the tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then optionally tag it. + Create an empty filesystem image and import the contents of the + tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then + optionally tag it. + + -c, --change=[] Apply specified Dockerfile instructions while importing the image URLs must start with `http` and point to a single file archive (.tar, .tar.gz, .tgz, .bzip, .tar.xz, or .txz) containing a root filesystem. If you would like to import from a local directory or archive, you can use the `-` parameter to take the data from `STDIN`. +The `--change` option will apply `Dockerfile` instructions to the image +that is created. +Supported `Dockerfile` instructions: `CMD`, `ENTRYPOINT`, `ENV`, `EXPOSE`, +`ONBUILD`, `USER`, `VOLUME`, `WORKDIR` + #### Examples **Import from a remote location:** @@ -1177,6 +1275,10 @@ Import to docker via pipe and `STDIN`. $ sudo tar -c . | sudo docker import - exampleimagedir +**Import from a local directory with new configurations:** + + $ sudo tar -c . | sudo docker import --change "ENV DEBUG true" - exampleimagedir + Note the `sudo` in this example – you must preserve the ownership of the files (especially root ownership) during the archiving with tar. If you are not root (or the sudo command) when you @@ -1209,9 +1311,13 @@ For example: Debug mode (client): true Fds: 10 Goroutines: 9 + System Time: Tue Mar 10 18:38:57 UTC 2015 EventsListeners: 0 Init Path: /usr/bin/docker Docker Root Dir: /var/lib/docker + Http Proxy: http://test:test@localhost:8080 + Https Proxy: https://test:test@localhost:8080 + No Proxy: 9.81.1.160 Username: svendowideit Registry: [https://index.docker.io/v1/] Labels: @@ -1228,7 +1334,7 @@ ensure we know how your setup is configured. Return low-level information on a container or image - -f, --format="" Format the output using the given go template. + -f, --format="" Format the output using the given go template By default, this will render all results in a JSON array. If a format is specified, the given template will be executed for each result. @@ -1252,6 +1358,10 @@ straightforward manner. $ sudo docker inspect --format='{{.NetworkSettings.MacAddress}}' $INSTANCE_ID +**Get an instance's log path:** + + $ sudo docker inspect --format='{{.LogPath}}' $INSTANCE_ID + **List All Port Bindings:** One can loop over arrays and maps in the results to produce simple text @@ -1321,7 +1431,8 @@ Restores both images and tags. Usage: docker login [OPTIONS] [SERVER] - Register or log in to a Docker registry server, if no server is specified "https://index.docker.io/v1/" is the default. + Register or log in to a Docker registry server, if no server is + specified "https://index.docker.io/v1/" is the default. -e, --email="" Email -p, --password="" Password @@ -1337,7 +1448,8 @@ adding the server name. Usage: docker logout [SERVER] - Log out from a Docker registry, if no server is specified "https://index.docker.io/v1/" is the default. + Log out from a Docker registry, if no server is + specified "https://index.docker.io/v1/" is the default. For example: @@ -1351,7 +1463,10 @@ For example: -f, --follow=false Follow log output -t, --timestamps=false Show timestamps - --tail="all" Output the specified number of lines at the end of logs (defaults to all logs) + --tail="all" Number of lines to show from the end of the logs + +NOTE: this command is available only for containers with `json-file` logging +driver. The `docker logs` command batch-retrieves logs present at the time of execution. @@ -1368,7 +1483,7 @@ nano-second part of the timestamp will be padded with zero when necessary. ## pause - Usage: docker pause CONTAINER + Usage: docker pause CONTAINER [CONTAINER...] Pause all processes within a container @@ -1386,7 +1501,8 @@ for further details. Usage: docker port CONTAINER [PRIVATE_PORT[/PROTO]] - List port mappings for the CONTAINER, or lookup the public-facing port that is NAT-ed to the PRIVATE_PORT + List port mappings for the CONTAINER, or lookup the public-facing port that is + NAT-ed to the PRIVATE_PORT You can find out all the ports mapped by not specifying a `PRIVATE_PORT`, or just a specific mapping: @@ -1404,58 +1520,34 @@ just a specific mapping: $ sudo docker port test 7890 0.0.0.0:4321 -## pause - - Usage: docker pause CONTAINER - - Pause all processes within a container - -The `docker pause` command uses the cgroups freezer to suspend all processes in -a container. Traditionally when suspending a process the `SIGSTOP` signal is -used, which is observable by the process being suspended. With the cgroups freezer -the process is unaware, and unable to capture, that it is being suspended, -and subsequently resumed. - -See the -[cgroups freezer documentation](https://www.kernel.org/doc/Documentation/cgroups/freezer-subsystem.txt) -for further details. - -## rename - - Usage: docker rename OLD_NAME NEW_NAME - - rename a existing container to a NEW_NAME - -The `docker rename` command allows the container to be renamed to a different name. - ## ps Usage: docker ps [OPTIONS] List containers - -a, --all=false Show all containers. Only running containers are shown by default. - --before="" Show only container created before Id or Name, include non-running ones. - -f, --filter=[] Provide filter values. Valid filters: - exited= - containers with exit code of - status=(restarting|running|paused|exited) - -l, --latest=false Show only the latest created container, include non-running ones. - -n=-1 Show n last created containers, include non-running ones. + -a, --all=false Show all containers (default shows just running) + --before="" Show only container created before Id or Name + -f, --filter=[] Filter output based on conditions provided + -l, --latest=false Show the latest created container, include non-running + -n=-1 Show n last created containers, include non-running --no-trunc=false Don't truncate output -q, --quiet=false Only display numeric IDs -s, --size=false Display total file sizes - --since="" Show only containers created since Id or Name, include non-running ones. + --since="" Show created since Id or Name, include non-running Running `docker ps --no-trunc` showing 2 linked containers. $ sudo docker ps - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - f7ee772232194fcc088c6bdec6ea09f7b3f6c54d53934658164b8602d7cd4744 ubuntu:12.04 bash 17 seconds ago Up 16 seconds webapp - d0963715a061c7c7b7cc80b2646da913a959fbf13e80a971d4a60f6997a2f595 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp + d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db `docker ps` will show only running containers by default. To see all containers: `docker ps -a` +`docker ps` will group exposed ports into a single range if possible. E.g., a container that exposes TCP ports `100, 101, 102` will display `100-102/tcp` in the `PORTS` column. + #### Filtering The filtering flag (`-f` or `--filter)` format is a `key=value` pair. If there is more @@ -1498,11 +1590,14 @@ To download a particular image, or set of images (i.e., a repository), use `docker pull`: $ sudo docker pull debian - # will pull the debian:latest image, its intermediate layers - # and any aliases of the same id + # will pull the debian:latest image and its intermediate layers $ sudo docker pull debian:testing # will pull the image named debian:testing and any intermediate # layers it is based on. + $ sudo docker pull debian@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf + # will pull the image from the debian repository with the digest + # sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf + # and any intermediate layers it is based on. # (Typically the empty `scratch` image, a MAINTAINER layer, # and the un-tarred base). $ sudo docker pull --all-tags centos @@ -1520,13 +1615,21 @@ use `docker pull`: Use `docker push` to share your images to the [Docker Hub](https://hub.docker.com) registry or to a self-hosted one. +## rename + + Usage: docker rename OLD_NAME NEW_NAME + + rename a existing container to a NEW_NAME + +The `docker rename` command allows the container to be renamed to a different name. + ## restart Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...] Restart a running container - -t, --time=10 Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default is 10 seconds. + -t, --time=10 Seconds to wait for stop before killing the container ## rm @@ -1535,7 +1638,7 @@ registry or to a self-hosted one. Remove one or more containers -f, --force=false Force the removal of a running container (uses SIGKILL) - -l, --link=false Remove the specified link and not the underlying container + -l, --link=false Remove the specified link -v, --volumes=false Remove the volumes associated with the container #### Examples @@ -1574,9 +1677,9 @@ deleted. #### Removing tagged images -Images can be removed either by their short or long IDs, or their image -names. If an image has more than one name, each of them needs to be -removed before the image is removed. +You can remove an image using its short or long ID, its tag, or its digest. If +an image has one or more tag or digest reference, you must remove all of them +before the image is removed. $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE @@ -1585,74 +1688,82 @@ removed before the image is removed. test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi fd484f19954f - Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories + Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force 2013/12/11 05:47:16 Error: failed to remove one or more images $ sudo docker rmi test1 - Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 + Untagged: test1:latest $ sudo docker rmi test2 - Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 + Untagged: test2:latest $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi test - Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 + Untagged: test:latest Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 +An image pulled by digest has no tag associated with it: + + $ sudo docker images --digests + REPOSITORY TAG DIGEST IMAGE ID CREATED VIRTUAL SIZE + localhost:5000/test/busybox sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 4986bf8c1536 9 weeks ago 2.43 MB + +To remove an image using its digest: + + $ sudo docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf + Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf + Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125 + Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2 + Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b + ## run Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container - -a, --attach=[] Attach to STDIN, STDOUT or STDERR. + -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custom host-to-IP mapping (host:ip) -c, --cpu-shares=0 CPU shares (relative weight) --cap-add=[] Add Linux capabilities --cap-drop=[] Drop Linux capabilities --cidfile="" Write the container ID to the file - --cpuset="" CPUs in which to allow execution (0-3, 0,1) - -d, --detach=false Detached mode: run the container in the background and print the new container ID - --device=[] Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) + --cpuset-cpus="" CPUs in which to allow execution (0-3, 0,1) + -d, --detach=false Run container in background and print container ID + --device=[] Add a host device to the container --dns=[] Set custom DNS servers - --dns-search=[] Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) + --dns-search=[] Set custom DNS search domains -e, --env=[] Set environment variables --entrypoint="" Overwrite the default ENTRYPOINT of the image - --env-file=[] Read in a line delimited file of environment variables - --expose=[] Expose a port or a range of ports (e.g. --expose=3300-3310) from the container without publishing it to your host + --env-file=[] Read in a file of environment variables + --expose=[] Expose a port or a range of ports -h, --hostname="" Container host name + --help=false Print usage -i, --interactive=false Keep STDIN open even if not attached - --ipc="" Default is to create a private IPC namespace (POSIX SysV IPC) for the container - 'container:': reuses another container shared memory, semaphores and message queues - 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. - --link=[] Add link to another container in the form of name:alias - --lxc-conf=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" - -m, --memory="" Memory limit (format: , where unit = b, k, m or g) - -memory-swap="" Total memory usage (memory + swap), set '-1' to disable swap (format: , where unit = b, k, m or g) + --ipc="" IPC namespace to use + --link=[] Add link to another container + --log-driver="" Logging driver for container + --lxc-conf=[] Add custom lxc options + -m, --memory="" Memory limit + -l, --label=[] Set metadata on the container (e.g., --label=com.example.key=value) + --label-file=[] Read in a file of labels (EOL delimited) --mac-address="" Container MAC address (e.g. 92:d0:c6:0a:29:33) + --memory-swap="" Total memory (memory + swap), '-1' to disable swap --name="" Assign a name to the container --net="bridge" Set the Network mode for the container - 'bridge': creates a new network stack for the container on the docker bridge - 'none': no networking for this container - 'container:': reuses another container network stack - 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. - -P, --publish-all=false Publish all exposed ports to random ports on the host interfaces - -p, --publish=[] Publish a container's port to the host - format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort - Both hostPort and containerPort can be specified as a range of ports. - When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. (e.g., `-p 1234-1236:1234-1236/tcp`) - (use 'docker port' to see the actual mapping) - --pid=host 'host': use the host PID namespace inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. + -P, --publish-all=false Publish all exposed ports to random ports + -p, --publish=[] Publish a container's port(s) to the host + --pid="" PID namespace to use --privileged=false Give extended privileges to this container - --read-only=false Mount the container's root filesystem as read only - --restart="" Restart policy to apply when a container exits (no, on-failure[:max-retry], always) - --rm=false Automatically remove the container when it exits (incompatible with -d) + --read-only=false Mount the container's root filesystem as read only + --restart="no" Restart policy (no, on-failure[:max-retry], always) + --rm=false Automatically remove the container when it exits --security-opt=[] Security Options - --sig-proxy=true Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. + --sig-proxy=true Proxy received signals to the process -t, --tty=false Allocate a pseudo-TTY - -u, --user="" Username or UID - -v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container) + -u, --user="" Username or UID (format: [:]) + -v, --volume=[] Bind mount a volume --volumes-from=[] Mount volumes from the specified container(s) -w, --workdir="" Working directory inside the container @@ -1736,7 +1847,7 @@ folder before starting your container. $ sudo docker run --read-only -v /icanwrite busybox touch /icanwrite here -Volumes can be used in combination with `--read-only` to control where +Volumes can be used in combination with `--read-only` to control where a container writes files. The `--read-only` flag mounts the container's root filesystem as read only prohibiting writes to locations other than the specified volumes for the container. @@ -1766,7 +1877,7 @@ ports in Docker. This sets environmental variables in the container. For illustration all three flags are shown here. Where `-e`, `--env` take an environment variable and value, or if no `=` is provided, then that variable's current value is passed -through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` in the container). +through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` in the container). When no `=` is provided and that variable is not defined in the client's environment then that variable will be removed from the container's list of environment variables. @@ -1807,8 +1918,39 @@ An example of a file passed with `--env-file` $ sudo docker run --name console -t -i ubuntu bash -This will create and run a new container with the container name being -`console`. +A label is a a `key=value` pair that applies metadata to a container. To label a container with two labels: + + $ sudo docker run -l my-label --label com.example.foo=bar ubuntu bash + +The `my-label` key doesn't specify a value so the label defaults to an empty +string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). + +The `key=value` must be unique to avoid overwriting the label value. If you +specify labels with identical keys but different values, each subsequent value +overwrites the previous. Docker uses the last `key=value` you supply. + +Use the `--label-file` flag to load multiple labels from a file. Delimit each +label in the file with an EOL mark. The example below loads labels from a +labels file in the current directory: + + $ sudo docker run --label-file ./labels ubuntu bash + +The label-file format is similar to the format for loading environment +variables. (Unlike environment variables, labels are not visislbe to processes +running inside a container.) The following example illustrates a label-file +format: + + com.example.label1="a label" + + # this is a comment + com.example.label2=another\ label + com.example.label3 + +You can load multiple label-files by supplying multiple `--label-file` flags. + +For additional information on working with labels, see [*Labels - custom +metadata in Docker*](/userguide/labels-custom-metadata/) in the Docker User +Guide. $ sudo docker run --link /redis:redis --name console ubuntu bash @@ -1881,7 +2023,7 @@ flag: fdisk: unable to open /dev/xvdc: Operation not permitted ``` -**Note:** +> **Note:** > `--device` cannot be safely used with ephemeral devices. Block devices that > may be removed should not be added to untrusted containers with `--device`. @@ -1918,41 +2060,56 @@ application change: #### Restart Policies -Using the `--restart` flag on Docker run you can specify a restart policy for -how a container should or should not be restarted on exit. +Use Docker's `--restart` to specify a container's *restart policy*. A restart +policy controls whether the Docker daemon restarts a container after exit. +Docker supports the following restart policies: -An ever increasing delay (double the previous delay, starting at 100 milliseconds) -is added before each restart to prevent flooding the server. This means the daemaon -will wait for 100 mS, then 200 mS, 400, 800, 1600, and so on until either the -`on-failure` limit is hit, or when you `docker stop` or even `docker rm -f` -the container. - -When a restart policy is active on a container, it will be shown in `docker ps` -as either `Up` or `Restarting` in `docker ps`. It can also be useful to use -`docker events` to see the restart policy in effect. - -** no ** - Do not restart the container when it exits. - -** on-failure ** - Restart the container only if it exits with a non zero exit status. - -** always ** - Always restart the container regardless of the exit status. - -You can also specify the maximum amount of times Docker will try to -restart the container when using the ** on-failure ** policy. The -default is that Docker will try forever to restart the container. + + + + + + + + + + + + + + + + + + + + + +
    PolicyResult
    no + Do not automatically restart the container when it exits. This is the + default. +
    + + on-failure[:max-retries] + + + Restart only if the container exits with a non-zero exit status. + Optionally, limit the number of restart retries the Docker + daemon attempts. +
    always + Always restart the container regardless of the exit status. + When you specify always, the Docker daemon will try to restart + the container indefinitely. +
    $ sudo docker run --restart=always redis -This will run the `redis` container with a restart policy of ** always ** so that if -the container exits, Docker will restart it. +This will run the `redis` container with a restart policy of **always** +so that if the container exits, Docker will restart it. - $ sudo docker run --restart=on-failure:10 redis - -This will run the `redis` container with a restart policy of ** -on-failure ** and a maximum restart count of 10. If the `redis` -container exits with a non-zero exit status more than 10 times in a row -Docker will abort trying to restart the container. Providing a maximum -restart limit is only valid for the ** on-failure ** policy. +More detailed information on restart policies can be found in the +[Restart Policies (--restart)](/reference/run/#restart-policies-restart) section +of the Docker run reference page. ### Adding entries to a container hosts file @@ -1970,13 +2127,38 @@ You can add other hosts into a container's `/etc/hosts` file by using one or mor round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms ``` -> **Note:** -> Sometimes you need to connect to the Docker host, which means getting the IP -> address of the host. You can use the following shell commands to simplify this -> process: -> -> $ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print \$2 }'" -> $ docker run --add-host=docker:$(hostip) --rm -it debian +Sometimes you need to connect to the Docker host from within your +container. To enable this, pass the Docker host's IP address to +the container using the `--add-host` flag. To find the host's address, +use the `ip addr show` command. + +The flags you pass to `ip addr show` depend on whether you are +using IPv4 or IPv6 networking in your containers. Use the following +flags for IPv4 address retrieval for a network device named `eth0`: + + $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` + $ docker run --add-host=docker:${HOSTIP} --rm -it debian + +For IPv6 use the `-6` flag instead of the `-4` flag. For other network +devices, replace `eth0` with the correct device name (for example `docker0` +for the bridge device). + +### Setting ulimits in a container + +Since setting `ulimit` settings in a container requires extra privileges not +available in the default container, you can set these using the `--ulimit` flag. +`--ulimit` is specified with a soft and hard limit as such: +`=[:]`, for example: + +``` + $ docker run --ulimit nofile=1024:1024 --rm debian ulimit -n + 1024 +``` + +>**Note:** +> If you do not provide a `hard limit`, the `soft limit` will be used for both +values. If no `ulimits` are set, they will be inherited from the default `ulimits` +set on the daemon. ## save @@ -2021,28 +2203,26 @@ See [*Find Public Images on Docker Hub*]( /userguide/dockerrepos/#searching-for-images) for more details on finding shared images from the command line. -> **Note:** -> Search queries will only return up to 25 results +> **Note:** +> Search queries will only return up to 25 results ## start Usage: docker start [OPTIONS] CONTAINER [CONTAINER...] - Restart a stopped container + Start one or more stopped containers - -a, --attach=false Attach container's STDOUT and STDERR and forward all signals to the process + -a, --attach=false Attach STDOUT/STDERR and forward signals -i, --interactive=false Attach container's STDIN ## stats - Usage: docker stats [CONTAINERS] + Usage: docker stats CONTAINER [CONTAINER...] Display a live stream of one or more containers' resource usage statistics --help=false Print usage -> **Note**: this functionality currently only works when using the *libcontainer* exec-driver. - Running `docker stats` on multiple containers $ sudo docker stats redis1 redis2 @@ -2051,7 +2231,7 @@ Running `docker stats` on multiple containers redis2 0.07% 2.746 MiB/64 MiB 4.29% 1.266 KiB/648 B -The `docker stats` command will only return a live stream of data for running +The `docker stats` command will only return a live stream of data for running containers. Stopped containers will not return any data. > **Note:** @@ -2061,9 +2241,10 @@ containers. Stopped containers will not return any data. Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] - Stop a running container by sending SIGTERM and then SIGKILL after a grace period + Stop a running container by sending SIGTERM and then SIGKILL after a + grace period - -t, --time=10 Number of seconds to wait for the container to stop before killing it. Default is 10 seconds. + -t, --time=10 Seconds to wait for stop before killing it The main process inside the container will receive `SIGTERM`, and after a grace period, `SIGKILL`. @@ -2088,7 +2269,7 @@ them to [*Share Images via Repositories*]( ## unpause - Usage: docker unpause CONTAINER + Usage: docker unpause CONTAINER [CONTAINER...] Unpause all processes within a container @@ -2105,8 +2286,21 @@ for further details. Show the Docker version information. -Show the Docker version, API version, Git commit, and Go version of -both Docker client and daemon. +Show the Docker version, API version, Git commit, Go version and OS/architecture +of both Docker client and daemon. Example use: + + $ sudo docker version + Client version: 1.5.0 + Client API version: 1.17 + Go version (client): go1.4.1 + Git commit (client): a8a31ef + OS/Arch (client): darwin/amd64 + Server version: 1.5.0 + Server API version: 1.17 + Go version (server): go1.4.1 + Git commit (server): a8a31ef + OS/Arch (server): linux/amd64 + ## wait diff --git a/docs/sources/reference/run.md b/docs/sources/reference/run.md index ca7480beb8..3c9c6a68d6 100644 --- a/docs/sources/reference/run.md +++ b/docs/sources/reference/run.md @@ -2,6 +2,12 @@ page_title: Docker run reference page_description: Configure containers at runtime page_keywords: docker, run, configure, runtime + + # Docker run reference **Docker runs processes in isolated containers**. When an operator @@ -18,7 +24,7 @@ other `docker` command. The basic `docker run` command takes this form: - $ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] + $ sudo docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] To learn how to interpret the types of `[OPTIONS]`, see [*Option types*](/reference/commandline/cli/#option-types). @@ -50,8 +56,9 @@ following options. - [Container Identification](#container-identification) - [Name (--name)](#name-name) - [PID Equivalent](#pid-equivalent) - - [IPC Settings](#ipc-settings) + - [IPC Settings (--ipc)](#ipc-settings-ipc) - [Network Settings](#network-settings) + - [Restart Policies (--restart)](#restart-policies-restart) - [Clean Up (--rm)](#clean-up-rm) - [Runtime Constraints on CPU and Memory](#runtime-constraints-on-cpu-and-memory) - [Runtime Privilege, Linux Capabilities, and LXC Configuration](#runtime-privilege-linux-capabilities-and-lxc-configuration) @@ -95,9 +102,10 @@ specify to which of the three standard streams (`STDIN`, `STDOUT`, $ sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash For interactive processes (like a shell), you must use `-i -t` together in -order to allocate a tty for the container process. Specifying `-t` is however -forbidden when the client standard output is redirected or pipe, such as in: -`echo test | docker run -i busybox cat`. +order to allocate a tty for the container process. `-i -t` is often written `-it` +as you'll see in later examples. Specifying `-t` is forbidden when the client +standard output is redirected or piped, such as in: +`echo test | sudo docker run -i busybox cat`. ## Container identification @@ -126,16 +134,23 @@ programs might write out their process ID to a file (you've seen them as PID files): --cidfile="": Write the container ID to the file - + ### Image[:tag] While not strictly a means of identifying a container, you can specify a version of an image you'd like to run the container with by adding `image[:tag]` to the command. For example, `docker run ubuntu:14.04`. -## PID Settings +### Image[@digest] + +Images using the v2 or later image format have a content-addressable identifier +called a digest. As long as the input used to generate the image is unchanged, +the digest value is predictable and referenceable. + +## PID Settings (--pid) --pid="" : Set the PID (Process) Namespace mode for the container, 'host': use the host's PID namespace inside the container + By default, all containers have the PID namespace enabled. PID namespace provides separation of processes. The PID Namespace removes the @@ -153,13 +168,16 @@ within the container. This command would allow you to use `strace` inside the container on pid 1234 on the host. -## IPC Settings +## IPC Settings (--ipc) + --ipc="" : Set the IPC mode for the container, - 'container:': reuses another container's IPC namespace - 'host': use the host's IPC namespace inside the container + 'container:': reuses another container's IPC namespace + 'host': use the host's IPC namespace inside the container + By default, all containers have the IPC namespace enabled. -IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. +IPC (POSIX/SysV IPC) namespace provides separation of named shared memory +segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared @@ -173,10 +191,10 @@ of the containers. --dns=[] : Set custom dns servers for the container --net="bridge" : Set the Network mode for the container - 'bridge': creates a new network stack for the container on the docker bridge - 'none': no networking for this container - 'container:': reuses another container network stack - 'host': use the host network stack inside the container + 'bridge': creates a new network stack for the container on the docker bridge + 'none': no networking for this container + 'container:': reuses another container network stack + 'host': use the host network stack inside the container --add-host="" : Add a line to /etc/hosts (host:IP) --mac-address="" : Sets the container's Ethernet device's MAC address @@ -195,10 +213,41 @@ explicitly by providing a MAC via the `--mac-address` parameter (format: Supported networking modes are: -* none - no networking in the container -* bridge - (default) connect the container to the bridge via veth interfaces -* host - use the host's network stack inside the container. Note: This gives the container full access to local system services such as D-bus and is therefore considered insecure. -* container - use another container's network stack + + + + + + + + + + + + + + + + + + + + + + + + + +
    ModeDescription
    none + No networking in the container. +
    bridge (default) + Connect the container to the bridge via veth interfaces. +
    host + Use the host's network stack inside the container. +
    container:<name|id> + Use the network stack of another container, specified via + its *name* or *id*. +
    #### Mode: none @@ -226,6 +275,9 @@ container. The container's hostname will match the hostname on the host system. Publishing ports and linking to other containers will not work when sharing the host's network stack. +> **Note**: `--net="host"` gives the container full access to local system +> services such as D-bus and is therefore considered insecure. + #### Mode: container With the networking mode set to `container` a container will share the @@ -238,7 +290,7 @@ running the `redis-cli` command and connecting to the Redis server over the $ sudo docker run -d --name redis example/redis --bind 127.0.0.1 $ # use the redis container's network stack to access localhost - $ sudo docker run --rm -ti --net container:redis example/redis-cli -h 127.0.0.1 + $ sudo docker run --rm -it --net container:redis example/redis-cli -h 127.0.0.1 ### Managing /etc/hosts @@ -246,7 +298,7 @@ Your container will have lines in `/etc/hosts` which define the hostname of the container itself as well as `localhost` and a few other common things. The `--add-host` flag can be used to add additional lines to `/etc/hosts`. - $ /docker run -ti --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts + $ sudo docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts 172.17.0.22 09d03f76bf2c fe00::0 ip6-localnet ff00::0 ip6-mcastprefix @@ -256,6 +308,99 @@ container itself as well as `localhost` and a few other common things. The ::1 localhost ip6-localhost ip6-loopback 86.75.30.9 db-static +## Restart policies (--restart) + +Using the `--restart` flag on Docker run you can specify a restart policy for +how a container should or should not be restarted on exit. + +When a restart policy is active on a container, it will be shown as either `Up` +or `Restarting` in [`docker ps`](/reference/commandline/cli/#ps). It can also be +useful to use [`docker events`](/reference/commandline/cli/#events) to see the +restart policy in effect. + +Docker supports the following restart policies: + + + + + + + + + + + + + + + + + + + + + + +
    PolicyResult
    no + Do not automatically restart the container when it exits. This is the + default. +
    + + on-failure[:max-retries] + + + Restart only if the container exits with a non-zero exit status. + Optionally, limit the number of restart retries the Docker + daemon attempts. +
    always + Always restart the container regardless of the exit status. + When you specify always, the Docker daemon will try to restart + the container indefinitely. +
    + +An ever increasing delay (double the previous delay, starting at 100 +milliseconds) is added before each restart to prevent flooding the server. +This means the daemon will wait for 100 ms, then 200 ms, 400, 800, 1600, +and so on until either the `on-failure` limit is hit, or when you `docker stop` +or `docker rm -f` the container. + +If a container is succesfully restarted (the container is started and runs +for at least 10 seconds), the delay is reset to its default value of 100 ms. + +You can specify the maximum amount of times Docker will try to restart the +container when using the **on-failure** policy. The default is that Docker +will try forever to restart the container. The number of (attempted) restarts +for a container can be obtained via [`docker inspect`]( +/reference/commandline/cli/#inspect). For example, to get the number of restarts +for container "my-container"; + + $ sudo docker inspect -f "{{ .RestartCount }}" my-container + # 2 + +Or, to get the last time the container was (re)started; + + $ docker inspect -f "{{ .State.StartedAt }}" my-container + # 2015-03-04T23:47:07.691840179Z + +You cannot set any restart policy in combination with +["clean up (--rm)"](#clean-up-rm). Setting both `--restart` and `--rm` +results in an error. + +###Examples + + $ sudo docker run --restart=always redis + +This will run the `redis` container with a restart policy of **always** +so that if the container exits, Docker will restart it. + + $ sudo docker run --restart=on-failure:10 redis + +This will run the `redis` container with a restart policy of **on-failure** +and a maximum restart count of 10. If the `redis` container exits with a +non-zero exit status more than 10 times in a row Docker will abort trying to +restart the container. Providing a maximum restart limit is only valid for the +**on-failure** policy. + ## Clean up (--rm) By default a container's file system persists even after the container @@ -310,30 +455,93 @@ The operator can also adjust the performance parameters of the container: -m="": Memory limit (format: , where unit = b, k, m or g) - -c=0 : CPU shares (relative weight) + -memory-swap="": Total memory limit (memory + swap, format: , where unit = b, k, m or g) + -c, --cpu-shares=0 CPU shares (relative weight) -The operator can constrain the memory available to a container easily -with `docker run -m`. If the host supports swap memory, then the `-m` -memory setting can be larger than physical RAM. +### Memory constraints -Similarly the operator can increase the priority of this container with -the `-c` option. By default, all containers run at the same priority and -get the same proportion of CPU cycles, but you can tell the kernel to -give more shares of CPU time to one or more containers when you start -them via Docker. +We have four ways to set memory usage: -The flag `-c` or `--cpu-shares` with value 0 indicates that the running -container has access to all 1024 (default) CPU shares. However, this value -can be modified to run a container with a different priority or different -proportion of CPU cycles. + + + + + + + + + + + + + + + + + + + + + + + + + +
    OptionResult
    + memory=inf, memory-swap=inf (default) + + There is no memory limit for the container. The container can use + as much memory as needed. +
    memory=L<inf, memory-swap=inf + (specify memory and set memory-swap as -1) The container is + not allowed to use more than L bytes of memory, but can use as much swap + as is needed (if the host supports swap memory). +
    memory=L<inf, memory-swap=2*L + (specify memory without memory-swap) The container is not allowed to + use more than L bytes of memory, swap *plus* memory usage is double + of that. +
    + memory=L<inf, memory-swap=S<inf, L<=S + + (specify both memory and memory-swap) The container is not allowed to + use more than L bytes of memory, swap *plus* memory usage is limited + by S. +
    -E.g., If we start three {C0, C1, C2} containers with default values -(`-c` OR `--cpu-shares` = 0) and one {C3} with (`-c` or `--cpu-shares`=512) -then C0, C1, and C2 would have access to 100% CPU shares (1024) and C3 would -only have access to 50% CPU shares (512). In the context of a time-sliced OS -with time quantum set as 100 milliseconds, containers C0, C1, and C2 will run -for full-time quantum, and container C3 will run for half-time quantum i.e 50 -milliseconds. +### CPU share constraint + +By default, all containers get the same proportion of CPU cycles. This proportion +can be modified by changing the container's CPU share weighting relative +to the weighting of all other running containers. + +To modify the proportion from the default of 1024, use the `-c` or `--cpu-shares` +flag to set the weighting to 2 or higher. + +The proportion will only apply when CPU-intensive processes are running. +When tasks in one container are idle, other containers can use the +left-over CPU time. The actual amount of CPU time will vary depending on +the number of containers running on the system. + +For example, consider three containers, one has a cpu-share of 1024 and +two others have a cpu-share setting of 512. When processes in all three +containers attempt to use 100% of CPU, the first container would receive +50% of the total CPU time. If you add a fouth container with a cpu-share +of 1024, the first container only gets 33% of the CPU. The remaining containers +receive 16.5%, 16.5% and 33% of the CPU. + +On a multi-core system, the shares of CPU time are distributed over all CPU +cores. Even if a container is limited to less than 100% of CPU time, it can +use 100% of each individual CPU core. + +For example, consider a system with more than three cores. If you start one +container `{C0}` with `-c=512` running one process, and another container +`{C1}` with `-c=1024` running two processes, this can result in the following +division of CPU shares: + + PID container CPU CPU share + 100 {C0} 0 100% of CPU0 + 101 {C1} 1 100% of CPU1 + 102 {C1} 2 100% of CPU2 ## Runtime privilege, Linux capabilities, and LXC configuration @@ -341,7 +549,7 @@ milliseconds. --cap-drop: Drop Linux capabilities --privileged=false: Give extended privileges to this container --device=[]: Allows you to run devices inside the container without the --privileged flag. - --lxc-conf=[]: (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" + --lxc-conf=[]: Add custom lxc options By default, Docker containers are "unprivileged" and cannot, for example, run a Docker daemon inside a Docker container. This is because @@ -367,22 +575,19 @@ will be accessible within the container. By default, the container will be able to `read`, `write`, and `mknod` these devices. This can be overridden using a third `:rwm` set of options to each `--device` flag: + $ sudo docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc -``` - $ sudo docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc + Command (m for help): q + $ sudo docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc + You will not be able to write the partition table. - Command (m for help): q - $ sudo docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc - You will not be able to write the partition table. + Command (m for help): q - Command (m for help): q - - $ sudo docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc + $ sudo docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc crash.... - $ sudo docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc - fdisk: unable to open /dev/xvdc: Operation not permitted -``` + $ sudo docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc + fdisk: unable to open /dev/xvdc: Operation not permitted In addition to `--privileged`, the operator can have fine grain control over the capabilities using `--cap-add` and `--cap-drop`. By default, Docker has a default @@ -438,6 +643,20 @@ familiar with using LXC directly. > you can use `--lxc-conf` to set a container's IP address, but this will not be > reflected in the `/etc/hosts` file. +## Logging drivers (--log-driver) + +You can specify a different logging driver for the container than for the daemon. + +### Logging driver: none + +Disables any logging for the container. `docker logs` won't be available with +this driver. + +### Log driver: json-file + +Default logging driver for Docker. Writes JSON messages to file. `docker logs` +command is available only for this logging driver + ## Overriding Dockerfile image defaults When a developer builds an image from a [*Dockerfile*](/reference/builder) @@ -463,7 +682,7 @@ Dockerfile instruction and how the operator can override that setting. Recall the optional `COMMAND` in the Docker commandline: - $ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] + $ sudo docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] This command is optional because the person who created the `IMAGE` may have already provided a default `COMMAND` using the Dockerfile `CMD` @@ -528,10 +747,11 @@ developer, the operator has three choices: start the server container with `-P` or `-p,` or start the client container with `--link`. If the operator uses `-P` or `-p` then Docker will make the exposed port -accessible on the host and the ports will be available to any client -that can reach the host. When using `-P`, Docker will bind the exposed -ports to a random port on the host between 49153 and 65535. To find the -mapping between the host ports and the exposed ports, use `docker port`. +accessible on the host and the ports will be available to any client that can +reach the host. When using `-P`, Docker will bind the exposed port to a random +port on the host within an *ephemeral port range* defined by +`/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host +ports and the exposed ports, use `docker port`. If the operator uses `--link` when starting the new client container, then the client container can access the exposed port via a private @@ -543,34 +763,32 @@ client container to help indicate which interface and port to use. When a new container is created, Docker will set the following environment variables automatically: - - - - +
    Variable Value
    + + + - - + - - - + + - - + - - - + + +
    VariableValue
    HOME + HOME Set based on the value of USER
    HOSTNAME +
    HOSTNAME The hostname associated with the container
    PATH + PATH Includes popular directories, such as :
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    TERM - xterm if the container is allocated a psuedo-TTY -
    TERMxterm if the container is allocated a psuedo-TTY
    @@ -606,7 +824,7 @@ container running Redis: # The redis-name container exposed port 6379 $ sudo docker ps - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4241164edf6f $ dockerfiles/redis:latest /redis-stable/src/re 5 seconds ago Up 4 seconds 6379/tcp redis-name # Note that there are no public ports exposed since we didn᾿t use -p or -P @@ -648,7 +866,7 @@ If you restart the source container (`servicename` in this case), the recipient container's `/etc/hosts` entry will be automatically updated. > **Note**: -> Unlike host entries in the `/ets/hosts` file, IP addresses stored in the +> Unlike host entries in the `/etc/hosts` file, IP addresses stored in the > environment variables are not automatically updated if the source container is > restarted. We recommend using the host entries in `/etc/hosts` to resolve the > IP address of linked containers. diff --git a/docs/sources/release-notes.md b/docs/sources/release-notes.md index e6c0ec5d49..37ae6761aa 100644 --- a/docs/sources/release-notes.md +++ b/docs/sources/release-notes.md @@ -15,6 +15,9 @@ For a complete list of patches, fixes, and other improvements, see the *New Features* +* [1.6] The Docker daemon will no longer ignore unknown commands + while processing a `Dockerfile`. Instead it will generate an error and halt + processing. * The Docker daemon has now supports for IPv6 networking between containers and on the `docker0` bridge. For more information see the [IPv6 networking reference](/articles/networking/#ipv6). @@ -22,7 +25,7 @@ For a complete list of patches, fixes, and other improvements, see the container to writing to volumes [PR# 10093](https://github.com/docker/docker/pull/10093). * A new `docker stats CONTAINERID` command has been added to allow users to view a continuously updating stream of container resource usage statistics. See the - [`stats` command line reference](/reference/commandline/cli/#stats) and the + [`stats` command line reference](/reference/commandline/cli/#stats) and the [container `stats` API reference](/reference/api/docker_remote_api_v1.17/#get-container-stats-based-on-resource-usage). **Note**: this feature is only enabled for the `libcontainer` exec-driver at this point. * Users can now specify the file to use as the `Dockerfile` by running diff --git a/docs/sources/static_files/contributors.png b/docs/sources/static_files/contributors.png new file mode 100644 index 0000000000..63c0a0c09b Binary files /dev/null and b/docs/sources/static_files/contributors.png differ diff --git a/docs/theme/mkdocs/images/docker-logo-compressed.png b/docs/sources/static_files/docker-logo-compressed.png similarity index 100% rename from docs/theme/mkdocs/images/docker-logo-compressed.png rename to docs/sources/static_files/docker-logo-compressed.png diff --git a/docs/sources/userguide/dockerizing.md b/docs/sources/userguide/dockerizing.md index 6f56a56955..cc7bc8e1c1 100644 --- a/docs/sources/userguide/dockerizing.md +++ b/docs/sources/userguide/dockerizing.md @@ -101,7 +101,7 @@ Again we can do this with the `docker run` command: $ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 -Wait what? Where's our "Hello world" Let's look at what we've run here. +Wait, what? Where's our "hello world" output? Let's look at what we've run here. It should look pretty familiar. We ran `docker run` but this time we specified a flag: `-d`. The `-d` flag tells Docker to run the container and put it in the background, to daemonize it. @@ -187,7 +187,7 @@ Excellent. Our container has been stopped. # Next steps -Now we've seen how simple it is to get started with Docker let's learn how to +Now we've seen how simple it is to get started with Docker. Let's learn how to do some more advanced tasks. Go to [Working With Containers](/userguide/usingdocker). diff --git a/docs/sources/userguide/dockerlinks.md b/docs/sources/userguide/dockerlinks.md index f35f61ecfc..79ba17900e 100644 --- a/docs/sources/userguide/dockerlinks.md +++ b/docs/sources/userguide/dockerlinks.md @@ -11,7 +11,7 @@ applications running inside Docker containers. In this section, we'll briefly re connecting via a network port and then we'll introduce you to another method of access: container linking. -## Network port mapping refresher +## Connect using Network port mapping In [the Using Docker section](/userguide/usingdocker), you created a container that ran a Python Flask application: @@ -25,10 +25,10 @@ container that ran a Python Flask application: > Docker can have a variety of network configurations. You can see more > information on Docker networking [here](/articles/networking/). -When that container was created, the `-P` flag was used to automatically map any -network ports inside it to a random high port from the range 49153 -to 65535 on our Docker host. Next, when `docker ps` was run, you saw that -port 5000 in the container was bound to port 49155 on the host. +When that container was created, the `-P` flag was used to automatically map +any network port inside it to a random high port within an *ephemeral port +range* on your Docker host. Next, when `docker ps` was run, you saw that port +5000 in the container was bound to port 49155 on the host. $ sudo docker ps nostalgic_morse CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES @@ -72,7 +72,7 @@ configurations. For example, if you've bound the container port to the > **Note:** > The `-p` flag can be used multiple times to configure multiple ports. -## Docker Container Linking +## Connect with the linking system Network port mappings are not the only way Docker containers can connect to one another. Docker also has a linking system that allows you to link @@ -81,7 +81,7 @@ When containers are linked, information about a source container can be sent to recipient container. This allows the recipient to see selected data describing aspects of the source container. -## Container naming +### The importance of naming To establish links, Docker relies on the names of your containers. You've already seen that each container you create has an automatically @@ -121,7 +121,7 @@ You can also use `docker inspect` to return the container's name. > flag with the `docker run` command. This will delete the container > immediately after it is stopped. -## Container Linking +## Communication across links Links allow containers to discover each other and securely transfer information about one container to another container. When you set up a link, you create a conduit between a @@ -176,41 +176,64 @@ recipient container in two ways: ### Environment Variables -When two containers are linked, Docker will set some environment variables -in the target container to enable programmatic discovery of information -related to the source container. +Docker creates several environment variables when you link containers. Docker +automatically creates environment variables in the target container based on +the `--link` parameters. It will also expose all environment variables +originating from Docker from the source container. These include variables from: -First, Docker will set an `_NAME` environment variable specifying the -alias of each target container that was given in a `--link` parameter. So, -for example, if a new container called `web` is being linked to a database -container called `db` via `--link db:webdb` then in the `web` container -would be `WEBDB_NAME=/web/webdb`. +* the `ENV` commands in the source container's Dockerfile +* the `-e`, `--env` and `--env-file` options on the `docker run` +command when the source container is started -Docker will then also define a set of environment variables for each -port that is exposed by the source container. The pattern followed is: +These environment variables enable programmatic discovery from within the +target container of information related to the source container. -* `_PORT__` will contain a URL reference to the -port. Where `` is the alias name specified in the `--link` parameter -(e.g. `webdb`), `` is the port number being exposed, and `` -is either `TCP` or `UDP`. The format of the URL will be: -`://:` -(e.g. `tcp://172.17.0.82:8080`). This URL will then be -split into the following 3 environment variables for convenience: -* `_PORT___ADDR` will contain just the IP address -from the URL (e.g. `WEBDB_PORT_8080_TCP_ADDR=172.17.0.82`). -* `_PORT___PORT` will contain just the port number -from the URL (e.g. `WEBDB_PORT_8080_TCP_PORT=8080`). -* `_PORT___PROTO` will contain just the protocol -from the URL (e.g. `WEBDB_PORT_8080_TCP_PROTO=tcp`). +> **Warning**: +> It is important to understand that *all* environment variables originating +> from Docker within a container are made available to *any* container +> that links to it. This could have serious security implications if sensitive +> data is stored in them. -If there are multiple ports exposed then the above set of environment -variables will be defined for each one. +Docker sets an `_NAME` environment variable for each target container +listed in the `--link` parameter. For example, if a new container called +`web` is linked to a database container called `db` via `--link db:webdb`, +then Docker creates a `WEBDB_NAME=/web/webdb` variable in the `web` container. -Finally, there will be an environment variable called `_PORT` that will -contain the URL of the first exposed port of the source container. -For example, `WEBDB_PORT=tcp://172.17.0.82:8080`. In this case, 'first' -is defined as the lowest numbered port that is exposed. If that port is -used for both tcp and udp, then the tcp one will be specified. +Docker also defines a set of environment variables for each port exposed by the +source container. Each variable has a unique prefix in the form: + +`_PORT__` + +The components in this prefix are: + +* the alias `` specified in the `--link` parameter (for example, `webdb`) +* the `` number exposed +* a `` which is either TCP or UDP + +Docker uses this prefix format to define three distinct environment variables: + +* The `prefix_ADDR` variable contains the IP Address from the URL, for +example `WEBDB_PORT_8080_TCP_ADDR=172.17.0.82`. +* The `prefix_PORT` variable contains just the port number from the URL for +example `WEBDB_PORT_8080_TCP_PORT=8080`. +* The `prefix_PROTO` variable contains just the protocol from the URL for +example `WEBDB_PORT_8080_TCP_PROTO=tcp`. + +If the container exposes multiple ports, an environment variable set is +defined for each one. This means, for example, if a container exposes 4 ports +that Docker creates 12 environment variables, 3 for each port. + +Additionally, Docker creates an environment variable called `_PORT`. +This variable contains the URL of the source container's first exposed port. +The 'first' port is defined as the exposed port with the lowest number. +For example, consider the `WEBDB_PORT=tcp://172.17.0.82:8080` variable. If +that port is used for both tcp and udp, then the tcp one is specified. + +Finally, Docker also exposes each Docker originated environment variable +from the source container as an environment variable in the target. For each +variable Docker creates an `_ENV_` variable in the target +container. The variable's value is set to the value Docker used when it +started the source container. Returning back to our database example, you can run the `env` command to list the specified container's environment variables. @@ -227,45 +250,49 @@ command to list the specified container's environment variables. . . . ``` -> **Note**: -> These Environment variables are only set for the first process in the -> container. Similarly, some daemons (such as `sshd`) -> will scrub them when spawning shells for connection. - -> **Note**: -> Unlike host entries in the [`/etc/hosts` file](#updating-the-etchosts-file), -> IP addresses stored in the environment variables are not automatically updated -> if the source container is restarted. We recommend using the host entries in -> `/etc/hosts` to resolve the IP address of linked containers. - You can see that Docker has created a series of environment variables with -useful information about the source `db` container. Each variable is prefixed with +useful information about the source `db` container. Each variable is prefixed +with `DB_`, which is populated from the `alias` you specified above. If the `alias` were `db1`, the variables would be prefixed with `DB1_`. You can use these environment variables to configure your applications to connect to the database on the `db` container. The connection will be secure and private; only the linked `web` container will be able to talk to the `db` container. +### Important notes on Docker environment variables + +Unlike host entries in the [`/etc/hosts` file](#updating-the-etchosts-file), +IP addresses stored in the environment variables are not automatically updated +if the source container is restarted. We recommend using the host entries in +`/etc/hosts` to resolve the IP address of linked containers. + +These environment variables are only set for the first process in the +container. Some daemons, such as `sshd`, will scrub them when spawning shells +for connection. + ### Updating the `/etc/hosts` file In addition to the environment variables, Docker adds a host entry for the source container to the `/etc/hosts` file. Here's an entry for the `web` container: - $ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash + $ sudo docker run -t -i --rm --link db:webdb training/webapp /bin/bash root@aed84ee21bde:/opt/webapp# cat /etc/hosts 172.17.0.7 aed84ee21bde . . . - 172.17.0.5 db + 172.17.0.5 webdb 6e5cdeb2d300 db You can see two relevant host entries. The first is an entry for the `web` container that uses the Container ID as a host name. The second entry uses the -link alias to reference the IP address of the `db` container. You can ping -that host now via this host name. +link alias to reference the IP address of the `db` container. In addition to +the alias you provide, the linked container's name--if unique from the alias +provided to the `--link` parameter--and the linked container's hostname will +also be added in `/etc/hosts` for the linked container's IP address. You can ping +that host now via any of these entries: root@aed84ee21bde:/opt/webapp# apt-get install -yqq inetutils-ping - root@aed84ee21bde:/opt/webapp# ping db - PING db (172.17.0.5): 48 data bytes + root@aed84ee21bde:/opt/webapp# ping webdb + PING webdb (172.17.0.5): 48 data bytes 56 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.267 ms 56 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.250 ms 56 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.256 ms diff --git a/docs/sources/userguide/dockervolumes.md b/docs/sources/userguide/dockervolumes.md index 4d5bd7247d..d533224656 100644 --- a/docs/sources/userguide/dockervolumes.md +++ b/docs/sources/userguide/dockervolumes.md @@ -21,14 +21,21 @@ Docker. A *data volume* is a specially-designated directory within one or more containers that bypasses the [*Union File -System*](/terms/layer/#union-file-system) to provide several useful features for -persistent or shared data: +System*](/terms/layer/#union-file-system). Data volumes provide several +useful features for persistent or shared data: -- Volumes are initialized when a container is created -- Data volumes can be shared and reused between containers -- Changes to a data volume are made directly -- Changes to a data volume will not be included when you update an image -- Volumes persist until no containers use them +- Volumes are initialized when a container is created. If the container's + base image contains data at the specified mount point, that data is + copied into the new volume. +- Data volumes can be shared and reused among containers. +- Changes to a data volume are made directly. +- Changes to a data volume will not be included when you update an image. +- Data volumes persist even if the container itself is deleted. + +Data volumes are designed to persist data, independent of the container's life +cycle. Docker therefore *never* automatically delete volumes when you remove +a container, nor will it "garbage collect" volumes that are no longer +referenced by a container. ### Adding a data volume @@ -117,7 +124,7 @@ Let's create a new named container with a volume to share. While this container doesn't run an application, it reuses the `training/postgres` image so that all containers are using layers in common, saving disk space. - $ sudo docker create -v /dbdata --name dbdata training/postgres + $ sudo docker create -v /dbdata --name dbdata training/postgres /bin/true You can then use the `--volumes-from` flag to mount the `/dbdata` volume in another container. @@ -127,6 +134,11 @@ And another: $ sudo docker run -d --volumes-from dbdata --name db2 training/postgres +In this case, if the `postgres` image contained a directory called `/dbdata` +then mounting the volumes from the `dbdata` container hides the +`/dbdata` files from the `postgres` image. The result is only the files +from the `dbdata` container are visible. + You can use multiple `--volumes-from` parameters to bring together multiple data volumes from multiple containers. @@ -141,6 +153,14 @@ be deleted. To delete the volume from disk, you must explicitly call `docker rm -v` against the last container with a reference to the volume. This allows you to upgrade, or effectively migrate data volumes between containers. +> **Note:** Docker will not warn you when removing a container *without* +> providing the `-v` option to delete its volumes. If you remove containers +> without using the `-v` option, you may end up with "dangling" volumes; +> volumes that are no longer referenced by a container. +> Dangling volumes are difficult to get rid of and can take up a large amount +> of disk space. We're working on improving volume management and you can check +> progress on this in [pull request #8484](https://github.com/docker/docker/pull/8484) + ## Backup, restore, or migrate data volumes Another useful function we can perform with volumes is use them for diff --git a/docs/sources/userguide/index.md b/docs/sources/userguide/index.md index 64bd3d16f3..d0dbdb84ee 100644 --- a/docs/sources/userguide/index.md +++ b/docs/sources/userguide/index.md @@ -80,6 +80,31 @@ Trusted Builds and private repositories. Go to [Working with Docker Hub](/userguide/dockerrepos). +## Docker Compose + +Docker Compose allows you to define a application's components -- their containers, +configuration, links and volumes -- in a single file. Then a single command +will set everything up and start your application running. + +Go to [Docker Compose user guide](/compose/). + +## Docker Machine + +Docker Machine helps you get Docker Engines up and running quickly. Machine +can set up hosts for Docker Engines on your computer, on cloud providers, +and/or in your data center, and then configure your Docker client to securely +talk to them. + +Go to [Docker Machine user guide](/machine/). + +## Docker Swarm + +Docker Swarm pools several Docker Engines together and exposes them as a single +virtual Docker Engine. It serves the standard Docker API, so any tool that already +works with Docker can now transparently scale up to multiple hosts. + +Go to [Docker Swarm user guide](/swarm/). + ## Getting help * [Docker homepage](http://www.docker.com/) diff --git a/docs/sources/userguide/labels-custom-metadata.md b/docs/sources/userguide/labels-custom-metadata.md new file mode 100644 index 0000000000..7cf25c0609 --- /dev/null +++ b/docs/sources/userguide/labels-custom-metadata.md @@ -0,0 +1,190 @@ +page_title: Apply custom metadata +page_description: Learn how to work with custom metadata in Docker, using labels. +page_keywords: Usage, user guide, labels, metadata, docker, documentation, examples, annotating + +# Apply custom metadata + +You can apply metadata to your images, containers, or daemons via +labels. Metadata can serve a wide range of uses. Use labels to add notes or +licensing information to an image or to identify a host. + +A label is a `` / `` pair. Docker stores the label values as +*strings*. You can specify multiple labels but each `` / `` must be +unique to avoid overwriting. If you specify the same `key` several times but with +different values, newer labels overwrite previous labels. Docker uses +the last `key=value` you supply. + +>**Note:** Support for daemon-labels was added in Docker 1.4.1. Labels on +>containers and images are new in Docker 1.6.0 + +## Label keys (namespaces) + +Docker puts no hard restrictions on the label `key` you. However, labels with +simple keys can conflict. For example, you can categorize your images by using a +chip "architecture" label: + + LABEL architecture="amd64" + + LABEL architecture="ARMv7" + +But a user can label images by building architectural style: + + LABEL architecture="Art Nouveau" + +To prevent naming conflicts, Docker namespaces label keys using a reverse domain +notation. Use the following guidelines to name your keys: + +- All (third-party) tools should prefix their keys with the + reverse DNS notation of a domain controlled by the author. For + example, `com.example.some-label`. + +- The `com.docker.*`, `io.docker.*` and `com.dockerproject.*` namespaces are + reserved for Docker's internal use. + +- Keys should only consist of lower-cased alphanumeric characters, + dots and dashes (for example, `[a-z0-9-.]`) + +- Keys should start *and* end with an alpha numeric character + +- Keys may not contain consecutive dots or dashes. + +- Keys *without* namespace (dots) are reserved for CLI use. This allows end- + users to add metadata to their containers and images without having to type + cumbersome namespaces on the command-line. + + +These are guidelines and Docker does not *enforce* them. Failing following these +guidelines can result in conflicting labels. If you're building a tool that uses +labels, you *should* use namespaces for your label keys. + + +## Store structured data in labels + +Label values can contain any data type that can be stored as a string. For +example, consider this JSON: + + + { + "Description": "A containerized foobar", + "Usage": "docker run --rm example/foobar [args]", + "License": "GPL", + "Version": "0.0.1-beta", + "aBoolean": true, + "aNumber" : 0.01234, + "aNestedArray": ["a", "b", "c"] + } + +You can store this struct in a label by serializing it to a string first: + + LABEL com.example.image-specs="{\"Description\":\"A containerized foobar\",\"Usage\":\"docker run --rm example\\/foobar [args]\",\"License\":\"GPL\",\"Version\":\"0.0.1-beta\",\"aBoolean\":true,\"aNumber\":0.01234,\"aNestedArray\":[\"a\",\"b\",\"c\"]}" + +While it is *possible* to store structured data in label values, Docker treats +this data as a 'regular' string. This means that Docker doesn't offer ways to +query (filter) based on nested properties. If your tool needs to filter on +nested properties, the tool itself should implement this. + + +## Add labels to images; the `LABEL` instruction + +Adding labels to an image: + + + LABEL [.][=] ... + +The `LABEL` instruction adds a label to your image, optionally setting its value. +Use surrounding quotes or backslashes for labels that contain +white space character: + + LABEL vendor=ACME\ Incorporated + LABEL com.example.version.is-beta + LABEL com.example.version="0.0.1-beta" + LABEL com.example.release-date="2015-02-12" + +The `LABEL` instruction supports setting multiple labels in a single instruction +using this notation: + + LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12" + +Wrapping is allowed by using a backslash (`\`) as continuation marker: + + LABEL vendor=ACME\ Incorporated \ + com.example.is-beta \ + com.example.version="0.0.1-beta" \ + com.example.release-date="2015-02-12" + +Docker recommends you add multiple labels in a single `LABEL` instruction. Using +individual instructions for each label can result in an inefficient image. This +is because each `LABEL` instruction in a Dockerfile produces a new IMAGE layer. + +You can view the labels via the `docker inspect` command: + + $ docker inspect 4fa6e0f0c678 + + ... + "Labels": { + "vendor": "ACME Incorporated", + "com.example.is-beta": "", + "com.example.version": "0.0.1-beta", + "com.example.release-date": "2015-02-12" + } + ... + + $ docker inspect -f "{{json .Labels }}" 4fa6e0f0c678 + + {"Vendor":"ACME Incorporated","com.example.is-beta":"","com.example.version":"0.0.1-beta","com.example.release-date":"2015-02-12"} + + +## Query labels + +Besides storing metadata, you can filter images and containers by label. To list all +running containers that the `com.example.is-beta` label: + + # List all running containers that have a `com.example.is-beta` label + $ docker ps --filter "label=com.example.is-beta" + +List all running containers with a `color` label of `blue`: + + $ docker ps --filter "label=color=blue" + +List all images with `vendor` `ACME`: + + $ docker images --filter "label=vendor=ACME" + + +## Daemon labels + + + docker -d \ + --dns 8.8.8.8 \ + --dns 8.8.4.4 \ + -H unix:///var/run/docker.sock \ + --label com.example.environment="production" \ + --label com.example.storage="ssd" + +These labels appear as part of the `docker info` output for the daemon: + + docker -D info + Containers: 12 + Images: 672 + Storage Driver: aufs + Root Dir: /var/lib/docker/aufs + Backing Filesystem: extfs + Dirs: 697 + Execution Driver: native-0.2 + Kernel Version: 3.13.0-32-generic + Operating System: Ubuntu 14.04.1 LTS + CPUs: 1 + Total Memory: 994.1 MiB + Name: docker.example.com + ID: RC3P:JTCT:32YS:XYSB:YUBG:VFED:AAJZ:W3YW:76XO:D7NN:TEVU:UCRW + Debug mode (server): false + Debug mode (client): true + Fds: 11 + Goroutines: 14 + EventsListeners: 0 + Init Path: /usr/bin/docker + Docker Root Dir: /var/lib/docker + WARNING: No swap limit support + Labels: + com.example.environment=production + com.example.storage=ssd diff --git a/docs/sources/userguide/usingdocker.md b/docs/sources/userguide/usingdocker.md index 12a6b6fb2f..8d57def4ed 100644 --- a/docs/sources/userguide/usingdocker.md +++ b/docs/sources/userguide/usingdocker.md @@ -154,11 +154,11 @@ ports exposed in our image to our host. In this case Docker has exposed port 5000 (the default Python Flask port) on port 49155. -Network port bindings are very configurable in Docker. In our last -example the `-P` flag is a shortcut for `-p 5000` that maps port 5000 -inside the container to a high port (from the range 49153 to 65535) on -the local Docker host. We can also bind Docker containers to specific -ports using the `-p` flag, for example: +Network port bindings are very configurable in Docker. In our last example the +`-P` flag is a shortcut for `-p 5000` that maps port 5000 inside the container +to a high port (from *ephemeral port range* which typically ranges from 32768 +to 61000) on the local Docker host. We can also bind Docker containers to +specific ports using the `-p` flag, for example: $ sudo docker run -d -p 5000:5000 training/webapp python app.py diff --git a/docs/theme/MAINTAINERS b/docs/theme/MAINTAINERS deleted file mode 100644 index 081aa684d4..0000000000 --- a/docs/theme/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -O.S. Tezer (@OSTezer) -Thatcher Peskens (@dhrp) diff --git a/docs/theme/mkdocs/autoindex.html b/docs/theme/mkdocs/autoindex.html deleted file mode 100644 index df1cc3eb09..0000000000 --- a/docs/theme/mkdocs/autoindex.html +++ /dev/null @@ -1,15 +0,0 @@ -no_edit: true -auto_scroll_to_path: true - -# Table of Contents - -{% for nav_item in nav %} - {% if nav_item.children %} -## {{ nav_item.title }} {{ nav_item.url }} - - {% for nav_item in nav_item.children %} -- [{{ nav_item.title }}]({{ nav_item.url }}) - {% endfor %} - - {% endif %} -{% endfor %} diff --git a/docs/theme/mkdocs/base.html b/docs/theme/mkdocs/base.html deleted file mode 100644 index 4f669677b0..0000000000 --- a/docs/theme/mkdocs/base.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - {% set docker_version = "$VERSION" %}{% set major_minor = "$MAJOR_MINOR" %}{% set docker_commit = "$GITCOMMIT" %}{% set docker_branch = "$GIT_BRANCH" %}{% set aws_bucket = "$AWS_S3_BUCKET" %}{% set build_date = "$BUILD_DATE" %} - - - - - - {% if meta.page_description %}{% endif %} - {% if meta.page_keywords %}{% endif %} - {% if site_author %}{% endif %} - {% if canonical_url %}{% endif %} - - - - - - - - {% if page_title != '**HIDDEN** - '+site_name %}{{ page_title }}{% else %}{{ site_name }}{% endif %} - - - {% if config.google_analytics %} - - {% endif %} - - - -{% include "header.html" %} - -
    - {% include "nav.html" %} -
    -
    -{% if not meta.no_toc %} -
    -
    - -
    -
    -
    -{% else %} -
    -{% endif %} - {% include "beta_warning.html" %} -{% if not meta.no_version_dropdown %} -
    - -
    -{% endif %} - {{ content }} -
    -
    -
    - - - -
    - -{# need to find an unobtrusive way to add this back -{% include "prev_next.html" %} -#} - -{% include "footer.html" %} - - - - - - - - - - - - - - - diff --git a/docs/theme/mkdocs/beta_warning.html b/docs/theme/mkdocs/beta_warning.html deleted file mode 100644 index 036b882bca..0000000000 --- a/docs/theme/mkdocs/beta_warning.html +++ /dev/null @@ -1,8 +0,0 @@ -{% if aws_bucket != "docs.docker.com" %} -
    - This is the - {% if docker_version != docker_version|replace("-dev", "bingo") %}{{ docker_branch }} development branch{% else %}beta{% endif %} - documentation for Docker version {{ docker_version }}. - Please go to http://docs.docker.com for the current Docker release documentation. -
    -{% endif %} diff --git a/docs/theme/mkdocs/breadcrumbs.html b/docs/theme/mkdocs/breadcrumbs.html deleted file mode 100644 index c99e10f3aa..0000000000 --- a/docs/theme/mkdocs/breadcrumbs.html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/css/animate-custom.css b/docs/theme/mkdocs/css/animate-custom.css deleted file mode 100644 index b100e5f18a..0000000000 --- a/docs/theme/mkdocs/css/animate-custom.css +++ /dev/null @@ -1,283 +0,0 @@ -/* Some awesome custom aninations, taken from https://daneden.me/animate/build/ */ - - -.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}.animated.hinge{-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}@-webkit-keyframes flash { - 0%, 50%, 100% {opacity: 1;} 25%, 75% {opacity: 0;} -} - -@-moz-keyframes flash { - 0%, 50%, 100% {opacity: 1;} - 25%, 75% {opacity: 0;} -} - -@-o-keyframes flash { - 0%, 50%, 100% {opacity: 1;} - 25%, 75% {opacity: 0;} -} - -@keyframes flash { - 0%, 50%, 100% {opacity: 1;} - 25%, 75% {opacity: 0;} -} - -.flash { - -webkit-animation-name: flash; - -moz-animation-name: flash; - -o-animation-name: flash; - animation-name: flash; -} -@-webkit-keyframes shake { - 0%, 100% {-webkit-transform: translateX(0);} - 10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);} - 20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);} -} - -@-moz-keyframes shake { - 0%, 100% {-moz-transform: translateX(0);} - 10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);} - 20%, 40%, 60%, 80% {-moz-transform: translateX(10px);} -} - -@-o-keyframes shake { - 0%, 100% {-o-transform: translateX(0);} - 10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);} - 20%, 40%, 60%, 80% {-o-transform: translateX(10px);} -} - -@keyframes shake { - 0%, 100% {transform: translateX(0);} - 10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);} - 20%, 40%, 60%, 80% {transform: translateX(10px);} -} - -.shake { - -webkit-animation-name: shake; - -moz-animation-name: shake; - -o-animation-name: shake; - animation-name: shake; -} -@-webkit-keyframes bounce { - 0%, 20%, 50%, 80%, 100% {-webkit-transform: translateY(0);} - 40% {-webkit-transform: translateY(-30px);} - 60% {-webkit-transform: translateY(-15px);} -} - -@-moz-keyframes bounce { - 0%, 20%, 50%, 80%, 100% {-moz-transform: translateY(0);} - 40% {-moz-transform: translateY(-30px);} - 60% {-moz-transform: translateY(-15px);} -} - -@-o-keyframes bounce { - 0%, 20%, 50%, 80%, 100% {-o-transform: translateY(0);} - 40% {-o-transform: translateY(-30px);} - 60% {-o-transform: translateY(-15px);} -} -@keyframes bounce { - 0%, 20%, 50%, 80%, 100% {transform: translateY(0);} - 40% {transform: translateY(-30px);} - 60% {transform: translateY(-15px);} -} - -.bounce { - -webkit-animation-name: bounce; - -moz-animation-name: bounce; - -o-animation-name: bounce; - animation-name: bounce; -} -@-webkit-keyframes tada { - 0% {-webkit-transform: scale(1);} - 10%, 20% {-webkit-transform: scale(0.9) rotate(-3deg);} - 30%, 50%, 70%, 90% {-webkit-transform: scale(1.1) rotate(3deg);} - 40%, 60%, 80% {-webkit-transform: scale(1.1) rotate(-3deg);} - 100% {-webkit-transform: scale(1) rotate(0);} -} - -@-moz-keyframes tada { - 0% {-moz-transform: scale(1);} - 10%, 20% {-moz-transform: scale(0.9) rotate(-3deg);} - 30%, 50%, 70%, 90% {-moz-transform: scale(1.1) rotate(3deg);} - 40%, 60%, 80% {-moz-transform: scale(1.1) rotate(-3deg);} - 100% {-moz-transform: scale(1) rotate(0);} -} - -@-o-keyframes tada { - 0% {-o-transform: scale(1);} - 10%, 20% {-o-transform: scale(0.9) rotate(-3deg);} - 30%, 50%, 70%, 90% {-o-transform: scale(1.1) rotate(3deg);} - 40%, 60%, 80% {-o-transform: scale(1.1) rotate(-3deg);} - 100% {-o-transform: scale(1) rotate(0);} -} - -@keyframes tada { - 0% {transform: scale(1);} - 10%, 20% {transform: scale(0.9) rotate(-3deg);} - 30%, 50%, 70%, 90% {transform: scale(1.1) rotate(3deg);} - 40%, 60%, 80% {transform: scale(1.1) rotate(-3deg);} - 100% {transform: scale(1) rotate(0);} -} - -.tada { - -webkit-animation-name: tada; - -moz-animation-name: tada; - -o-animation-name: tada; - animation-name: tada; -} -@-webkit-keyframes swing { - 20%, 40%, 60%, 80%, 100% { -webkit-transform-origin: top center; } - 20% { -webkit-transform: rotate(15deg); } - 40% { -webkit-transform: rotate(-10deg); } - 60% { -webkit-transform: rotate(5deg); } - 80% { -webkit-transform: rotate(-5deg); } - 100% { -webkit-transform: rotate(0deg); } -} - -@-moz-keyframes swing { - 20% { -moz-transform: rotate(15deg); } - 40% { -moz-transform: rotate(-10deg); } - 60% { -moz-transform: rotate(5deg); } - 80% { -moz-transform: rotate(-5deg); } - 100% { -moz-transform: rotate(0deg); } -} - -@-o-keyframes swing { - 20% { -o-transform: rotate(15deg); } - 40% { -o-transform: rotate(-10deg); } - 60% { -o-transform: rotate(5deg); } - 80% { -o-transform: rotate(-5deg); } - 100% { -o-transform: rotate(0deg); } -} - -@keyframes swing { - 20% { transform: rotate(15deg); } - 40% { transform: rotate(-10deg); } - 60% { transform: rotate(5deg); } - 80% { transform: rotate(-5deg); } - 100% { transform: rotate(0deg); } -} - -.swing { - -webkit-transform-origin: top center; - -moz-transform-origin: top center; - -o-transform-origin: top center; - transform-origin: top center; - -webkit-animation-name: swing; - -moz-animation-name: swing; - -o-animation-name: swing; - animation-name: swing; -} -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes wobble { - 0% { -webkit-transform: translateX(0%); } - 15% { -webkit-transform: translateX(-25%) rotate(-5deg); } - 30% { -webkit-transform: translateX(20%) rotate(3deg); } - 45% { -webkit-transform: translateX(-15%) rotate(-3deg); } - 60% { -webkit-transform: translateX(10%) rotate(2deg); } - 75% { -webkit-transform: translateX(-5%) rotate(-1deg); } - 100% { -webkit-transform: translateX(0%); } -} - -@-moz-keyframes wobble { - 0% { -moz-transform: translateX(0%); } - 15% { -moz-transform: translateX(-25%) rotate(-5deg); } - 30% { -moz-transform: translateX(20%) rotate(3deg); } - 45% { -moz-transform: translateX(-15%) rotate(-3deg); } - 60% { -moz-transform: translateX(10%) rotate(2deg); } - 75% { -moz-transform: translateX(-5%) rotate(-1deg); } - 100% { -moz-transform: translateX(0%); } -} - -@-o-keyframes wobble { - 0% { -o-transform: translateX(0%); } - 15% { -o-transform: translateX(-25%) rotate(-5deg); } - 30% { -o-transform: translateX(20%) rotate(3deg); } - 45% { -o-transform: translateX(-15%) rotate(-3deg); } - 60% { -o-transform: translateX(10%) rotate(2deg); } - 75% { -o-transform: translateX(-5%) rotate(-1deg); } - 100% { -o-transform: translateX(0%); } -} - -@keyframes wobble { - 0% { transform: translateX(0%); } - 15% { transform: translateX(-25%) rotate(-5deg); } - 30% { transform: translateX(20%) rotate(3deg); } - 45% { transform: translateX(-15%) rotate(-3deg); } - 60% { transform: translateX(10%) rotate(2deg); } - 75% { transform: translateX(-5%) rotate(-1deg); } - 100% { transform: translateX(0%); } -} - -.wobble { - -webkit-animation-name: wobble; - -moz-animation-name: wobble; - -o-animation-name: wobble; - animation-name: wobble; -} -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes pulse { - 0% { -webkit-transform: scale(1); } - 50% { -webkit-transform: scale(1.1); } - 100% { -webkit-transform: scale(1); } -} -@-moz-keyframes pulse { - 0% { -moz-transform: scale(1); } - 50% { -moz-transform: scale(1.1); } - 100% { -moz-transform: scale(1); } -} -@-o-keyframes pulse { - 0% { -o-transform: scale(1); } - 50% { -o-transform: scale(1.1); } - 100% { -o-transform: scale(1); } -} -@keyframes pulse { - 0% { transform: scale(1); } - 50% { transform: scale(1.1); } - 100% { transform: scale(1); } -} - -.pulse { - -webkit-animation-name: pulse; - -moz-animation-name: pulse; - -o-animation-name: pulse; - animation-name: pulse; -} -@-webkit-keyframes hinge { - 0% { -webkit-transform: rotate(0); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; } - 20%, 60% { -webkit-transform: rotate(80deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; } - 40% { -webkit-transform: rotate(60deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; } - 80% { -webkit-transform: rotate(60deg) translateY(0); opacity: 1; -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; } - 100% { -webkit-transform: translateY(700px); opacity: 0; } -} - -@-moz-keyframes hinge { - 0% { -moz-transform: rotate(0); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; } - 20%, 60% { -moz-transform: rotate(80deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; } - 40% { -moz-transform: rotate(60deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; } - 80% { -moz-transform: rotate(60deg) translateY(0); opacity: 1; -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; } - 100% { -moz-transform: translateY(700px); opacity: 0; } -} - -@-o-keyframes hinge { - 0% { -o-transform: rotate(0); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; } - 20%, 60% { -o-transform: rotate(80deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; } - 40% { -o-transform: rotate(60deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; } - 80% { -o-transform: rotate(60deg) translateY(0); opacity: 1; -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; } - 100% { -o-transform: translateY(700px); opacity: 0; } -} - -@keyframes hinge { - 0% { transform: rotate(0); transform-origin: top left; animation-timing-function: ease-in-out; } - 20%, 60% { transform: rotate(80deg); transform-origin: top left; animation-timing-function: ease-in-out; } - 40% { transform: rotate(60deg); transform-origin: top left; animation-timing-function: ease-in-out; } - 80% { transform: rotate(60deg) translateY(0); opacity: 1; transform-origin: top left; animation-timing-function: ease-in-out; } - 100% { transform: translateY(700px); opacity: 0; } -} - -.hinge { - -webkit-animation-name: hinge; - -moz-animation-name: hinge; - -o-animation-name: hinge; - animation-name: hinge; -} \ No newline at end of file diff --git a/docs/theme/mkdocs/css/bootstrap-custom.css b/docs/theme/mkdocs/css/bootstrap-custom.css deleted file mode 100644 index 825a858f34..0000000000 --- a/docs/theme/mkdocs/css/bootstrap-custom.css +++ /dev/null @@ -1,6784 +0,0 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 11.7px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.7; - color: #333333; - background-color: #f2f2f2; -} -a { - color: #213b8f; - text-decoration: none; -} -a:hover, -a:focus { - color: #2f55cd; - text-decoration: underline; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 11.7px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; - width: 16px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; - width: 16px; -} -.icon-folder-open { - background-position: -408px -120px; - width: 16px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.icon-hdd { - background-position: 0 -144px; -} -.icon-bullhorn { - background-position: -24px -144px; -} -.icon-bell { - background-position: -48px -144px; -} -.icon-certificate { - background-position: -72px -144px; -} -.icon-thumbs-up { - background-position: -96px -144px; -} -.icon-thumbs-down { - background-position: -120px -144px; -} -.icon-hand-right { - background-position: -144px -144px; -} -.icon-hand-left { - background-position: -168px -144px; -} -.icon-hand-up { - background-position: -192px -144px; -} -.icon-hand-down { - background-position: -216px -144px; -} -.icon-circle-arrow-right { - background-position: -240px -144px; -} -.icon-circle-arrow-left { - background-position: -264px -144px; -} -.icon-circle-arrow-up { - background-position: -288px -144px; -} -.icon-circle-arrow-down { - background-position: -312px -144px; -} -.icon-globe { - background-position: -336px -144px; -} -.icon-wrench { - background-position: -360px -144px; -} -.icon-tasks { - background-position: -384px -144px; -} -.icon-filter { - background-position: -408px -144px; -} -.icon-briefcase { - background-position: -432px -144px; -} -.icon-fullscreen { - background-position: -456px -144px; -} -p { - margin: 0 0 0.85; -} -.lead { - margin-bottom: 1.7; - font-size: 21px; - font-weight: 200; - line-height: 2.55; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover, -a.muted:focus { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover, -a.text-success:focus { - color: #356635; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0.85 0; - font-family: inherit; - font-weight: 400; - line-height: 1.7; - color: #394d54; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 3.4; -} -h1 { - font-size: 38.5px; -} -h2 { - font-size: 31.5px; -} -h3 { - font-size: 24.5px; -} -h4 { - font-size: 17.5px; -} -h5 { - font-size: 14px; -} -h6 { - font-size: 11.9px; -} -h1 small { - font-size: 24.5px; -} -h2 small { - font-size: 17.5px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - padding-bottom: -0.15000000000000002; - margin: 1.7 0 2.55; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 0.85 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 1.7; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 1.7; -} -dt, -dd { - line-height: 1.7; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0.85; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 1.7 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 1.7; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} -blockquote small { - display: block; - line-height: 1.7; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ''; -} -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 1.7; - font-style: normal; - line-height: 1.7; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 0.35; - margin: 0 0 0.85; - font-size: 13px; - line-height: 1.7; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); -} -pre.prettyprint { - margin-bottom: 1.7; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 1.7; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 1.7; - font-size: 21px; - line-height: 3.4; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 1.275; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 1.7; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 1.7; - padding: 4px 6px; - margin-bottom: 0.85; - font-size: 14px; - line-height: 1.7; - color: #555555; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - margin-top: 1px \9; - /* IE8-9 */ - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 11.7px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - line-height: 11.7px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 1.7; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; -} -.form-actions { - padding: 0.7 20px 1.7; - margin-top: 1.7; - margin-bottom: 1.7; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 0.85; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 0.85; - vertical-align: middle; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 1.7; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 1.7; - text-align: center; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-append input, -.input-append select, -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; -} -/* Allow for input prepend/append in search forms */ -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 0.85; -} -legend + .control-group { - margin-top: 1.7; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 1.7; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 0.85; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 1.7; -} -.table th, -.table td { - padding: 8px; - line-height: 1.7; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #f2f2f2; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success > td { - background-color: #dff0d8; -} -.table tbody tr.error > td { - background-color: #f2dede; -} -.table tbody tr.warning > td { - background-color: #fcf8e3; -} -.table tbody tr.info > td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} -/*! - * Font Awesome 3.1.0 - * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- - * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('font/fontawesome-webfont.eot?v=3.1.0'); - src: url('font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'), url('font/fontawesome-webfont.woff?v=3.1.0') format('woff'), url('font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'), url('font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg'); - font-weight: normal; - font-style: normal; -} -/* FONT AWESOME CORE - * -------------------------- */ -[class^="icon-"], -[class*=" icon-"] { - font-family: FontAwesome; - font-weight: normal; - font-style: normal; - text-decoration: inherit; - -webkit-font-smoothing: antialiased; - *margin-right: .3em; -} -[class^="icon-"]:before, -[class*=" icon-"]:before { - text-decoration: inherit; - display: inline-block; - speak: none; -} -/* makes the font 33% larger relative to the icon container */ -.icon-large:before { - vertical-align: -10%; - font-size: 1.3333333333333333em; -} -/* makes sure icons active on rollover in links */ -a [class^="icon-"], -a [class*=" icon-"], -a [class^="icon-"]:before, -a [class*=" icon-"]:before { - display: inline; -} -/* increased font size for icon-large */ -[class^="icon-"].icon-fixed-width, -[class*=" icon-"].icon-fixed-width { - display: inline-block; - width: 1.2857142857142858em; - text-align: center; -} -[class^="icon-"].icon-fixed-width.icon-large, -[class*=" icon-"].icon-fixed-width.icon-large { - width: 1.5714285714285714em; -} -ul.icons-ul { - list-style-type: none; - text-indent: -0.7142857142857143em; - margin-left: 2.142857142857143em; -} -ul.icons-ul > li .icon-li { - width: 0.7142857142857143em; - display: inline-block; - text-align: center; -} -[class^="icon-"].hide, -[class*=" icon-"].hide { - display: none; -} -.icon-muted { - color: #eeeeee; -} -.icon-light { - color: #ffffff; -} -.icon-dark { - color: #333333; -} -.icon-border { - border: solid 1px #eeeeee; - padding: .2em .25em .15em; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.icon-2x { - font-size: 2em; -} -.icon-2x.icon-border { - border-width: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.icon-3x { - font-size: 3em; -} -.icon-3x.icon-border { - border-width: 3px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.icon-4x { - font-size: 4em; -} -.icon-4x.icon-border { - border-width: 4px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.icon-5x { - font-size: 5em; -} -.icon-5x.icon-border { - border-width: 5px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - border-radius: 7px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -[class^="icon-"].pull-left, -[class*=" icon-"].pull-left { - margin-right: .3em; -} -[class^="icon-"].pull-right, -[class*=" icon-"].pull-right { - margin-left: .3em; -} -/* BOOTSTRAP SPECIFIC CLASSES - * -------------------------- */ -/* Bootstrap 2.0 sprites.less reset */ -[class^="icon-"], -[class*=" icon-"] { - display: inline; - width: auto; - height: auto; - line-height: normal; - vertical-align: baseline; - background-image: none; - background-position: 0% 0%; - background-repeat: repeat; - margin-top: 0; -} -/* more sprites.less reset */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"] { - background-image: none; -} -/* keeps Bootstrap styles with and without icons the same */ -.btn [class^="icon-"].icon-large, -.nav [class^="icon-"].icon-large, -.btn [class*=" icon-"].icon-large, -.nav [class*=" icon-"].icon-large { - line-height: .9em; -} -.btn [class^="icon-"].icon-spin, -.nav [class^="icon-"].icon-spin, -.btn [class*=" icon-"].icon-spin, -.nav [class*=" icon-"].icon-spin { - display: inline-block; -} -.nav-tabs [class^="icon-"], -.nav-pills [class^="icon-"], -.nav-tabs [class*=" icon-"], -.nav-pills [class*=" icon-"], -.nav-tabs [class^="icon-"].icon-large, -.nav-pills [class^="icon-"].icon-large, -.nav-tabs [class*=" icon-"].icon-large, -.nav-pills [class*=" icon-"].icon-large { - line-height: .9em; -} -.btn [class^="icon-"].pull-left.icon-2x, -.btn [class*=" icon-"].pull-left.icon-2x, -.btn [class^="icon-"].pull-right.icon-2x, -.btn [class*=" icon-"].pull-right.icon-2x { - margin-top: .18em; -} -.btn [class^="icon-"].icon-spin.icon-large, -.btn [class*=" icon-"].icon-spin.icon-large { - line-height: .8em; -} -.btn.btn-small [class^="icon-"].pull-left.icon-2x, -.btn.btn-small [class*=" icon-"].pull-left.icon-2x, -.btn.btn-small [class^="icon-"].pull-right.icon-2x, -.btn.btn-small [class*=" icon-"].pull-right.icon-2x { - margin-top: .25em; -} -.btn.btn-large [class^="icon-"], -.btn.btn-large [class*=" icon-"] { - margin-top: 0; -} -.btn.btn-large [class^="icon-"].pull-left.icon-2x, -.btn.btn-large [class*=" icon-"].pull-left.icon-2x, -.btn.btn-large [class^="icon-"].pull-right.icon-2x, -.btn.btn-large [class*=" icon-"].pull-right.icon-2x { - margin-top: .05em; -} -.btn.btn-large [class^="icon-"].pull-left.icon-2x, -.btn.btn-large [class*=" icon-"].pull-left.icon-2x { - margin-right: .2em; -} -.btn.btn-large [class^="icon-"].pull-right.icon-2x, -.btn.btn-large [class*=" icon-"].pull-right.icon-2x { - margin-left: .2em; -} -/* EXTRAS - * -------------------------- */ -/* Stacked and layered icon */ -.icon-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: -35%; -} -.icon-stack [class^="icon-"], -.icon-stack [class*=" icon-"] { - display: block; - text-align: center; - position: absolute; - width: 100%; - height: 100%; - font-size: 1em; - line-height: inherit; - *line-height: 2em; -} -.icon-stack .icon-stack-base { - font-size: 2em; - *line-height: 1em; -} -/* Animated rotating icon */ -.icon-spin { - display: inline-block; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - -webkit-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} -@-moz-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - } - 100% { - -moz-transform: rotate(359deg); - } -} -@-webkit-keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - } -} -@-o-keyframes spin { - 0% { - -o-transform: rotate(0deg); - } - 100% { - -o-transform: rotate(359deg); - } -} -@-ms-keyframes spin { - 0% { - -ms-transform: rotate(0deg); - } - 100% { - -ms-transform: rotate(359deg); - } -} -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(359deg); - } -} -/* Icon rotations and mirroring */ -.icon-rotate-90:before { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -} -.icon-rotate-180:before { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -} -.icon-rotate-270:before { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -} -.icon-flip-horizontal:before { - -webkit-transform: scale(-1, 1); - -moz-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - -o-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.icon-flip-vertical:before { - -webkit-transform: scale(1, -1); - -moz-transform: scale(1, -1); - -ms-transform: scale(1, -1); - -o-transform: scale(1, -1); - transform: scale(1, -1); -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.icon-glass:before { - content: "\f000"; -} -.icon-music:before { - content: "\f001"; -} -.icon-search:before { - content: "\f002"; -} -.icon-envelope:before { - content: "\f003"; -} -.icon-heart:before { - content: "\f004"; -} -.icon-star:before { - content: "\f005"; -} -.icon-star-empty:before { - content: "\f006"; -} -.icon-user:before { - content: "\f007"; -} -.icon-film:before { - content: "\f008"; -} -.icon-th-large:before { - content: "\f009"; -} -.icon-th:before { - content: "\f00a"; -} -.icon-th-list:before { - content: "\f00b"; -} -.icon-ok:before { - content: "\f00c"; -} -.icon-remove:before { - content: "\f00d"; -} -.icon-zoom-in:before { - content: "\f00e"; -} -.icon-zoom-out:before { - content: "\f010"; -} -.icon-off:before { - content: "\f011"; -} -.icon-signal:before { - content: "\f012"; -} -.icon-cog:before { - content: "\f013"; -} -.icon-trash:before { - content: "\f014"; -} -.icon-home:before { - content: "\f015"; -} -.icon-file:before { - content: "\f016"; -} -.icon-time:before { - content: "\f017"; -} -.icon-road:before { - content: "\f018"; -} -.icon-download-alt:before { - content: "\f019"; -} -.icon-download:before { - content: "\f01a"; -} -.icon-upload:before { - content: "\f01b"; -} -.icon-inbox:before { - content: "\f01c"; -} -.icon-play-circle:before { - content: "\f01d"; -} -.icon-repeat:before, -.icon-rotate-right:before { - content: "\f01e"; -} -/* F020 doesn't work in Safari. all shifted one down */ -.icon-refresh:before { - content: "\f021"; -} -.icon-list-alt:before { - content: "\f022"; -} -.icon-lock:before { - content: "\f023"; -} -.icon-flag:before { - content: "\f024"; -} -.icon-headphones:before { - content: "\f025"; -} -.icon-volume-off:before { - content: "\f026"; -} -.icon-volume-down:before { - content: "\f027"; -} -.icon-volume-up:before { - content: "\f028"; -} -.icon-qrcode:before { - content: "\f029"; -} -.icon-barcode:before { - content: "\f02a"; -} -.icon-tag:before { - content: "\f02b"; -} -.icon-tags:before { - content: "\f02c"; -} -.icon-book:before { - content: "\f02d"; -} -.icon-bookmark:before { - content: "\f02e"; -} -.icon-print:before { - content: "\f02f"; -} -.icon-camera:before { - content: "\f030"; -} -.icon-font:before { - content: "\f031"; -} -.icon-bold:before { - content: "\f032"; -} -.icon-italic:before { - content: "\f033"; -} -.icon-text-height:before { - content: "\f034"; -} -.icon-text-width:before { - content: "\f035"; -} -.icon-align-left:before { - content: "\f036"; -} -.icon-align-center:before { - content: "\f037"; -} -.icon-align-right:before { - content: "\f038"; -} -.icon-align-justify:before { - content: "\f039"; -} -.icon-list:before { - content: "\f03a"; -} -.icon-indent-left:before { - content: "\f03b"; -} -.icon-indent-right:before { - content: "\f03c"; -} -.icon-facetime-video:before { - content: "\f03d"; -} -.icon-picture:before { - content: "\f03e"; -} -.icon-pencil:before { - content: "\f040"; -} -.icon-map-marker:before { - content: "\f041"; -} -.icon-adjust:before { - content: "\f042"; -} -.icon-tint:before { - content: "\f043"; -} -.icon-edit:before { - content: "\f044"; -} -.icon-share:before { - content: "\f045"; -} -.icon-check:before { - content: "\f046"; -} -.icon-move:before { - content: "\f047"; -} -.icon-step-backward:before { - content: "\f048"; -} -.icon-fast-backward:before { - content: "\f049"; -} -.icon-backward:before { - content: "\f04a"; -} -.icon-play:before { - content: "\f04b"; -} -.icon-pause:before { - content: "\f04c"; -} -.icon-stop:before { - content: "\f04d"; -} -.icon-forward:before { - content: "\f04e"; -} -.icon-fast-forward:before { - content: "\f050"; -} -.icon-step-forward:before { - content: "\f051"; -} -.icon-eject:before { - content: "\f052"; -} -.icon-chevron-left:before { - content: "\f053"; -} -.icon-chevron-right:before { - content: "\f054"; -} -.icon-plus-sign:before { - content: "\f055"; -} -.icon-minus-sign:before { - content: "\f056"; -} -.icon-remove-sign:before { - content: "\f057"; -} -.icon-ok-sign:before { - content: "\f058"; -} -.icon-question-sign:before { - content: "\f059"; -} -.icon-info-sign:before { - content: "\f05a"; -} -.icon-screenshot:before { - content: "\f05b"; -} -.icon-remove-circle:before { - content: "\f05c"; -} -.icon-ok-circle:before { - content: "\f05d"; -} -.icon-ban-circle:before { - content: "\f05e"; -} -.icon-arrow-left:before { - content: "\f060"; -} -.icon-arrow-right:before { - content: "\f061"; -} -.icon-arrow-up:before { - content: "\f062"; -} -.icon-arrow-down:before { - content: "\f063"; -} -.icon-share-alt:before, -.icon-mail-forward:before { - content: "\f064"; -} -.icon-resize-full:before { - content: "\f065"; -} -.icon-resize-small:before { - content: "\f066"; -} -.icon-plus:before { - content: "\f067"; -} -.icon-minus:before { - content: "\f068"; -} -.icon-asterisk:before { - content: "\f069"; -} -.icon-exclamation-sign:before { - content: "\f06a"; -} -.icon-gift:before { - content: "\f06b"; -} -.icon-leaf:before { - content: "\f06c"; -} -.icon-fire:before { - content: "\f06d"; -} -.icon-eye-open:before { - content: "\f06e"; -} -.icon-eye-close:before { - content: "\f070"; -} -.icon-warning-sign:before { - content: "\f071"; -} -.icon-plane:before { - content: "\f072"; -} -.icon-calendar:before { - content: "\f073"; -} -.icon-random:before { - content: "\f074"; -} -.icon-comment:before { - content: "\f075"; -} -.icon-magnet:before { - content: "\f076"; -} -.icon-chevron-up:before { - content: "\f077"; -} -.icon-chevron-down:before { - content: "\f078"; -} -.icon-retweet:before { - content: "\f079"; -} -.icon-shopping-cart:before { - content: "\f07a"; -} -.icon-folder-close:before { - content: "\f07b"; -} -.icon-folder-open:before { - content: "\f07c"; -} -.icon-resize-vertical:before { - content: "\f07d"; -} -.icon-resize-horizontal:before { - content: "\f07e"; -} -.icon-bar-chart:before { - content: "\f080"; -} -.icon-twitter-sign:before { - content: "\f081"; -} -.icon-facebook-sign:before { - content: "\f082"; -} -.icon-camera-retro:before { - content: "\f083"; -} -.icon-key:before { - content: "\f084"; -} -.icon-cogs:before { - content: "\f085"; -} -.icon-comments:before { - content: "\f086"; -} -.icon-thumbs-up:before { - content: "\f087"; -} -.icon-thumbs-down:before { - content: "\f088"; -} -.icon-star-half:before { - content: "\f089"; -} -.icon-heart-empty:before { - content: "\f08a"; -} -.icon-signout:before { - content: "\f08b"; -} -.icon-linkedin-sign:before { - content: "\f08c"; -} -.icon-pushpin:before { - content: "\f08d"; -} -.icon-external-link:before { - content: "\f08e"; -} -.icon-signin:before { - content: "\f090"; -} -.icon-trophy:before { - content: "\f091"; -} -.icon-github-sign:before { - content: "\f092"; -} -.icon-upload-alt:before { - content: "\f093"; -} -.icon-lemon:before { - content: "\f094"; -} -.icon-phone:before { - content: "\f095"; -} -.icon-check-empty:before { - content: "\f096"; -} -.icon-bookmark-empty:before { - content: "\f097"; -} -.icon-phone-sign:before { - content: "\f098"; -} -.icon-twitter:before { - content: "\f099"; -} -.icon-facebook:before { - content: "\f09a"; -} -.icon-github:before { - content: "\f09b"; -} -.icon-unlock:before { - content: "\f09c"; -} -.icon-credit-card:before { - content: "\f09d"; -} -.icon-rss:before { - content: "\f09e"; -} -.icon-hdd:before { - content: "\f0a0"; -} -.icon-bullhorn:before { - content: "\f0a1"; -} -.icon-bell:before { - content: "\f0a2"; -} -.icon-certificate:before { - content: "\f0a3"; -} -.icon-hand-right:before { - content: "\f0a4"; -} -.icon-hand-left:before { - content: "\f0a5"; -} -.icon-hand-up:before { - content: "\f0a6"; -} -.icon-hand-down:before { - content: "\f0a7"; -} -.icon-circle-arrow-left:before { - content: "\f0a8"; -} -.icon-circle-arrow-right:before { - content: "\f0a9"; -} -.icon-circle-arrow-up:before { - content: "\f0aa"; -} -.icon-circle-arrow-down:before { - content: "\f0ab"; -} -.icon-globe:before { - content: "\f0ac"; -} -.icon-wrench:before { - content: "\f0ad"; -} -.icon-tasks:before { - content: "\f0ae"; -} -.icon-filter:before { - content: "\f0b0"; -} -.icon-briefcase:before { - content: "\f0b1"; -} -.icon-fullscreen:before { - content: "\f0b2"; -} -.icon-group:before { - content: "\f0c0"; -} -.icon-link:before { - content: "\f0c1"; -} -.icon-cloud:before { - content: "\f0c2"; -} -.icon-beaker:before { - content: "\f0c3"; -} -.icon-cut:before { - content: "\f0c4"; -} -.icon-copy:before { - content: "\f0c5"; -} -.icon-paper-clip:before { - content: "\f0c6"; -} -.icon-save:before { - content: "\f0c7"; -} -.icon-sign-blank:before { - content: "\f0c8"; -} -.icon-reorder:before { - content: "\f0c9"; -} -.icon-list-ul:before { - content: "\f0ca"; -} -.icon-list-ol:before { - content: "\f0cb"; -} -.icon-strikethrough:before { - content: "\f0cc"; -} -.icon-underline:before { - content: "\f0cd"; -} -.icon-table:before { - content: "\f0ce"; -} -.icon-magic:before { - content: "\f0d0"; -} -.icon-truck:before { - content: "\f0d1"; -} -.icon-pinterest:before { - content: "\f0d2"; -} -.icon-pinterest-sign:before { - content: "\f0d3"; -} -.icon-google-plus-sign:before { - content: "\f0d4"; -} -.icon-google-plus:before { - content: "\f0d5"; -} -.icon-money:before { - content: "\f0d6"; -} -.icon-caret-down:before { - content: "\f0d7"; -} -.icon-caret-up:before { - content: "\f0d8"; -} -.icon-caret-left:before { - content: "\f0d9"; -} -.icon-caret-right:before { - content: "\f0da"; -} -.icon-columns:before { - content: "\f0db"; -} -.icon-sort:before { - content: "\f0dc"; -} -.icon-sort-down:before { - content: "\f0dd"; -} -.icon-sort-up:before { - content: "\f0de"; -} -.icon-envelope-alt:before { - content: "\f0e0"; -} -.icon-linkedin:before { - content: "\f0e1"; -} -.icon-undo:before, -.icon-rotate-left:before { - content: "\f0e2"; -} -.icon-legal:before { - content: "\f0e3"; -} -.icon-dashboard:before { - content: "\f0e4"; -} -.icon-comment-alt:before { - content: "\f0e5"; -} -.icon-comments-alt:before { - content: "\f0e6"; -} -.icon-bolt:before { - content: "\f0e7"; -} -.icon-sitemap:before { - content: "\f0e8"; -} -.icon-umbrella:before { - content: "\f0e9"; -} -.icon-paste:before { - content: "\f0ea"; -} -.icon-lightbulb:before { - content: "\f0eb"; -} -.icon-exchange:before { - content: "\f0ec"; -} -.icon-cloud-download:before { - content: "\f0ed"; -} -.icon-cloud-upload:before { - content: "\f0ee"; -} -.icon-user-md:before { - content: "\f0f0"; -} -.icon-stethoscope:before { - content: "\f0f1"; -} -.icon-suitcase:before { - content: "\f0f2"; -} -.icon-bell-alt:before { - content: "\f0f3"; -} -.icon-coffee:before { - content: "\f0f4"; -} -.icon-food:before { - content: "\f0f5"; -} -.icon-file-alt:before { - content: "\f0f6"; -} -.icon-building:before { - content: "\f0f7"; -} -.icon-hospital:before { - content: "\f0f8"; -} -.icon-ambulance:before { - content: "\f0f9"; -} -.icon-medkit:before { - content: "\f0fa"; -} -.icon-fighter-jet:before { - content: "\f0fb"; -} -.icon-beer:before { - content: "\f0fc"; -} -.icon-h-sign:before { - content: "\f0fd"; -} -.icon-plus-sign-alt:before { - content: "\f0fe"; -} -.icon-double-angle-left:before { - content: "\f100"; -} -.icon-double-angle-right:before { - content: "\f101"; -} -.icon-double-angle-up:before { - content: "\f102"; -} -.icon-double-angle-down:before { - content: "\f103"; -} -.icon-angle-left:before { - content: "\f104"; -} -.icon-angle-right:before { - content: "\f105"; -} -.icon-angle-up:before { - content: "\f106"; -} -.icon-angle-down:before { - content: "\f107"; -} -.icon-desktop:before { - content: "\f108"; -} -.icon-laptop:before { - content: "\f109"; -} -.icon-tablet:before { - content: "\f10a"; -} -.icon-mobile-phone:before { - content: "\f10b"; -} -.icon-circle-blank:before { - content: "\f10c"; -} -.icon-quote-left:before { - content: "\f10d"; -} -.icon-quote-right:before { - content: "\f10e"; -} -.icon-spinner:before { - content: "\f110"; -} -.icon-circle:before { - content: "\f111"; -} -.icon-reply:before, -.icon-mail-reply:before { - content: "\f112"; -} -.icon-folder-close-alt:before { - content: "\f114"; -} -.icon-folder-open-alt:before { - content: "\f115"; -} -.icon-expand-alt:before { - content: "\f116"; -} -.icon-collapse-alt:before { - content: "\f117"; -} -.icon-smile:before { - content: "\f118"; -} -.icon-frown:before { - content: "\f119"; -} -.icon-meh:before { - content: "\f11a"; -} -.icon-gamepad:before { - content: "\f11b"; -} -.icon-keyboard:before { - content: "\f11c"; -} -.icon-flag-alt:before { - content: "\f11d"; -} -.icon-flag-checkered:before { - content: "\f11e"; -} -.icon-terminal:before { - content: "\f120"; -} -.icon-code:before { - content: "\f121"; -} -.icon-reply-all:before { - content: "\f122"; -} -.icon-mail-reply-all:before { - content: "\f122"; -} -.icon-star-half-full:before, -.icon-star-half-empty:before { - content: "\f123"; -} -.icon-location-arrow:before { - content: "\f124"; -} -.icon-crop:before { - content: "\f125"; -} -.icon-code-fork:before { - content: "\f126"; -} -.icon-unlink:before { - content: "\f127"; -} -.icon-question:before { - content: "\f128"; -} -.icon-info:before { - content: "\f129"; -} -.icon-exclamation:before { - content: "\f12a"; -} -.icon-superscript:before { - content: "\f12b"; -} -.icon-subscript:before { - content: "\f12c"; -} -.icon-eraser:before { - content: "\f12d"; -} -.icon-puzzle-piece:before { - content: "\f12e"; -} -.icon-microphone:before { - content: "\f130"; -} -.icon-microphone-off:before { - content: "\f131"; -} -.icon-shield:before { - content: "\f132"; -} -.icon-calendar-empty:before { - content: "\f133"; -} -.icon-fire-extinguisher:before { - content: "\f134"; -} -.icon-rocket:before { - content: "\f135"; -} -.icon-maxcdn:before { - content: "\f136"; -} -.icon-chevron-sign-left:before { - content: "\f137"; -} -.icon-chevron-sign-right:before { - content: "\f138"; -} -.icon-chevron-sign-up:before { - content: "\f139"; -} -.icon-chevron-sign-down:before { - content: "\f13a"; -} -.icon-html5:before { - content: "\f13b"; -} -.icon-css3:before { - content: "\f13c"; -} -.icon-anchor:before { - content: "\f13d"; -} -.icon-unlock-alt:before { - content: "\f13e"; -} -.icon-bullseye:before { - content: "\f140"; -} -.icon-ellipsis-horizontal:before { - content: "\f141"; -} -.icon-ellipsis-vertical:before { - content: "\f142"; -} -.icon-rss-sign:before { - content: "\f143"; -} -.icon-play-sign:before { - content: "\f144"; -} -.icon-ticket:before { - content: "\f145"; -} -.icon-minus-sign-alt:before { - content: "\f146"; -} -.icon-check-minus:before { - content: "\f147"; -} -.icon-level-up:before { - content: "\f148"; -} -.icon-level-down:before { - content: "\f149"; -} -.icon-check-sign:before { - content: "\f14a"; -} -.icon-edit-sign:before { - content: "\f14b"; -} -.icon-external-link-sign:before { - content: "\f14c"; -} -.icon-share-sign:before { - content: "\f14d"; -} -/*! - * Font Awesome 3.1.0 - * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- - * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */ -.icon-large { - font-size: 1.3333333333333333em; - margin-top: -4px; - padding-top: 3px; - margin-bottom: -4px; - padding-bottom: 3px; - vertical-align: middle; -} -.nav [class^="icon-"], -.nav [class*=" icon-"] { - vertical-align: inherit; - margin-top: -4px; - padding-top: 3px; - margin-bottom: -4px; - padding-bottom: 3px; -} -.nav [class^="icon-"].icon-large, -.nav [class*=" icon-"].icon-large { - vertical-align: -25%; -} -.nav-pills [class^="icon-"].icon-large, -.nav-tabs [class^="icon-"].icon-large, -.nav-pills [class*=" icon-"].icon-large, -.nav-tabs [class*=" icon-"].icon-large { - line-height: .75em; - margin-top: -7px; - padding-top: 5px; - margin-bottom: -5px; - padding-bottom: 4px; -} -ul.icons-ul { - text-indent: -1em; - margin-left: 2.142857142857143em; -} -ul.icons-ul > li .icon-li { - width: 1em; - margin-right: 0; -} -.btn [class^="icon-"].pull-left, -.btn [class*=" icon-"].pull-left, -.btn [class^="icon-"].pull-right, -.btn [class*=" icon-"].pull-right { - vertical-align: inherit; -} -.btn [class^="icon-"].icon-large, -.btn [class*=" icon-"].icon-large { - margin-top: -0.5em; -} -a [class^="icon-"], -a [class*=" icon-"] { - cursor: pointer; -} -.icon-glass { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-music { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-search { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-envelope { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-heart { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-star { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-star-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-user { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-film { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-th-large { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-th { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-th-list { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ok { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-remove { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-zoom-in { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-zoom-out { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-off { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-signal { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cog { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-trash { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-home { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-file { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-time { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-road { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-download-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-download { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-upload { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-inbox { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-play-circle { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-repeat { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-refresh { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-list-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-lock { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-flag { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-headphones { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-volume-off { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-volume-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-volume-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-qrcode { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-barcode { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-tag { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-tags { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-book { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bookmark { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-print { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-camera { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-font { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bold { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-italic { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-text-height { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-text-width { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-align-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-align-center { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-align-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-align-justify { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-list { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-indent-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-indent-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-facetime-video { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-picture { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-pencil { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-map-marker { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-adjust { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-tint { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-edit { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-share { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-check { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-move { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-step-backward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fast-backward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-backward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-play { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-pause { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-stop { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-forward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fast-forward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-step-forward { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-eject { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-plus-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-minus-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-remove-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ok-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-question-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-info-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-screenshot { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-remove-circle { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ok-circle { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ban-circle { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-arrow-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-arrow-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-arrow-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-arrow-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-share-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-resize-full { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-resize-small { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-plus { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-minus { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-asterisk { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-exclamation-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-gift { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-leaf { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fire { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-eye-open { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-eye-close { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-warning-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-plane { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-calendar { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-random { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-comment { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-magnet { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-retweet { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-shopping-cart { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-folder-close { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-folder-open { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-resize-vertical { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-resize-horizontal { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bar-chart { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-twitter-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-facebook-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-camera-retro { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-key { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cogs { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-comments { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-thumbs-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-thumbs-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-star-half { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-heart-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-signout { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-linkedin-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-pushpin { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-external-link { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-signin { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-trophy { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-github-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-upload-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-lemon { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-phone { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-check-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bookmark-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-phone-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-twitter { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-facebook { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-github { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-unlock { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-credit-card { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-rss { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hdd { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bullhorn { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bell { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-certificate { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hand-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hand-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hand-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hand-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle-arrow-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle-arrow-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle-arrow-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle-arrow-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-globe { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-wrench { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-tasks { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-filter { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-briefcase { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fullscreen { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-group { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-link { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cloud { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-beaker { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cut { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-copy { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-paper-clip { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-save { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-sign-blank { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-reorder { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-list-ul { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-list-ol { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-strikethrough { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-underline { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-table { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-magic { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-truck { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-pinterest { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-pinterest-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-google-plus-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-google-plus { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-money { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-caret-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-caret-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-caret-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-caret-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-columns { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-sort { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-sort-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-sort-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-envelope-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-linkedin { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-undo { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-legal { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-dashboard { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-comment-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-comments-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bolt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-sitemap { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-umbrella { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-paste { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-lightbulb { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-exchange { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cloud-download { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-cloud-upload { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-user-md { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-stethoscope { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-suitcase { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bell-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-coffee { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-food { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-file-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-building { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-hospital { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ambulance { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-medkit { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fighter-jet { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-beer { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-h-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-plus-sign-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-double-angle-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-double-angle-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-double-angle-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-double-angle-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-angle-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-angle-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-angle-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-angle-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-desktop { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-laptop { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-tablet { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-mobile-phone { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle-blank { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-quote-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-quote-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-spinner { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-circle { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-reply { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-folder-close-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-folder-open-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-expand-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-collapse-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-smile { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-frown { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-meh { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-gamepad { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-keyboard { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-flag-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-flag-checkered { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-terminal { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-code { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-reply-all { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-mail-reply-all { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-star-half-full, -.icon-star-half-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-location-arrow { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-crop { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-code-fork { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-unlink { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-question { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-info { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-exclamation { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-superscript { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-subscript { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-eraser { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-puzzle-piece { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-microphone { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-microphone-off { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-shield { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-calendar-empty { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-fire-extinguisher { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-rocket { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-maxcdn { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-sign-left { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-sign-right { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-sign-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-chevron-sign-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-html5 { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-css3 { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-anchor { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-unlock-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-bullseye { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ellipsis-horizontal { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ellipsis-vertical { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-rss-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-play-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-ticket { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-minus-sign-alt { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-check-minus { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-level-up { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-level-down { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-check-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-edit-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-external-link-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.icon-share-sign { - *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: -0.15000000000000002 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.7; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: #333333; - background-color: #e9e9e9; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #333333; - text-decoration: none; - outline: 0; - background-color: #e9e9e9; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #333333; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; -} -.well-small { - padding: 9px; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 1.7; - color: #000000; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 1.7; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - background-color: #f5f5f5; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - *margin-left: .3em; -} -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); -} -.btn-large { - padding: 11px 19px; - font-size: 18px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 13px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 10.5px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - color: #ffffff; - background-color: #25318f; - border-color: #2c218f #2c218f #191351; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2c218f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #2c218f; - *background-color: #251c7a; -} -.btn-primary:active, -.btn-primary.active { - background-color: #1f1766 \9; -} -.btn-warning { - color: #ffffff; - background-color: #faa732; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - background-color: #b52d2b; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - background-color: #5bb75b; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - background-color: #49afcd; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - background-color: #363636; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #213b8f; -} -.btn-link:hover, -.btn-link:focus { - color: #2f55cd; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 0.85; - margin-bottom: 0.85; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 10.5px; -} -.btn-group > .btn-small { - font-size: 13px; -} -.btn-group > .btn-large { - font-size: 18px; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn.large:first-child { - margin-left: 0; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #2c218f; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 1.7; - background-color: #fcf8e3; - border: 1px solid #fbeed5; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 1.7; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 1.7; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 1.7; - color: #999999; - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - background-color: #213b8f; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: -0.15000000000000002 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 1.7; - border: 1px solid transparent; -} -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - background-color: #f2f2f2; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #213b8f; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav .dropdown-toggle .caret { - border-top-color: #213b8f; - border-bottom-color: #213b8f; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #2f55cd; - border-bottom-color: #2f55cd; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 1.7; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 55px; - padding-left: 20px; - padding-right: 20px; - background-color: #ededed; - border: 1px solid #c7c7c7; - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 26.65px 20px 26.65px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #ffffff; -} -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 55px; - color: #777777; -} -.navbar-link { - color: #253237; -} -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} -.navbar .divider-vertical { - height: 55px; - margin: 0 9px; - border-left: 1px solid #e5e5e5; - border-right: 1px solid #f2f2f2; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 12.5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 12.5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 12.5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 26.65px 15px 26.65px; - color: #253237; - text-decoration: none; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #d8d8d8; -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - background-color: #e0e0e0; - border-color: #d8d8d8 #d8d8d8 #b2b2b2; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #d8d8d8; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #d8d8d8; - *background-color: #cccccc; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #bfbfbf \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #d8d8d8; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #253237; - border-bottom-color: #253237; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; -} -.navbar-inverse .navbar-inner { - background-color: #1f2129; - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #1b2033; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #1b2033; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #1b2033; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #475486; - border-color: #1b2033; - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - background-color: #ffffff; - border: 0; - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - background-color: #14151a; - border-color: #121622 #121622 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #121622; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #121622; - *background-color: #090b12; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #010101 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 1.7; - list-style: none; - background-color: #f5f5f5; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 1.7 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; - margin-left: 0; - margin-bottom: 0; -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 1.7; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 18px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 13px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} -.pager { - margin: 1.7 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; -} -.popover-title:empty { - display: none; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 1.7; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 1.7; - border: 1px solid #ddd; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #213b8f; -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media-object { - display: block; -} -.media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} -.media-list { - margin-left: 0; - list-style: none; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - background-color: #999999; -} -.badge { - padding-left: 9px; - padding-right: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 1.7; - margin-bottom: 1.7; - background-color: #f7f7f7; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - background-color: #0e90d2; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 1.7; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 1.7; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); -} -.carousel-indicators .active { - background-color: #fff; -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 1.7; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 2.55; - color: inherit; - background-color: #eeeeee; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 2.55; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} \ No newline at end of file diff --git a/docs/theme/mkdocs/css/dockerfile_tutorial.css b/docs/theme/mkdocs/css/dockerfile_tutorial.css deleted file mode 100644 index ac3f538f3e..0000000000 --- a/docs/theme/mkdocs/css/dockerfile_tutorial.css +++ /dev/null @@ -1,63 +0,0 @@ -pre { - background-color: #F5F5F5; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px 4px 4px 4px; - display: block; - font-size: 13px; - line-height: 20px; - margin: 0 0 10px; - padding: 9.5px; - white-space: pre-wrap; - word-break: break-all; - word-wrap: break-word; -} -code, pre { - border-radius: 3px 3px 3px 3px; - color: #333333; - font-family: Monaco,Menlo,Consolas,"Courier New",monospace; - font-size: 12px; - padding: 0 3px 2px; -} - -.terminal { - color: #AAAAAA; - background-color: black; -} - -.terminal span.command { - color: white; - font-weight: bold; -} - -.error_input { - border-color: #B94A48 !important; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset !important; -} - -input.level { - width: 150px; - height: 2.5em; - display: inline-block; -} -div.level_error { - width: 300px; - display: inline-block; - padding: 7px 12px; -} -.alert { - text-align:center; -} -#check_level_questions { - margin-top: 10px; -} -.form-inline input.l_fill { - height: 20px; - border-radius: 0; - width: 90px; - margin-right: 0; - padding: 0 0 2px 0; -} -.dockerfile.back { - display: block; - margin-top: 5px; -} \ No newline at end of file diff --git a/docs/theme/mkdocs/css/docs.css b/docs/theme/mkdocs/css/docs.css deleted file mode 100644 index 767aa1f8e3..0000000000 --- a/docs/theme/mkdocs/css/docs.css +++ /dev/null @@ -1,364 +0,0 @@ -#top-header { - margin-top: 26px; - margin-bottom: 10px; -} - -#top-header .header2 { - font-weight: 400; -} - -#usernav > ul { - margin-top: 10px; - z-index: 99999; -} - -.menu-caption { - padding-bottom: 10px; -} - -#toc_table { - margin-top: 10px; -} - -#leftnav { - height: 100%; - overflow: hidden; -} - -#leftnav .nav ul { - line-height: 1; - margin: 10px 10px 0px 16px; - padding: 0; - list-style: none; -} -#leftnav .nav li ul a, -#leftnav .nav li ul a:hover { - margin: 0 !important; - padding: 0 !important; - font-size: 13px; - font-weight: 400; - color: #394d54; -} -#leftnav .nav li ul a:hover { - color: #24b8eb; -} - -#leftnav .nav.nav-tabs li a, -#leftnav .nav.nav-tabs li li { - line-height: 1.1 !important; -} - -#leftnav li { - margin-top: 20px; - // text-indent: -16px; - padding-left: 10px; -} -#leftnav .nav-tabs.nav ul li { - margin-top: 5px; -} - -.content-body { - padding: 0px 0px 0px 20px; -} - -ol { - padding-left: 22px; -} - -ol li { - margin: 8px; -} - -pre { - font-size: 12px; - line-height: 1.5; -} - -/* Main Navigation */ -#nav_menu > #docsnav { - max-width: 940px; - width: 940px; - margin: 0 auto; -} -#nav_menu > #docsnav > #nav_search { - margin-top: 10px; -} -.search_input:focus { - background: #fff; - outline: none; -} -#nav_menu > #docsnav > #main-nav { - height: 50px; - margin: 0px; - padding: 0em; -} -#nav_menu > #docsnav > #main-nav > li > a { - color: #253237; -} -#nav_menu > #docsnav > #main-nav > li.dd_on_hover { - background: #d3f1fb; - color: #253237; -} -#nav_menu > #docsnav > #main-nav > li > span > b { - border-top-color: #b1d5df !important; -} -#nav_menu > #docsnav > #main-nav > li.dd_on_hover > span > b { - border-top-color: #71afc0 !important; -} -#nav_menu > #docsnav > #main-nav > li form { - margin-top: -12px; -} -#nav_menu > #docsnav > #main-nav > li.home > a { - color: #fff; -} -#nav_menu > #docsnav > #main-nav > li.home:hover { - background: #b1d5df; -} -#nav_menu > #docsnav > #main-nav > li.home:hover > a { - color: #5992a3; -} -#nav_menu { - background: #E8E8E8; - position: relative; - width: 100%; - height: 54px; - z-index: 1000; - top: auto; - padding: 0px 15px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -#nav_menu #docsnav #main-nav > li { - font-size: 15px; - font-weight: 400; - color: #253237; - line-height: 2em; - display: block; - padding: 0 12px 0 12px; - line-height: 54px; - height: 54px; -} -#nav_menu #docsnav #main-nav > li.active { - background: #ade5f9; /* url("../img/nav/caret-down-subnav-icon.svg") no-repeat 87% 50%;*/ -} -#nav_menu #docsnav #main-nav > li.dd_on_hover { - /*background: #ade5f9 url("../img/nav/caret-down-subnav-icon.svg") no-repeat 87% 50%;*/ -} -#nav_search { - padding-top: 2px; -} -#nav_search input[type="text"] { - width: 220px; - height: 30px; - margin: 0; - background: #ffffff url("../img/nav/search-icon.svg") no-repeat 95% 50%; -} -/* Navigation Submenu */ -.dd_menu { - cursor: pointer; -} -.dd_menu .dd_submenu { - display: none; - position: absolute; - top: 54px; - list-style: none; - margin: 0px; - margin-left: -12px; - overflow: hidden; - overflow-y: auto; - background: #fff; - border: 1px solid #ccc; - border-top: none; - border-bottom: 3px solid #ccc; - -webkit-border-radius: 0px 0px 4px 4px; - -moz-border-radius: 0px 0px 4px 4px; - border-radius: 0px 0px 4px 4px; - padding: 0px; -} -.dd_menu.dd_on_hover .dd_submenu { - display: block; -} -.dd_menu.dd_on_hover .dd_submenu > li:first-child { - border: none; -} -.dd_menu.dd_on_hover .dd_submenu > li { - border-top: 1px solid #ddd; -} -.dd_menu.dd_on_hover .dd_submenu > li.active > a { - border-color: #b1d5df; - color: #FF8100 !important; -} -.dd_menu.dd_on_hover .dd_submenu > li > a { - padding: 0.6em 0.8em 0.4em 0.8em; - width: 100%; - display: block; -} -.dd_menu li a { - font-size: 15px; - font-weight: 400; - color: #005976; -} -.dd_menu li a:hover { - text-decoration: none; - font-size: 15px; - font-weight: 400; - color: #24b8eb; -} - -/* Search Page */ -#tipue_search_input { - height: 30px; - margin: 0; - background: #ffffff url("../img/nav/search-icon.svg") no-repeat 95% 50%; -} - -.alert-red-block { - margin: 10px 0px; - background: #edd3d7; - border: none; - margin-bottom: 20px; -} - -.content-body ul { - padding: 10px 0px 10px 20px; - list-style-position: inherit; - list-style: circle; -} - -.content-body ul li { - padding-bottom: 5px; -} - -.content-body ul ul { - padding: 10px 0px 10px 40px; -} - -.content-body h1 { - display: block !important; - font-size: 27px; - font-weight: 400; - color: #394d54; - line-height: 1.33; - margin-bottom: 8px; - margin-top: 6px; -} - -.content-body h2 { - font-size: 21px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - margin-bottom: 4px; - margin-top: 10px; -} - -.content-body h3 { - font-size: 18px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - margin-bottom: 4px; - margin-top: 10px; -} - -.content-body h4 { - font-size: 16px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - margin-bottom: 4px; - margin-top: 10px; -} - -.content-body p { - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; -} - -.content-body p code { - background-color: #FCFCFC; - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border: 1px solid #dbdde0; - color: #394d54; - padding-left: 6px; - padding-right: 6px; - margin-bottom: 2px; -} - -.content-body blockquote { - margin: 0px !important; - margin-bottom: 20px !important; - margin-top: 20px !important; - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - font-style: italic; - border: none; - border-left: 4px solid #ade5f9; - padding: 10px; - padding-left: 15px; -} - -.content-body ul { - margin-top: 0px !important; -} - -.content-body blockquote a { - color: #24b8eb; -} - -.content-body blockquote a:hover { - color: #008bb8; -} - -.content-body ul { - margin-top: 0px !important; -} - -.content-body pre { - font-family: Monaco, Consolas, "Lucida Console", monospace; - background-color: #FCFCFC; - margin-bottom: 20px; - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - overflow-x: auto; -} -.content-body pre code { - overflow-wrap: normal; - white-space: pre; -} - -.content-body strong { - font-weight: bold; -} - -/* Logged-in/out header */ -.topmostnav_loggedin { - display: none; -} -#topmostnav.public .brand { - padding-left: 0px !important; -} -.navbar #usernav .nav li { - padding-top: 0px !important; -} -table.table tr td img { - width:100%; -} -#versionnav ul { - list-style: none outside none; -} -#versionnav ul ul { - padding: 0; -} - -/* over-ride the prettyPrint colouring */ - -.str, .atv { color: #48484C; } diff --git a/docs/theme/mkdocs/css/font/FontAwesome.otf b/docs/theme/mkdocs/css/font/FontAwesome.otf deleted file mode 100644 index 4dfe30ac7a..0000000000 Binary files a/docs/theme/mkdocs/css/font/FontAwesome.otf and /dev/null differ diff --git a/docs/theme/mkdocs/css/font/fontawesome-webfont.eot b/docs/theme/mkdocs/css/font/fontawesome-webfont.eot deleted file mode 100755 index e054c93d18..0000000000 Binary files a/docs/theme/mkdocs/css/font/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/theme/mkdocs/css/font/fontawesome-webfont.svg b/docs/theme/mkdocs/css/font/fontawesome-webfont.svg deleted file mode 100755 index 36d43b844a..0000000000 --- a/docs/theme/mkdocs/css/font/fontawesome-webfont.svg +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/css/font/fontawesome-webfont.ttf b/docs/theme/mkdocs/css/font/fontawesome-webfont.ttf deleted file mode 100755 index 7ec2e1de89..0000000000 Binary files a/docs/theme/mkdocs/css/font/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/theme/mkdocs/css/font/fontawesome-webfont.woff b/docs/theme/mkdocs/css/font/fontawesome-webfont.woff deleted file mode 100755 index 27d80b123d..0000000000 Binary files a/docs/theme/mkdocs/css/font/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/theme/mkdocs/css/img/glyphicons-halflings-white.png b/docs/theme/mkdocs/css/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29..0000000000 Binary files a/docs/theme/mkdocs/css/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/docs/theme/mkdocs/css/img/glyphicons-halflings.png b/docs/theme/mkdocs/css/img/glyphicons-halflings.png deleted file mode 100644 index 686433b297..0000000000 Binary files a/docs/theme/mkdocs/css/img/glyphicons-halflings.png and /dev/null differ diff --git a/docs/theme/mkdocs/css/main.css b/docs/theme/mkdocs/css/main.css deleted file mode 100644 index 270c220fd5..0000000000 --- a/docs/theme/mkdocs/css/main.css +++ /dev/null @@ -1,2176 +0,0 @@ -/* some core mixins*/ -/* core shared with other docker projects */ -/* ****************************** - Core Docker style file - - used on - www.docker.com - docker-index -****************************** */ -/* this is about 10% darker, but slightly different */ -.debug { - border: 2px dotted red !important; -} -.debugbg { - background-color: rgba(255, 207, 139, 0.5) !important; -} -.highlight1 { - color: green !important; -} -.highlight2 { - color: red !important; -} -body { - margin: 0; - color: #394d54; - background-color: #fff; -} -.content { - padding-top: 20px; -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 18px; - font-weight: 400; - color: #394d54; - line-height: 1; - line-height: 1.4; -} -h4, -h5, -h6 { - font-size: 16px; -} -p { - margin: 0 0 1em 0; - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; -} -p strong { - font-size: 14px; - font-weight: 500; - color: #394d54; - line-height: 1.7; -} -p a { - text-decoration: underline; -} -p a.btn { - text-decoration: none; -} -.time { - font-size: 14px; - font-weight: 400; - color: #949da7; -} -span.read-more { - margin-left: 15px; - white-space: nowrap; -} -div[class*='span'] { - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.borderRadiusCode { - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; -} -.box { - padding: 18px; - margin-bottom: 20px; - border: 1px solid #dbdde0; - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; -} -.box h1, -.box h2, -.box h3, -.box h4 { - font-weight: 700; - font-size: 18px; - line-height: 18px; - margin: 0 0 10px 0; -} -.tbox.full { - margin: -18px; -} -.fleft { - position: relative; - float: left; -} -.fright { - position: relative; - float: right; -} -.nested { - padding: 18px; - margin-left: 0px; -} -.paper { - background-color: white; - padding-top: 30px; - padding-bottom: 30px; -} -.float-left { - float: left; - margin-right: 15px; - margin-bottom: 15px; -} -.float-right { - float: right; - margin-left: 15px; - margin-bottom: 15px; -} -.textcenter { - text-align: center; -} -.textright { - text-align: right; -} -.textsmaller { - font-size: 13px; -} -.modal-backdrop { - opacity: 0.4; -} -.placeholder-empty { - width: 100%; - color: grey; - min-height: 100px; - font-size: larger; - display: -webkit-flex; - display: -moz-flex; - display: flex; - -webkit-flex-flow: row; - flex-flow: row; - -webkit-align-items: center; - align-items: center; - -webkit-justify-content: center; - justify-content: center; -} -.span4andahalf { - width: 340px !important; -} -code { - white-space: pre-line; -} -.btn { - padding: 6px 15px; - line-height: 1.7; -} -.btn-primary, -.btn-danger { - padding: 6px 15px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #008bb8; - font-size: 14px; - font-weight: 400; - color: #fff; - box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.16); -} -.btn-primary:hover, -.btn-danger:hover, -.btn-primary:active, -.btn-danger:active, -.btn-primary:focus, -.btn-danger:focus { - background-color: #24b8eb; -} -.btn-primary.disabled, -.btn-danger.disabled { - background-color: #676668; -} -.btn-danger { - background-color: #b74b4b !important; -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger:focus { - background-color: #edd3d7 !important; -} -.btn-mini { - padding: 1px 7px !important; - font-size: 13px !important; -} -.nav-button1 { - padding: 5px 24px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #ff8100; - font-size: 14px; - font-weight: 700; - color: #fff; -} -.nav-button1:hover, -.nav-button1:active, -.nav-button1:focus { - background-color: #ffa141; -} -.btn.nav-button2 { - border: 1px solid #253237 !important; - padding: 5px 24px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #fff; - font-size: 14px; - font-weight: 700; - color: #253237; -} -.btn.nav-button2:hover, -.btn.nav-button2:active, -.btn.nav-button2:focus { - border-color: #24b8eb !important; - font-size: 14px; - font-weight: 700; - color: #24b8eb; -} -.primary-cta-button1 { - padding: 9px 24px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #ff8100; - font-size: 18px; - font-weight: 700; - color: #fff; -} -.primary-cta-button1:hover, -.primary-cta-button1:active, -.primary-cta-button1:focus { - background-color: #ffa141; -} -.primary-cta-button2 { - padding: 9px 24px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #005976; - font-size: 18px; - font-weight: 700; - color: #fff; -} -.primary-cta-button2:hover, -.primary-cta-button2:active, -.primary-cta-button2:focus { - background-color: #24b8eb; -} -.btn, -.btn-group { - border: none; - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; -} -.btn:hover, -.btn-group:hover, -.btn:active, -.btn-group:active, -.btn:focus, -.btn-group:focus { - color: #fff; -} -.add-repository .docker-caret { - display: inline-block; - background-color: yellow; - width: 15px; - height: 15px; - background: url("../img/dashboard/caret-down-create-new-icon.svg") no-repeat 70% 86%; -} -.add-repository .btn.open { - background-color: #005976; -} -/* ======================= - Sticky footer -======================= */ -html, -body { - height: 100%; - /* The html and body elements cannot have any padding or margin. */ -} -/* Wrapper for page content to push down footer */ -#wrap { - /* Negative indent footer by it's height */ - margin: 0 auto -379px; -} -/* Set the fixed height of the footer here */ -#push-footer, -#footer { - height: 379px; - background: #253237; -} -#footer { - padding-top: 36px; - -moz-box-sizing: border-box; - box-sizing: border-box; - /* Social */ -} -#footer .copyright { - margin-top: 40px; -} -#footer .primary-button:hover { - color: #eeeeee; - text-decoration: none; -} -#footer ul { - margin-top: 0px; -} -#footer form { - display: inline-block; - width: 220px; -} -#footer .search span { - margin-bottom: 5px; - display: block; -} -#footer .search label { - display: none; -} -#footer .search ul { - display: none; -} -#footer .search form input { - background: #253237; - border-color: #ade5f9; - width: 220px; - height: 37px; - margin: 0px 0px 12px 0px !important; -} -#footer .search form button { - position: absolute; - display: block; - margin: -44px 220px; - background: none !important; - border: none; - outline: none; - color: #999999; -} -#footer .search form button:hover { - color: #eeeeee !important; -} -#footer a { - color: #949da7; -} -#footer a:hover { - text-decoration: none; - color: #eeeeee; -} -#footer .social { - width: 100px; - float: left; -} -#footer .social li a { - padding-left: 28px; -} -#footer .social li span { - float: left; - width: 24px; - height: 25px; - position: absolute; - margin: 1px 0px 2px -28px; -} -#footer .social .blog { - background: url(../img/footer/docker-blog-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .twitter { - background: url(../img/footer/twitter-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .googleplus { - background: url(../img/footer/googleplus-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .facebook { - background: url(../img/footer/facebook-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .youtube { - background: url(../img/footer/youtube-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .slideshare { - background: url(../img/footer/slideshare-24.png) no-repeat; - background-position: 0px -3px; -} -#footer .social .linkedin { - background: url(../img/footer/sprites-small_360.png) no-repeat; - background-position: -168px -3px; -} -#footer .social .github { - background: url(../img/footer/sprites-small_360.png) no-repeat; - background-position: -48px -3px; -} -#footer .social .reddit { - background: url(../img/footer/sprites-small_360.png) no-repeat; - background-position: -192px -3px; -} -#footer .social .angellist { - background: url(../img/footer/angellist-white.svg) no-repeat; - background-position: 5px; - height: 20px; -} -/* Social Links */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { - #footer .social .blog { - background: url(../img/footer/docker-blog-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } - #footer .social .twitter { - background: url(../img/footer/twitter-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } - #footer .social .googleplus { - background: url(../img/footer/googleplus-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } - #footer .social .facebook { - background: url(../img/footer/facebook-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } - #footer .social .youtube { - background: url(../img/footer/youtube-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } - #footer .social .slideshare { - background: url(../img/footer/slideshare-48.png) no-repeat; - background-size: 24px; - background-position: 0px -3px; - } -} -label { - font-size: 14px; - font-weight: 700; - color: #253237; -} -input[type="text"], -input[type="password"], -input[type="url"], -input[type="email"], -textarea, -select, -.bootstrap-select button { - width: 530px; - padding: 0 14px; - line-height: 11.7px; - height: 11.7px; - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - border: 1px solid #cccccc; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -input[type="text"][disabled], -input[type="password"][disabled], -input[type="url"][disabled], -input[type="email"][disabled], -textarea[disabled], -select[disabled], -.bootstrap-select button[disabled] { - font-size: 14px; - font-weight: 400; - color: #949da7; - background-color: #eeeeee; -} -input[type="text"]:invalid, -input[type="password"]:invalid, -input[type="url"]:invalid, -input[type="email"]:invalid, -textarea:invalid, -select:invalid, -.bootstrap-select button:invalid { - font-size: 14px; - font-weight: 400; - color: #b74b4b; - line-height: 1.7; - border-color: #b74b4b; - background-color: #edd3d7; -} -textarea { - padding: 12px 14px; - height: 100px; - line-height: 1.7; -} -.bootstrap-select button { - height: 13.7px; - background-color: #ffffff; -} -.bootstrap-select button:active, -.bootstrap-select button:focus, -.bootstrap-select button:hover { - background-color: #ffffff; -} -.bootstrap-select .dropdown-menu { - margin-top: 0; -} -.btn-group.open .btn.dropdown-toggle { - background-color: #ffffff; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-menu > li > a:active { - background-color: #ffffff; - color: #24b8eb; - outline: none; -} -.input-append .add-on, -.input-prepend .add-on { - border: none; - background-color: #f2f2f2; - line-height: 6.7px; - height: 6.7px; -} -.control-group.error label { - font-size: 14px; - font-weight: 400; - color: #b74b4b; - line-height: 1.7; -} -.control-group.success label { - font-size: 14px; - font-weight: 700; - color: #91c5c5; - line-height: 1.7; -} -.control-group.success input[type="text"], -.control-group.success input[type="password"] { - background: url("../img/icons/check-mark-green.svg") no-repeat 95% 50%; -} -input[type="submit"] { - line-height: 1.7; - border: none; - padding: 6px 15px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #008bb8; - font-size: 14px; - font-weight: 400; - color: #fff; - box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.16); -} -input[type="submit"]:hover, -input[type="submit"]:active, -input[type="submit"]:focus { - color: #fff; -} -input[type="submit"]:hover, -input[type="submit"]:active, -input[type="submit"]:focus { - background-color: #24b8eb; -} -input[type="submit"].disabled { - background-color: #676668; -} -input[type="radio"], -input[type="checkbox"] { - margin: 0 0.5em 0 0; - position: relative; - vertical-align: middle; - bottom: 1px; -} -input[type="reset"] { - font-size: 14px; - font-weight: 400; - color: #005976; - border: none; - background-color: #fff; -} -input[type="reset"]:hover { - font-size: 14px; - font-weight: 400; - color: #24b8eb; -} -.input-prepend .btn-group .dropdown-toggle { - font-size: 15px; - font-weight: 400; - color: #394d54; - background-image: url("../img/caret-down-user-icon.svg"); -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #24b8eb; -} -.alert { - padding: 8px 14px 8px 14px; - border: none; - /* &.alert-block { - line-height: 46px !important; - padding: 0 14px; - width: 532px; - .border-radius; - }*/ -} -.alert ul { - margin-top: 0; -} -.alert.alert-error { - font-size: 14px; - font-weight: 400; - color: #b74b4b; - line-height: 1.7; - background-color: #edd3d7; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert.alert-error a { - font-size: 14px; - font-weight: 700; - color: #b74b4b; - line-height: 1.7; -} -.alert.alert-info { - font-size: 14px; - font-weight: 400; - color: #24b8eb; - line-height: 1.7; - background-color: #d3f1fb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert.alert-info a { - font-size: 14px; - font-weight: 700; - color: #005976; - line-height: 1.7; -} -.alert.alert-success { - font-size: 14px; - font-weight: 400; - color: #91c5c5; - line-height: 1.7; - background-color: #e0f0d9; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert.alert-success a { - font-size: 14px; - font-weight: 700; - color: #91c5c5; - line-height: 1.7; -} -form dl { - margin: 0; -} -form dd { - margin: 0; -} -form dd.helptext { - margin-top: 3px; -} -form dd.helptext + dd { - margin-top: 22px; -} -form dt { - margin: 32px 0 8px 0; -} -form dt:first-child { - margin-top: 0; -} -form dt .error { - display: inline-block; - margin-bottom: 12px; - border-color: #b74b4b; - font-size: 14px; - font-weight: 400; - color: #b74b4b; - line-height: 1.7; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -form dt .error a { - font-size: 14px; - font-weight: 700; - color: #b74b4b; - line-height: 1.7; -} -.form-inline label { - margin: 0 15px 0 0; -} -.form-inline input[type="text"], -.form-inline input[type="password"], -.form-inline input[type="url"], -.form-inline input[type="email"], -.form-inline textarea { - width: 360px; - margin: 0 15px 0 0; -} -.form-inline input[type="submit"] { - margin: 0; -} -.form-inline select { - height: 11.7px; -} -div + .form-inline { - margin-top: 20px; -} -.form-inline + hr { - margin-top: 20px; -} -#stickynav .navbar-inner { - background-color: #3a4855; - border: none; - height: 30px; - min-height: 30px; - color: white; - text-align: right; -} -#stickynav .nav li a { - padding: 5px 14px; - color: #eeeeee; -} -#topmostnav { - border-bottom: 1px solid #dbdde0; -} -#topmostnav li a { - font-size: 14px; - font-weight: 700; - color: #253237; - line-height: 55px; - padding: 0 20px; -} -#topmostnav li a:hover { - font-size: 14px; - font-weight: 700; - color: #24b8eb; -} -#topmostnav li.active a { - background-color: #E8E8E8; -} -#topmostnav .brand { - margin: 8px 20px 0 8px; - padding: 0; -} -#topmostnav .navbar-index-search { - position: relative; - float: left; - margin: 13px 20px 0 0; - /* firefox 18- */ - /* firefox 19+ */ - /* ie */ -} -#topmostnav .navbar-index-search ::-webkit-input-placeholder { - padding-top: 0; -} -#topmostnav .navbar-index-search :-moz-placeholder { - padding-top: 0; -} -#topmostnav .navbar-index-search ::-moz-placeholder { - padding-top: 0; -} -#topmostnav .navbar-index-search :-ms-input-placeholder { - padding-top: 0; -} -#topmostnav .navbar-index-search input[type="text"] { - height: 27px; - margin-top: 0; - font-size: 14px; - font-weight: 400; - color: #949da7; - background: #ffffff url("../img/nav/search-icon.svg") no-repeat 95% 50%; - border-color: #dbdde0; - border-radius: 0; -} -#topmostnav .navbar-index-search .search-query { - -webkit-transition: box-shadow linear 0.2s, background linear 0.3s, width linear 0.3s; - -moz-transition: box-shadow linear 0.2s, background linear 0.3s, width linear 0.3s; - -ms-transition: box-shadow linear 0.2s, background linear 0.3s, width linear 0.3s; - -o-transition: box-shadow linear 0.2s, background linear 0.3s, width linear 0.3s; - transition: box-shadow linear 0.2s, background linear 0.3s, width linear 0.3s; - width: 140px; -} -#topmostnav.public { - border-bottom: none; - height: 80px; -} -#topmostnav.public .nav { - margin-right: 0; -} -#topmostnav.public li a { - line-height: 80px; - padding: 0 15px; -} -#topmostnav.public li.active a { - background-color: #E8E8E8; -} -#topmostnav.public #usernav .btn { - margin: 24px 0 0 13px; -} -#topmostnav.public .brand { - padding-left: 10px; - margin: 18px 15px 0 0; -} -.brand.logo a { - text-decoration: none; -} -.brand.logo a { - text-decoration: none; -} -.navbar .navbar-inner { - padding-right: 0px; - padding-left: 0px; -} -.navbar .brand { - margin-left: 0px; - float: left; - display: block; -} -.navbar .brand.logo { - padding-top: 0; - padding-bottom: 0; -} -.navbar .nav li a { - padding: 0; -} -.nav-underline { - height: 6px; - background-color: #71afc0; -} -.nav-login li a { - color: white; - padding: 10px 15px 10px; -} -.inline-icon { - margin-bottom: 6px; -} -.float-left { - float: left; - margin-right: 15px; - margin-bottom: 15px; -} -.float-right { - float: right; - margin-left: 15px; - margin-bottom: 15px; -} -.navbar #usernav .nav img { - margin-right: 8px; -} -.navbar #usernav .nav li { - padding-top: 15px; -} -.navbar #usernav .nav li a, -#versionnav .nav li a.dropdown-toggle { - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; - line-height: 30px; - padding: 0 20px 0 0; - background: url("../img/nav/caret-down-user-icon.svg") no-repeat 100% 50%; -} -.navbar #usernav .nav li a:hover, -#versionnav .nav li a.dropdown-toggle:hover { - background-image: url("../img/nav/caret-down-user-icon-over.svg"); -} -.navbar #usernav .nav li ul li, -#versionnav .version { - padding: 0; - margin: 0; - height: 28px; -} -.navbar #usernav .nav li ul li a { - padding: 0 0 0 12px; - background-image: none; - line-height: 28px; -} -.navbar #usernav .nav li ul li a:hover { - background-image: none; -} -.navbar-index-search input[type="text"] { - background-color: #fff; - border-color: #dbdde0; -} -/* -#usernav > a { - padding: 0 20px 0 0; - background: url(../img/caret-down-user-icon.svg) no-repeat 100% 50%; -} -#usernav > a:hover { - background-image: url(../img/caret-down-user-icon-over.svg); -} -*/ -#leftnav ul a { - padding: 0 0 0 19px; - font-size: 14px; - font-weight: 400; - color: #005976; -} -#leftnav ul a:hover { - font-size: 14px; - font-weight: 400; - color: #24b8eb; - text-decoration: none; -} -#leftnav div:first-child { - border: 1px solid #dbdde0; - margin-bottom: 22px; -} -#leftnav .nav { - margin: 0, 0, 20px, 0; -} -#leftnav .nav > li > a { - line-height: 22px; - font-size: 16px; - font-weight: 500; - color: #005976; -} -#leftnav .nav > li > a:hover { - font-size: 16px; - font-weight: 500; - color: #24b8eb; - text-decoration: none; - background-color: inherit; -} -#leftnav .nav.nav-tabs > li > a.dropdown-toggle, -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a { - background: url("../img/nav/caret-down-subnav-icon.svg") no-repeat 90% 50%; - font-size: 16px; - font-weight: 500; - color: #949da7; - line-height: 69px ; - height: 69px; -} -#leftnav .nav.nav-tabs > li > a.dropdown-toggle img, -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a img { - margin-right: 11px; -} -#leftnav .nav.nav-tabs > li > a.dropdown-toggle img.profile, -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a img.profile { - -webkit-border-radius: 20px; - -moz-border-radius: 20px; - border-radius: 20px; -} -#leftnav .nav.nav-tabs > li > a.dropdown-toggle:hover, -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a:hover { - font-size: 16px; - font-weight: 500; - color: #24b8eb; - text-decoration: none; -} -#leftnav .nav.nav-tabs > li > a.dropdown-toggle:focus, -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a:focus { - outline: none; -} -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu { - width: 100%; - margin: 0; - padding: 0; - border-style: solid; - border-color: #dbdde0; - border-width: 0 1px 1px 1px; - left: -1px; - top: 68px; -} -#leftnav .nav.nav-tabs li.dropdown .dropdown-menu li a { - background-image: none; - border-top: 1px solid #dbdde0; -} -#leftnav .nav.nav-tabs.nav-stacked > li > a { - border: 0; -} -Killwithfire #leftnav .nav.nav-tabs li.active a { - font-size: 16px; - font-weight: 500; - color: #394d54; - line-height: 2; - line-height: 48px; - background-color: #d3f1fb; - border-left: 10px solid #ade5f9; - padding-left: 9px; -} -Killwithfire #leftnav .nav.nav-tabs li.active a:hover { - font-size: 16px; - font-weight: 500; - color: #24b8eb; - text-decoration: none; - cursor: pointer; -} -Killwithfire #leftnav .nav.nav-tabs li.active a:focus { - outline: none; -} -#leftnav .nav.nav-tabs > li > a { - line-height: 48px; - font-size: 16px; - font-weight: 500; - color: #005976; -} -#leftnav .nav.nav-tabs > li > a:hover { - font-size: 16px; - font-weight: 500; - color: #24b8eb; - text-decoration: none; -} -#leftnav .nav.nav-tabs > li > a:focus { - outline: none; -} -#leftnav h3 { - font-size: 16px; - font-weight: 700; - color: #394d54; - line-height: 2; - margin: 23px 0 3px 0; - padding-left: 20px; -} -#leftnav .progress { - margin-left: 20px; - margin-right: 20px; - margin-bottom: 12px; -} -#leftnav #profile_badge { - margin-bottom: 0px; -} -#leftnav #profile_badge #profile_name { - text-align: left; - padding: .6em; - padding-bottom: .1em; - font-size: 1.3em; - font-weight: bolder; -} -#leftnav #profile_badge #profile_details ul { - padding: 0px; - padding-left: .6em; -} -#leftnav #profile_badge #profile_details ul li { - list-style-type: none; -} -#leftnav #subnav { - margin: 0 20px; -} -#leftnav #subnav h1 { - margin-bottom: 2px; - margin-top: 12px; -} -#leftnav #subnav ul li { - list-style-type: none; -} -#leftnav #subnav #billing_info .progress { - margin: 0px; -} -#leftnav #subnav #repo_count { - float: right; - color: #949da7; - font-style: oblique; - font-size: .8em; -} -#leftnav #subnav .buy-button { - margin-top: 8px; -} -.large-note { - font-size: 20px; - font-weight: 300; - color: #394d54; -} -.large-header { - font-size: 20px; - font-weight: 400; - color: #394d54; -} -.profile-link { - font-size: 20px; - font-weight: 400; - color: #005976; -} -.profile-link-hover { - font-size: 20px; - font-weight: 400; - color: #24b8eb; -} -.tile-number { - font-size: 20px; - font-weight: 500; - color: #949da7; -} -.subhead { - font-size: 18px; - font-weight: 400; - color: #394d54; - line-height: 1; -} -.secondary-nav-header { - font-size: 18px; - font-weight: 500; - color: #394d54; -} -.body-header { - font-size: 18px; - font-weight: 700; - color: #394d54; - line-height: 1.33; -} -.tab-link { - font-size: 18px; - font-weight: 500; - color: #005976; -} -.tab-hover { - font-size: 18px; - font-weight: 500; - color: #24b8eb; -} -.footer-title { - font-size: 18px; - font-weight: 400; - color: #ade5f9; - line-height: 1.8; -} -.primary-cta { - font-size: 18px; - font-weight: 700; - color: #fff; -} -.home-body-header { - font-size: 16px; - font-weight: 400; - color: #253237; -} -.tile-private { - font-size: 16px; - font-weight: 400; - color: #394d54; - line-height: 2; -} -.tile-medium { - font-size: 16px; - font-weight: 500; - color: #394d54; - line-height: 2; -} -.tile-header { - font-size: 16px; - font-weight: 700; - color: #394d54; - line-height: 2; -} -.secondary-nav { - font-size: 16px; - font-weight: 500; - color: #005976; -} -.secondary-nav-hover { - font-size: 16px; - font-weight: 500; - color: #24b8eb; - text-decoration: none; -} -.eyebrow { - font-size: 16px; - font-weight: 500; - color: #949da7; -} -.details-header { - font-size: 15px; - font-weight: 400; - color: #394d54; -} -.tertiary-nav { - font-size: 14px; - font-weight: 400; - color: #005976; -} -.tertiary-nav-hover { - font-size: 14px; - font-weight: 400; - color: #24b8eb; - text-decoration: none; -} -.home-body3 { - font-size: 14px; - font-weight: 400; - color: #253237; - line-height: 2; -} -.home-body1 { - font-size: 14px; - font-weight: 500; - color: #253237; - line-height: 2; -} -.emphasis1 { - font-size: 14px; - font-weight: 700; - color: #253237; -} -.body { - font-size: 14px; - font-weight: 400; - color: #394d54; - line-height: 1.7; -} -.body-bold { - font-size: 14px; - font-weight: 500; - color: #394d54; - line-height: 1.7; -} -.home-link3 { - font-size: 14px; - font-weight: 400; - color: #005976; -} -.home-link3-hover { - font-size: 14px; - font-weight: 400; - color: #24b8eb; -} -.emphasis1-hover { - font-size: 14px; - font-weight: 700; - color: #24b8eb; -} -.grey-body { - font-size: 14px; - font-weight: 400; - color: #949da7; -} -.primary-button { - font-size: 14px; - font-weight: 400; - color: #fff; -} -.nav-button { - font-size: 14px; - font-weight: 700; - color: #fff; -} -.emphasis2 { - font-size: 13px; - font-weight: 500; - color: #253237; -} -.small-body { - font-size: 13px; - font-weight: 400; - color: #394d54; - line-height: 2; -} -.header1 { - font-size: 44px; - font-weight: 500; - color: #253237; - line-height: 1.891; -} -.eyebrow-header { - font-size: 44px; - font-weight: 100; - color: #253237; - line-height: 1.891; -} -.header2 { - font-size: 32px; - font-weight: 300; - color: #394d54; -} -.header3 { - font-size: 26px; - font-weight: 300; - color: #394d54; - line-height: 1.3; -} -.header5 { - font-size: 21px; - font-weight: 300; - color: #394d54; -} -.alert-red-body { - font-size: 14px; - font-weight: 400; - color: #b74b4b; - line-height: 1.7; -} -.alert-red-link { - font-size: 14px; - font-weight: 700; - color: #b74b4b; - line-height: 1.7; -} -.alert-green-body { - font-size: 14px; - font-weight: 400; - color: #91c5c5; - line-height: 1.7; -} -.alert-green-link { - font-size: 14px; - font-weight: 700; - color: #91c5c5; - line-height: 1.7; -} -.alert-blue-body { - font-size: 14px; - font-weight: 400; - color: #24b8eb; - line-height: 1.7; -} -.alert-blue-link { - font-size: 14px; - font-weight: 700; - color: #005976; - line-height: 1.7; -} -/* specific pages */ -/* Home */ -#homepage { - /* Three Functional Blocks */ - /* What Is Docker? */ - /* How Is It Used? */ - /* What's Trending? */ - /* What Are They Saying? */ -} -#homepage h1 { - display: block !important; -} -#homepage h2 { - margin: 0 !important; -} -#homepage a { - color: #24b8eb; -} -#homepage a:hover { - color: #008bb8; - text-decoration: none; -} -#homepage #three { - padding-top: 86px; - text-align: center; -} -#homepage #three .header2 { - display: block; - margin-bottom: 8px !important; -} -#homepage #three .img { - height: 98px; - background-repeat: no-repeat !important; - display: block; - margin: 0 auto; - background-position: center; -} -#homepage #three #stack-icon { - background: url("../img/homepage/developer-stack-icon.png"); - background-size: 91px 77px; - width: 91px; -} -#homepage #three #container-icon { - background: url("../img/homepage/container-icon.png"); - background-size: 108px 83px; - width: 108px; -} -#homepage #three #rack-icon { - background: url("../img/homepage/server-rack-icon.png"); - background-size: 108px 83px; - width: 108px; -} -#homepage #three .home-body1 { - display: block; - height: 180px; -} -#homepage #what-is-docker { - padding-top: 70px; - padding-bottom: 102px; - text-align: center; - background: #f2fcff; -} -#homepage #what-is-docker #section-title h3 { - margin: 0 !important; -} -#homepage #what-is-docker #body { - background-image: url("../img/homepage/what-is-docker-arrow-loop.png"); - background-position: center; - background-repeat: no-repeat; - height: 404px; -} -#homepage #what-is-docker #body .halfling { - padding-top: 92px; - width: 260px; -} -#homepage #use .content { - margin-bottom: 36px; -} -#homepage #use #section-title { - margin-top: 62px; - margin-bottom: 46px; -} -#homepage #use #see-more { - text-align: center; - margin: 0px !important; - margin-top: 46px !important; - margin-bottom: 82px !important; -} -#homepage #whats-trending { - text-align: center; - background: #f2fcff; - padding-bottom: 76px; -} -#homepage #whats-trending #section-title { - margin: 52px 0px; -} -#homepage #whats-trending #body { - margin-bottom: 36px; -} -#homepage #whats-trending #body .bucket { - background: #ffffff; - border-top: 4px solid #ade5f9; - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 346px; - margin-top: 24px !important; -} -#homepage #whats-trending #body .bucket .content { - text-align: left; - height: 290px; - max-height: 290px; - margin: 0 !important; - margin-left: 15px !important; - margin-right: 19px !important; - overflow: hidden; - padding-top: 17px !important; -} -#homepage #whats-trending #body .bucket .view-more { - margin-right: 10px; - margin-bottom: 15px; -} -#homepage #whats-trending .official-repo { - height: 100px; - overflow: hidden; -} -#homepage #whats-trending .official-repo .repo-img { - margin-top: 8px; -} -#homepage #whats-trending .official-repo .repo-info { - width: 220px; - padding-left: 10px; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -#homepage #whats-trending .official-repo .repo-info .home-body-header { - margin-right: 6px; -} -#homepage #whats-trending .contributor { - height: 38px; - margin-bottom: 12px; - margin-top: 5px; -} -#homepage #whats-trending .contributor .avatar { - width: 36px; - height: 36px; -} -#homepage #whats-trending .contributor .name { - padding-left: 10px; - line-height: 38px; -} -#homepage #whats-trending .contributor .points { - padding-left: 10px; - line-height: 38px; - background: url("../img/homepage/homepage-cloud-upload-icon.svg"); - background-position: center left; - background-repeat: no-repeat; - width: 46px; - text-align: right; -} -#homepage #whats-trending .popular-repo { - margin-bottom: 48px; -} -#homepage #whats-trending .popular-repo .link { - height: 20px; - overflow: hidden; - margin-bottom: 1px; -} -#homepage #whats-trending .popular-repo .downloads { - padding-left: 34px; - line-height: 38px; - background: url("../img/homepage/homepage-cloud-download-icon.svg"); - background-position: center left; - background-repeat: no-repeat; - text-align: left; - margin-right: 15px; -} -#homepage #whats-trending .popular-repo .stars { - padding-left: 34px; - line-height: 38px; - background: url("../img/homepage/homepage-star-icon.svg"); - background-position: center left; - background-repeat: no-repeat; - text-align: left; -} -#homepage #what-are-they-saying { - padding-bottom: 74px; -} -#homepage #what-are-they-saying #section-title { - margin: 72px 0px 64px 0px; -} -#homepage #what-are-they-saying #tweets { - width: 930px; -} -#homepage #what-are-they-saying #tweets .who { - line-height: 16px; -} -#homepage #what-are-they-saying #tweets .who .tweet-name { - font-weight: bold; -} -#homepage #what-are-they-saying #tweets .who .tweet-body { - padding-left: 6px; -} -#homepage #what-are-they-saying #tweets .row { - margin-top: 12px; - margin-bottom: 24px; -} -#homepage #what-are-they-saying #tweets .avatar { - width: 30px; - height: 30px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -#homepage #what-are-they-saying .home-body-header { - line-height: 16px; -} -#homepage #what-are-they-saying .tile-private { - line-height: 16px; -} -#homepage #what-are-they-saying #up-down { - position: absolute !important; - margin-left: 950px; - width: 20px; -} -#homepage #what-are-they-saying #up-down span { - display: none; -} -#homepage #what-are-they-saying #up-down #up { - display: block; - height: 11px; - width: 20px; - margin-bottom: 180px; - background-image: url("../img/homepage/arrow-up-icon.svg"); -} -#homepage #what-are-they-saying #up-down #up:hover { - background-image: url("../img/homepage/arrow-up-icon-over.svg"); -} -#homepage #what-are-they-saying #up-down #down { - display: block; - height: 11px; - width: 20px; - background-image: url("../img/homepage/arrow-down-icon.svg"); -} -#homepage #what-are-they-saying #up-down #down:hover { - background-image: url("../img/homepage/arrow-down-icon-over.svg"); -} -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { - #home-banner #logo-block { - background: url("../img/homepage/docker-whale-home-logo+@2x.png"); - background-size: 459px 261px; - } - #three #stack-icon { - background: url("../img/homepage/developer-stack-icon+@2x.png"); - background-size: 91px 77px; - } - #three #container-icon { - background: url("../img/homepage/container-icon+@2x.png"); - background-size: 108px 83px; - } - #three #rack-icon { - background: url("../img/homepage/server-rack-icon+@2x.png"); - background-size: 108px 83px; - } - #what-is-docker #body { - background-image: url("../img/homepage/what-is-docker-arrow-loop+@2x.png"); - background-position: center; - background-repeat: no-repeat; - background-size: 764px 276px; - } -} -/* What is Docker? */ -#what-is-docker #banner-block { - height: 454px; - background-color: #f2fcff; -} -#what-is-docker #banner-block h1 { - margin: 0; - margin-top: 52px; -} -#what-is-docker #banner-block #video-block { - margin-top: 76px; -} -#what-is-docker #why-block #visual-block { - padding-top: 192px; - /* 89px */ - padding-left: 32px; -} -#what-is-docker #why-block #visual-block #devs-like-icon { - margin: 0 auto; - height: 114px; - width: 134px; - background-image: url("../img/what_is_docker/devs-like-icon.png"); - background-size: 134px 114px; - background-repeat: no-repeat; - background-position: center; -} -#what-is-docker #why-block #visual-block #devs-like-icon span { - display: none; -} -#what-is-docker #why-block #visual-block #dotted-line-arrow { - margin: 0 auto; - margin-top: 26px !important; - /* 0 */ - margin-bottom: 32px !important; - /* 19 */ - height: 261px; - width: 107px; - background-image: url("../img/what_is_docker/dotted-line-arrow.png"); - background-size: 107px 261px; - background-repeat: no-repeat; - background-position: center; -} -#what-is-docker #why-block #visual-block #dotted-line-arrow span { - display: none; -} -#what-is-docker #why-block #visual-block #sysadmins-like-icon { - margin: 0 auto; - height: 129px; - width: 121px; - background-image: url("../img/what_is_docker/sysadmins-like-icon.png"); - background-size: 121px 129px; - background-repeat: no-repeat; - background-position: center; -} -#what-is-docker #why-block #visual-block #sysadmins-like-icon span { - display: none; -} -#what-is-docker #why-block #copy-block { - padding-top: 106px; - padding-left: 28px; -} -#what-is-docker #why-block #copy-block h2 { - margin: 0; -} -#what-is-docker #why-block #copy-block #copy2 { - margin-top: 84px; - margin-bottom: 94px; -} -#what-is-docker #compare-block { - background-color: #f2fcff; - padding-top: 103px; - padding-bottom: 100px; -} -#what-is-docker #compare-block h1 { - margin: 0; -} -#what-is-docker #compare-block #copy-block { - max-width: 360px; -} -#what-is-docker #compare-block #copy-block #copy1 { - margin-top: 128px; -} -#what-is-docker #compare-block #copy-block #copy2 { - margin-top: 153px; - margin-bottom: 50px; -} -#what-is-docker #compare-block #curly-brace-large { - margin-top: 72px; - background-image: url("../img/what_is_docker/curly-brace-large.png"); - background-size: 33px 142px; - background-repeat: no-repeat; - background-position: center; - height: 142px; - width: 33px; -} -#what-is-docker #compare-block #curly-brace-small { - margin-top: 208px; - background-image: url("../img/what_is_docker/curly-brace-small.png"); - background-size: 27px 65px; - background-repeat: no-repeat; - background-position: center; - height: 65px; - width: 27px; -} -#what-is-docker #compare-block #visual-block { - max-width: 220px; -} -#what-is-docker #compare-block #visual-block * { - -moz-box-sizing: border-box; - box-sizing: border-box; - text-align: center; -} -#what-is-docker #compare-block #visual-block .base-block { - background: #394d54; - margin-top: 4px; - height: 31px; - line-height: 31px; - color: #ffffff; -} -#what-is-docker #compare-block #visual-block .docker-block { - background: #24b8eb; - margin-top: 4px; - height: 31px; - line-height: 31px; - color: #ffffff; -} -#what-is-docker #compare-block #visual-block .twin-block .left, -#what-is-docker #compare-block #visual-block .twin-block .right { - width: 108px; -} -#what-is-docker #compare-block #visual-block .twin-block .left div { - background: #91c5c5; - color: #ffffff; -} -#what-is-docker #compare-block #visual-block .twin-block .left .half-block1 { - height: 40px; - line-height: 40px; -} -#what-is-docker #compare-block #visual-block .twin-block .left .half-block2 { - height: 29px; - line-height: 29px; - margin: 4px 0px; -} -#what-is-docker #compare-block #visual-block .twin-block .left .half-block3 { - height: 63px; - line-height: 63px; -} -#what-is-docker #compare-block #visual-block .twin-block .right { - border: 3px solid #ffa141; -} -#what-is-docker #compare-block #visual-block .twin-block .right div { - background: #e0f0d9; -} -#what-is-docker #compare-block #visual-block .twin-block .right .half-block1 { - height: 37px; - line-height: 37px; -} -#what-is-docker #compare-block #visual-block .twin-block .right .half-block2 { - height: 29px; - line-height: 29px; - margin: 4px 0px; -} -#what-is-docker #compare-block #visual-block .twin-block .right .half-block3 { - height: 60px; - line-height: 60px; -} -#what-is-docker #compare-block #visual-block #visual1 { - margin-top: 73px; -} -#what-is-docker #compare-block #visual-block #visual2 { - margin-top: 102px; -} -#what-is-docker #compare-block #visual-block #visual2 .half-block2 { - margin-bottom: 0; -} -#what-is-docker #compare-block #visual-block #visual2 .right .half-block2 { - height: 26px; - line-height: 26px; -} -#what-is-docker #compare-block #buttons a { - margin-right: 20px; -} -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { - #what-is-docker #why-block #visual-block #devs-like-icon { - background-image: url("../img/what_is_docker/devs-like-icon-@2x.png"); - background-size: 134px 114px; - background-repeat: no-repeat; - background-position: center; - } - #what-is-docker #why-block #visual-block #dotted-line-arrow { - background-image: url("../img/what_is_docker/dotted-line-arrow+@2x.png"); - background-size: 107px 261px; - background-repeat: no-repeat; - background-position: center; - } - #what-is-docker #why-block #visual-block #sysadmins-like-icon { - background-image: url("../img/what_is_docker/sysadmins-like-icon+2x.png"); - background-size: 121px 129px; - background-repeat: no-repeat; - background-position: center; - } - #what-is-docker #compare-block #curly-brace-large { - background-image: url("../img/what_is_docker/curly-brace-large+@2x.png"); - background-size: 33px 142px; - background-repeat: no-repeat; - background-position: center; - } - #what-is-docker #compare-block #curly-brace-small { - background-image: url("../img/what_is_docker/curly-brace-small+@2x.png"); - background-size: 27px 65px; - background-repeat: no-repeat; - background-position: center; - } -} -.partners-list { - margin-top: 32px; -} -.partners-list > .row-fluid { - margin: 20px 0px; -} -.partners-list > .row-fluid > .partners-logo { - padding-right: 20px; - text-align: center; -} -.partners-list > .row-fluid > .partners-logo > img { - max-height: 70px; -} -/* Plans - Pricing Block */ -#plans .row .span2 { - margin-left: 0; -} -#plans #features { - -moz-box-sizing: border-box; - box-sizing: border-box; - text-align: right; - width: 144px; - height: 435px; - padding-top: 84px; - padding-bottom: 12px; -} -#plans #features .feature-label { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 42px; - margin-bottom: 8px; - padding-top: 6px; - padding-right: 8px; -} -#plans #free { - background-color: #f2fcff; -} -#plans .plan { - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0px 6px 0px 0px; - background: #d3f1fb; - width: 105px; - height: 435px; - text-align: center; -} -#plans .plan .plan-name { - padding: 10px; - height: 60px; - line-height: 62px; -} -#plans .plan .plan-feature { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 42px; - line-height: 30px; - margin-bottom: 8px; - padding: 6px; -} -#plans .plan .plan-feature .feature-yes { - display: block; - height: 23px; - background-image: url("../img/universal/docker-logo-pin.png"); - background-position: center; - background-repeat: no-repeat; - background-size: 22px 16px; -} -#display-table .row .span2 { - margin-left: 0; -} -#display-table #labels { - -moz-box-sizing: border-box; - box-sizing: border-box; - padding-right: 22px; - text-align: right; - padding-top: 84px; - padding-bottom: 12px; -} -#display-table #labels .column-label { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 42px; - margin-bottom: 8px; - padding-top: 6px; -} -#display-table #labels .column-label-high { - height: 100px !important; -} -#display-table .bg-dark { - background-color: #f2fcff; -} -#display-table .bg-light { - background-color: #d3f1fb; -} -#display-table .column-large { - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0px 16px 0px 0px; - width: 216px; - text-align: center; -} -#display-table .column-large .column-name { - padding: 10px; - height: 60px; - line-height: 62px; -} -#display-table .column-large .column-feature { - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 42px; - line-height: 30px; - margin-bottom: 8px; - padding: 6px; -} -#display-table .column-large .column-feature .feature-yes { - display: block; - height: 23px; - background-image: url("../img/universal/docker-logo-pin.png"); - background-position: center; - background-repeat: no-repeat; - background-size: 22px 16px; -} -#display-table .column-large .column-feature-high { - padding-left: 12px; - text-align: left; - height: 100px !important; -} -/* Usecases */ -#usecases .target-link { - text-align: right; -} -#usecases .row-fluid { - margin-top: 15px; - margin-bottom: 45px; -} -/* listing teams & people */ -/* Listing people (team, contributors etc.) */ -.list-people .team-member { - position: relative; - float: left; - margin: 0px 10px 10px 0; - box-sizing: border-box; - -moz-box-sizing: border-box; - background-color: #f2fcff; - border: 2px solid #d3f1fb; - max-width: 570px; -} -.list-people .team-member img { - width: 130px; - height: 130px; -} -.list-people .team-member .name { - position: absolute; - float: center; - bottom: 0px; - left: 0px; - right: 0px; - margin-right: auto; - margin-left: auto; - text-align: center; - line-height: 18px; - font-size: 16px; - padding: 10px 8px; - color: #ffffff; - background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 65%, rgba(0, 0, 0, 0.65) 99%); - /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(65%, rgba(0, 0, 0, 0.65)), color-stop(99%, rgba(0, 0, 0, 0.65))); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 65%, rgba(0, 0, 0, 0.65) 99%); - /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 65%, rgba(0, 0, 0, 0.65) 99%); - /* Opera 11.10+ */ - background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 65%, rgba(0, 0, 0, 0.65) 99%); - /* IE10+ */ - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 65%, rgba(0, 0, 0, 0.65) 99%); - /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#a6000000', GradientType=0); - /* IE6-9 */ -} -.list-people .team-member .bio { - display: none; -} -.entries h3 { - margin: 10px 0px 20px 0px !important; -} -.entries .event { - margin-bottom: 15px !important; -} -.entries .event .event-date { - margin: 0px !important; -} -.entries .event .event-event-title { - margin: 0px !important; -} -.entries .event p { - margin: 0px !important; -} -/* patches */ -#content { - padding-bottom: 100px; -} -ul { - list-style-position: inside; -} -h1 { - display: none; -} -h1, -h2, -h3 { - margin: 0; -} -a { - color: #24b8eb; - text-decoration: none !important; -} -a:hover { - color: #008bb8; - text-decoration: none; -} -.primary-cta-button1, -.primary-cta-button2 { - color: #ffffff !important; - padding: 6px 12px !important; -} -.action-buttons { - margin-top: 75px; -} -.header2, -.header3 { - display: block; -} -.center-cta-btn { - margin-top: 30px; - margin-left: 110px; -} -.expand { - min-height: 700px; - height: 100%; -} -.menu-caption { - display: block; - padding: 10px; - padding-bottom: 0; -} -.bg-clr-blue7 { - background-color: #f2fcff; -} -.bg-clr-blue11 { - background-color: #d3f1fb; -} -.padded { - border-collapse: separate; - border-spacing: 10px 10px; - border: 1px solid #fff; -} -/* Blocks for community/participate */ -#community-blocks { - text-align: center; - font-weight: bold; - font-size: 12px; -} -#community-blocks a { - -moz-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - width: 125px; - height: 125px; - padding: 8px; - margin: 0 auto; - background-color: #f2fcff; - border: 2px solid #d3f1fb; -} -#community-blocks a span { - display: block; -} -.margin-section { - margin: 30px 0px; -} -/* Logo - copy banner */ -#wrapping-banner { - text-align: center; - position: relative; - left: 0; - right: 0; - background: #ffffff; - /* Old browsers */ - background: -moz-linear-gradient(top, #ffffff 0%, #b8edff 50%, #83dfff 100%); - /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(50%, #b8edff), color-stop(100%, #83dfff)); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #ffffff 0%, #b8edff 50%, #83dfff 100%); - /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #ffffff 0%, #b8edff 50%, #83dfff 100%); - /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #ffffff 0%, #b8edff 50%, #83dfff 100%); - /* IE10+ */ - background: linear-gradient(to bottom, #ffffff 0%, #b8edff 50%, #83dfff 100%); - /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#83dfff', GradientType=0); - /* IE6-9 */ -} -#wrapping-banner h1, -#wrapping-banner h2, -#wrapping-banner h3 { - display: block; -} -#wrapping-banner h2 { - display: block; - margin-top: 20px !important; - margin-bottom: 20px !important; -} -#wrapping-banner .primary-cta-button1, -#wrapping-banner .primary-cta-button2 { - min-width: 180px; -} -#wrapping-banner #copy-block { - width: 425px; - margin-left: 26px; - margin-bottom: 104px; - margin-top: 74px !important; -} -#wrapping-banner #logo-block { - height: 261px; - width: 459px; - margin-top: 57px; - margin-bottom: 86px; - background: url("../img/homepage/docker-whale-home-logo+.png"); - background-size: 459px 261px; - background-repeat: no-repeat; -} -#wrapping-banner .eyebrow-header { - line-height: 46px; -} -#wrapping-banner .header1 { - line-height: 46px; -} -#wrapping-banner .subhead { - margin-top: 20px; - margin-bottom: 20px; - line-height: 30px; -} -#wrapping-banner .email-form { - margin-top: 18px; -} -#wrapping-banner .email-form label { - display: none; -} -#wrapping-banner .email-form ul[class=errorlist] { - list-style: none; -} -#wrapping-banner .email-form input[class=form-control] { - width: 300px; -} -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { - #wrapping-banner #logo-block { - background: url("../img/homepage/docker-whale-home-logo+@2x.png"); - background-size: 459px 261px; - } -} diff --git a/docs/theme/mkdocs/css/prettify-1.0.css b/docs/theme/mkdocs/css/prettify-1.0.css deleted file mode 100644 index e0df245523..0000000000 --- a/docs/theme/mkdocs/css/prettify-1.0.css +++ /dev/null @@ -1,28 +0,0 @@ -.com { color: #93a1a1; } -.lit { color: #195f91; } -.pun, .opn, .clo { color: #93a1a1; } -.fun { color: #dc322f; } -.str, .atv { color: #D14; } -.kwd, .prettyprint .tag { color: #1e347b; } -.typ, .atn, .dec, .var { color: teal; } -.pln { color: #48484c; } - -.prettyprint { - padding: 8px; -} -.prettyprint.linenums { - -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin: 0 0 0 33px; /* IE indents via margin-left */ -} -ol.linenums li { - padding-left: 12px; - color: #bebec5; - line-height: 20px; - text-shadow: 0 1px 0 #fff; -} diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols.textClipping b/docs/theme/mkdocs/fonts/LigatureSymbols.textClipping deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.eot b/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.eot deleted file mode 100644 index 4350e01ce2..0000000000 Binary files a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.eot and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.otf b/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.otf deleted file mode 100644 index 1926697261..0000000000 Binary files a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.otf and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.svg b/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.svg deleted file mode 100644 index 1133aa11d5..0000000000 --- a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.svg +++ /dev/null @@ -1,1299 +0,0 @@ - - - - - -Created by FontForge 20110222 at Thu Jan 31 03:56:08 2013 - By KazuyukiMotoyama -Created by KazuyukiMotoyama with FontForge 2.0 (http://fontforge.sf.net) OFL license - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.ttf b/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.ttf deleted file mode 100644 index 0338d4cb96..0000000000 Binary files a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.ttf and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.woff b/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.woff deleted file mode 100644 index 8a823128a8..0000000000 Binary files a/docs/theme/mkdocs/fonts/LigatureSymbols/LigatureSymbols-2.11.woff and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/README.txt b/docs/theme/mkdocs/fonts/LigatureSymbols/README.txt deleted file mode 100644 index da0665ed67..0000000000 --- a/docs/theme/mkdocs/fonts/LigatureSymbols/README.txt +++ /dev/null @@ -1,126 +0,0 @@ - -This font was found and taken from: -http://kudakurage.com/ligature_symbols/ - - -Use it as follows: - - - -

    Simple use for mailto link.

    -mail - -

    Use tha icon with text.

    -Twitter - -

    Use tha icon with unicode.

    -Amazon - - -/* CSS */ - -@font-face { - font-family: 'LigatureSymbols'; - src: url('LigatureSymbols-2.11.eot'); - src: url('LigatureSymbols-2.11.eot?#iefix') format('embedded-opentype'), - url('LigatureSymbols-2.11.woff') format('woff'), - url('LigatureSymbols-2.11.ttf') format('truetype'), - url('LigatureSymbols-2.11.svg#LigatureSymbols') format('svg'); - src: url('LigatureSymbols-2.11.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} - -.lsf, .lsf-icon:before { - font-family: 'LigatureSymbols'; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; -} - -.lsf-icon:before { - content:attr(title); - margin-right:0.3em; - font-size:130%; -} - -.lsf-icon.amazon:before { - content: '\E007'; -} - - - - - -Use by including this in your style sheet: - - - -// LigatureSymbols font kit -// ----------------------------------- // ----------------------------------- - - -@font-face { - font-family: 'LigatureSymbols'; - src: url('../fonts/LigatureSymbols/LigatureSymbols-2.11.eot'); - src: url('../fonts/LigatureSymbols/LigatureSymbols-2.11.eot?#iefix') format('embedded-opentype'), - url('../fonts/LigatureSymbols/LigatureSymbols-2.11.woff') format('woff'), - url('../fonts/LigatureSymbols/LigatureSymbols-2.11.ttf') format('truetype'), - url('../fonts/LigatureSymbols/LigatureSymbols-2.11.svg#LigatureSymbols') format('svg'); - font-weight: normal; - font-style: normal; -} - -.lsf { - font-family: 'LigatureSymbols'; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga=1, dlig=1"; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; -} -.lsf-icon:before { - content:attr(title); - margin-right:0.3em; - font-size:130%; - font-family: 'LigatureSymbols'; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga=1, dlig=1"; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; -} - - - - - -And then practice it by: - diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/index.html b/docs/theme/mkdocs/fonts/LigatureSymbols/index.html deleted file mode 100755 index 254ae9fd91..0000000000 --- a/docs/theme/mkdocs/fonts/LigatureSymbols/index.html +++ /dev/null @@ -1,1350 +0,0 @@ - - - - - Ligature Symbols - - - - - - - - - -
    -

    Ligature kudakurage Symbols

    -
    by Kazuyuki Motoyama
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SymbolLigatureUnicode
    tabletable, cell\E127
    copycopy, files\E038
    cutcut, scissors\E03b
    backspacebackspace\E010
    alignleftalignleft\E005
    aligncenteraligncenter\E004
    alignrightalignright\E006
    alignadjustalignadjust\E003
    italicitalic\E079
    boldbold\E01f
    underlineunderline\E132
    strikestrike\E159
    emphasisemphasis\E152
    codecode\E032
    linklink, chain\E082
    quotequote\E10b
    graphgraph\E05b
    magicmagic, effect\E089
    brushbrush\E022
    colorcolor, palette\E033
    contrastcontrast, adjust\E001
    inkink, water\E14a
    gradationgradation, grayscale\E149
    sepiasepia, grunge\E14e
    invertinvert\E14b
    paintpaint\E09b
    paramaterparamater, param, slider\E09c
    cropcrop\E039
    checkcheck, ok\E029
    checkboxcheckbox\E02a
    checkboxemptycheckboxempty\E02b
    pcpc, display, computer\E09e
    keyboardkeyboard\E07d
    mobilemobile, iphone, smartphone\E078
    horizontalhorizontal\E071
    verticalvertical\E138
    webweb\E13f
    mailmail\E08a
    shoppingshopping, cart\E119
    dashboarddashboard\E03c
    keykey\E07c
    snssns, network\E11f
    calendarcalendar\E15e
    dailycalendardailycalendar\E025
    banban\E012
    removeremove, close\E10f
    penpen, pencil, write\E09f
    erasereraser\E148
    editedit, addnew\E041
    tabstabs\E095
    tagtag\E128
    setupsetup, wrench, spanner\E117
    settingsetting, gear\E055
    etcetc, ellipsis\E043
    clipclip, attach\E030
    bookmarkbookmark\E021
    bookbook\E020
    albumalbum\E002
    useruser, you, human, man\E137
    friendfriend, users\E051
    groupgroup\E05c
    frustratefrustrate\E052
    laughlaugh\E07f
    winkwink\E081
    smilesmile\E11e
    surprisesurprise\E124
    troubletrouble\E12d
    malemale, man\E176
    femalefemale, woman, lady\E175
    gamegame\E054
    globeglobe, global, earth\E058
    homehome, house\E072
    buildingbuilding\E023
    rssrss, feed\E113
    serverserver\E16c
    sitemapsitemap\E16d
    appapp, application\E009
    memomemo\E08d
    mealmeal, dish, lunch\E08c
    coffeecoffee, cup\E146
    spaspa, onsen\E177
    collegecollege\E174
    bagbag\E173
    presentpresent, gift\E109
    umbrellaumbrella\E178
    twinkletwinkle, spark, hot\E073
    crowncrown\E03a
    categorycategory, drawer\E028
    circlecircle\E02e
    infoinfo, information\E075
    helphelp\E070
    refreshbuttonrefreshbutton\E14d
    terminalterminal\E16e
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SymbolLigatureUnicode
    filefile\E048
    printprint\E10a
    deletedelete, trash\E12c
    clearclear\E02f
    savesave, stock\E115
    uploadupload\E136
    cloudcloud\E031
    folderfolder\E04c
    cameracamera\E026
    photophoto, images\E101
    imageimage, img\E074
    barcodebarcode\E013
    phonephone, call\E100
    musicmusic\E094
    videovideo\E139
    playmediaplaymedia\E107
    recordrecord, mic, microphone\E10d
    playplay\E106
    pausepause\E09d
    stopstop\E123
    ejecteject\E042
    bellbell\E014
    volumeupvolumeup\E13d
    volumedownvolumedown\E13c
    volumevolume, volumeoff\E13b
    offoff, power\E098
    lightlight, brightness\E14c
    darkdark, darkness\E147
    locklock\E086
    unlockunlock\E134
    flagflag\E04a
    wifiwifi\E140
    timetime\E12b
    mapmap\E08b
    geogeo\E056
    locationlocation, direction\E085
    pinpin\E103
    walkingwalking\E13e
    bicyclebicycle\E015
    carcar\E027
    busbus\E024
    planeplane, airport\E105
    compasscompass\E036
    cursorcursor\E166
    pointerpointer\E16b
    grabgrab\E169
    arrowuparrowup\E00e
    arrowrightarrowright\E00d
    arrowdownarrowdown\E00b
    arrowleftarrowleft\E00c
    upup\E135
    rightright\E112
    downdown\E03e
    leftleft\E080
    backback\E00f
    nextnext\E096
    dropdowndropdown\E040
    sortsort\E120
    goodgood, like\E059
    badbad, nogood\E011
    fullfull\E053
    smallsmall\E11d
    movemove\E093
    undoundo\E133
    forwardforward\E04e
    replyreply\E111
    shareshare\E118
    loginlogin, in\E087
    logoutlogout, out\E088
    exchangeexchange\E045
    shuffleshuffle, random\E11a
    repeatrepeat, retweet\E110
    refreshrefresh, reload\E10e
    syncsync\E125
    externalexternal, newtab\E046
    addstaraddstar\E000
    starstar\E121
    staremptystarempty\E122
    heartheart, love\E06e
    heartemptyheartempty\E06f
    viewview, eye\E13a
    commentcomment, balloon\E034
    commentscomments, balloons\E035
    plusplus, add\E108
    minusminus\E08f
    zoominzoomin, zoom\E142
    zoomoutzoomout\E143
    searchsearch\E116
    menumenu\E08e
    tilemenutilemenu\E12a
    listlist\E084
    tiletile\E129
    notifynotify\E097
    -
    -

    Logos

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SymbolLigatureUnicode
    appleapple\E00a
    androidandroid\E008
    windowswindows\E151
    ubuntuubuntu\E17b
    amazonamazon\E007
    facebookfacebook\E047
    twittertwitter\E12f
    vkvk\E17c
    googlegoogle\E05a
    yahooyahoo\E172
    bingbing\E164
    hatenahatena\E05d
    hatenabookmarkhatenabookmark\E161
    diggdigg\E167
    linkedinlinkedin\E083
    myspacemyspace\E16a
    paperboypaperboy\E162
    miximixi\E090
    lineline\E157
    mobagemobage\E158
    greegree\E153
    skypeskype\E11b
    aimaim\E163
    yelpyelp\E17d
    foursquarefoursquare\E04d
    pinterestpinterest\E104
    flickrflickr\E04b
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SymbolLigatureUnicode
    tumblrtumblr\E12e
    wordpresswordpress\E171
    bloggerblogger\E165
    evernoteevernote\E044
    dropboxdropbox\E168
    slideshareslideshare\E179
    githubgithub\E057
    yapcasialogomarkyapcasialogomark\E15c
    dribbbledribbble\E03f
    cookpadcookpad\E037
    instapaperinstapaper\E076
    readabilityreadability\E10c
    gumroadgumroad\E154
    picasapicasa\E102
    instagraminstagram\E155
    deliciousdelicious\E03d
    youtubeyoutube\E141
    vimeovimeo\E170
    ustreamustream\E16f
    soundcloudsoundcloud\E17a
    chromechrome\E02c
    safarisafari\E114
    sleipnirsleipnir, chess, knight\E11c
    firefoxfirefox\E049
    operaopera\E099
    internetexplorerinternetexplorer, ie\E077
    -
    - -

    HTML & CSS

    -

    Please copy & paste this code to your HTML file or Stylesheet.

    - - - -

    Download

    -
    -

    - You can get Ligature Symbols for free. This Font is licensed under the SIL Open Font License for download and using.
    - Ligature Symbols has broad support for the modern browser (Chrome, Safari, Firefox, iOS - Mobile Safari, Android Browser). -

    - Downloadver.2.11 - zip file : 391KB -
    - -

    How to make this font ?

    -

    Ligature Symbols is to display the symbol with a ligature features. I created this font by using FontForge (open source postscript font editor).
    IF you want to learn more, you may read my blog entry.

    - -

    About me

    -
    - -
    -

    Kazuyuki Motoyama (kudakurage)

    -

    I have been working as a Web designer in Kyoto.
    UI Design / App Design / Illustration / HTML5&CSS3 / Javascript / PHP

    -
    - -
    - -
    - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/fonts/LigatureSymbols/style.css b/docs/theme/mkdocs/fonts/LigatureSymbols/style.css deleted file mode 100755 index 2e8d1f297d..0000000000 --- a/docs/theme/mkdocs/fonts/LigatureSymbols/style.css +++ /dev/null @@ -1,520 +0,0 @@ -@charset 'UTF-8'; - -@font-face { - font-family: 'LigatureSymbols'; - src: url('LigatureSymbols-2.11.eot'); - src: url('LigatureSymbols-2.11.eot?#iefix') format('embedded-opentype'), - url('LigatureSymbols-2.11.woff') format('woff'), - url('LigatureSymbols-2.11.ttf') format('truetype'), - url('LigatureSymbols-2.11.svg#LigatureSymbols') format('svg'); - font-weight: normal; - font-style: normal; -} - -.lsf { - font-family: 'LigatureSymbols'; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga=1, dlig=1"; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; -} -.lsf-icon:before { - content:attr(title); - margin-right:0.3em; - font-size:130%; - font-family: 'LigatureSymbols'; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga=1, dlig=1"; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; -} - - - -/* RESET */ -html, body, -div, -ul, ol, li, -dl, dt, dd, td, th, -h1, h2, h3, h4, h5, h6, -p, pre, blockquote, fieldset, -form, input, button, textarea { - margin: 0; - padding: 0; -} - -h1, h2, h3, h4, h5, h6, -pre, code, address, caption, cite, code, -em, strong, th { - font-size: 1.0em; - font-weight: normal; - font-style: normal; -} - -ul, ol, li { - list-style: none; -} - -fieldset, img { - border: none; -} - -img { - -ms-interpolation-mode: bicubic; -} - -caption, th { - text-align: left; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -input,textarea,select { - font-family: inherit; - font-size: inherit; - font-weight: inherit; -} - -input,textarea,select { - *font-size: 100%; -} - -button { - background-color: transparent; - text-decoration: none; -} - -label { - cursor: pointer; -} - -/* IEPNGFIX */ -img { behavior: url(lib/iepngfix.htc); } - -.main-image { - position:absolute; - top:-1000px; - width:400px; -} - -/* ELEMENT */ -body { - clear: both; - background-color: #ffffff; - text-align: center; - color: #333; - font-size: 16px; - font-weight: normal; - font-style: normal; - line-height: 1.5; - font-family : - Meiryo, - 'メイリオ', - 'Lucida Grande', - Verdana, - 'Hiragino Kaku Gothic Pro', - 'ヒラギノ角ゴ Pro W3', - 'MS Pゴシック', - 'MS P Gothic', - sans-serif; -} -a { - color: #006DBE; - font-weight: normal; - font-style: normal; - text-decoration: none; -} -a:hover { - text-decoration: underline; -} - -html{ - font-size:100%; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100%; - -webkit-font-smoothing:antialiased; - text-align:center; -} -#body { - width:900px; - margin:0 auto; -} -#copyright { - margin:60px 0 20px; - text-align:center; - font-size:14px; -} -#copyright, -#copyright a { - color:#ccc; -} -h1 { - margin:60px 0 0px; - font-size:48px; -} -h2 { - clear:both; - padding:60px 7px 2px; - margin-bottom:30px; - border-bottom:1px solid #ccc; - text-align:left; - font-size:20px; - font-weight:bold; -} -p { - margin:10px 0; - color:#999; - text-align:left; -} -.lsf-input { - margin:60px 0 40px; - font-size:48px; - text-align:center; -} -.lsf-input input { - width:860px; - padding:10px 20px; - border:1px solid #ccc; - -webkit-border-radius:5px; - -moz-border-radius:5px; - -ms-border-radius:5px; - -o-border-radius:5px; - border-radius:5px; - text-align:center; - -webkit-box-shadow:inset 0 2px 6px rgba(0,0,0,0.1); - -moz-box-shadow:inset 0 2px 6px rgba(0,0,0,0.1); - -ms-box-shadow:inset 0 2px 6px rgba(0,0,0,0.1); - -o-box-shadow:inset 0 2px 6px rgba(0,0,0,0.1); - box-shadow:inset 0 2px 6px rgba(0,0,0,0.1); -} -.lsf-input::-webkit-input-placeholder { - text-align:center; -} -.table { - float:left; - width:420px; -} -.table:nth-child(2n-1) { - float:right; -} -.table table { - width:100%; -} -.table td, -.table th { - vertical-align:middle; -} -.table tr:nth-child(2n) th, -.table tr:nth-child(2n) td { - background:#f0f0f0; -} -.table th { - padding-bottom:5px; - text-align:center; - font-size:12px; - color:#999; -} -.table td.symbol { - width:60px; - font-size:36px; - text-align:center; -} -.table td.ligature { - text-align:left; - padding-left:10px; -} -.table td.unicode { - width:100px; - border-left:2px solid #fff; -} - -.lsf-html, -.lsf-css { - overflow:auto; - width:860px; - min-height:170px; - padding:20px; - border:1px solid #ddd; - font-size:14px; - text-align:left; - background:#f9f9f9; - -webkit-border-radius:5px; - -moz-border-radius:5px; - -ms-border-radius:5px; - -o-border-radius:5px; - border-radius:5px; - -webkit-overflow-scrolling:touch; -} -.lsf-css { - min-height:940px; - margin-top:10px; -} - -.download { - min-height:170px; -} -.download-button { - display:inline-block; - padding:2px 30px 10px; - font-size:25px; - color: #666; - -webkit-box-shadow:0 1px 3px rgba(0,0,0,0.3); - -moz-box-shadow:0 1px 3px rgba(0,0,0,0.3); - -ms-box-shadow:0 1px 3px rgba(0,0,0,0.3); - -o-box-shadow:0 1px 3px rgba(0,0,0,0.3); - box-shadow:0 1px 3px rgba(0,0,0,0.3); - -webkit-border-radius:10px; - -moz-border-radius:10px; - -ms-border-radius:10px; - -o-border-radius:10px; - border-radius:10px; - -webkit-transition:0.2s; - -moz-transition:0.2s; - -ms-transition:0.2s; - -o-transition:0.2s; - transition:0.2s; - background: #f6f6f6; - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f6f6f6)); - background: linear-gradient(top, #fff #f6f6f6); - background: -webkit-linear-gradient(top, #fff #f6f6f6); - background: -moz-linear-gradient(top, #fff #f6f6f6); - background: -ms-linear-gradient(top, #fff #f6f6f6); - background: -o-linear-gradient(top, #fff #f6f6f6); -} -.download-button:hover { - color: #006DBE; - text-decoration:none; - -webkit-box-shadow:0 3px 9px rgba(0,0,0,0.3); - -moz-box-shadow:0 3px 9px rgba(0,0,0,0.3); - -ms-box-shadow:0 3px 9px rgba(0,0,0,0.3); - -o-box-shadow:0 3px 9px rgba(0,0,0,0.3); - box-shadow:0 3px 9px rgba(0,0,0,0.3); -} -.download-button:active { - margin-top:3px; - color: #333; - -webkit-transition:0s; - -moz-transition:0s; - transition:0s; - -webkit-box-shadow:0 0px 2px rgba(0,0,0,0.5), inset 0 2px 2px rgba(0,0,0,0.2); - -moz-box-shadow:0 0px 2px rgba(0,0,0,0.5), inset 0 2px 2px rgba(0,0,0,0.2); - -ms-box-shadow:0 0px 2px rgba(0,0,0,0.5), inset 0 2px 2px rgba(0,0,0,0.2); - -o-box-shadow:0 0px 2px rgba(0,0,0,0.5), inset 0 2px 2px rgba(0,0,0,0.2); - box-shadow:0 0px 2px rgba(0,0,0,0.5), inset 0 2px 2px rgba(0,0,0,0.2); - background: #f0f0f0; - background: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#f0f0f0)); - background: linear-gradient(top, #fcfcfc #f0f0f0); - background: -webkit-linear-gradient(top, #fcfcfc #f0f0f0); - background: -moz-linear-gradient(top, #fcfcfc #f0f0f0); - background: -ms-linear-gradient(top, #fcfcfc #f0f0f0); - background: -o-linear-gradient(top, #fcfcfc #f0f0f0); -} -.download-button span { - display:block; - font-size:13px; -} - -.profile { - overflow:hidden; -} -.profile-image { - float:left; - width:120px; - -webkit-border-radius:5px; - -moz-border-radius:5px; - -ms-border-radius:5px; - -o-border-radius:5px; - border-radius:5px; - opacity:0.8; - -webkit-transition:0.2s; - -moz-transition:0.2s; - -ms-transition:0.2s; - -o-transition:0.2s; - transition:0.2s; -} -.profile-image:hover { - opacity:1; -} -.profile-text { - float:left; - width:400px; - margin-top:5px; - margin-left:40px; -} -.profile-text h3 { - font-size:24px; - text-align:left; -} -.profile-text h3 span { - font-size:18px; - color:#999; -} -.profile-acount { - float:left; - padding-left:80px; - margin-left:60px; - border-left:1px solid #eee; - text-align:left; -} -.profile-acount li { - padding:1px 0; -} -.profile-acount li a { - font-size:16px; -} - - -@media (max-width: 900px){ - #body { - width:100%; - margin:0 auto 20px; - font-size:14px; - } - h1 { - margin-top:15px; - font-size:24px; - } - h2 { - padding:50px 10px 2px; - margin-bottom:10px; - } - p { - margin-left:10px; - margin-right:10px; - } - .name { - font-size:12px; - } - .lsf-input { - margin:15px 0 25px; - font-size:22px; - } - .lsf-input input { - width:80%; - margin:0 5%; - padding-left:5%; - padding-right:5%; - } - .table { - float:none !important; - width:100%; - } - .table th { - font-size:8px; - } - .table td.symbol { - width:60px; - font-size:32px; - } - .table td.ligature { - padding-left:5px; - } - .table td.unicode { - width:70px; - font-size:11px; - } - .lsf-html, .lsf-css { - width:80%; - min-height:80px; - max-height:80px; - margin:5px 5%; - padding-left:5%; - padding-right:5%; - } - .profile-image { - width:48px; - margin:0 10px; - } - .profile-text { - float:none; - width:auto; - margin:0 10px 0 0; - } - .profile-text h3 { - font-size:18px; - } - .profile-text h3 span { - display:block; - font-size:12px; - } - .profile-acount { - width:100%; - padding:0; - margin:20px 0 0; - border:0; - border-top:1px solid #ddd; - } - .profile-acount li { - border-bottom:1px solid #ddd; - } - .profile-acount li a { - display:block; - padding:10px 20px; - color:#555; - font-size:20px; - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f0f0f0)); - background: linear-gradient(top, #fff #f0f0f0); - background: -webkit-linear-gradient(top, #fff #f0f0f0); - background: -moz-linear-gradient(top, #fff #f0f0f0); - background: -ms-linear-gradient(top, #fff #f0f0f0); - background: -o-linear-gradient(top, #fff #f0f0f0); - } - .profile-acount li a:after { - content:"right"; - float:right; - color:#999; - line-height:1.7; - font-size:120%; - font-family: 'LigatureSymbols'; - text-shadow:0 2px 0 #fff; - -webkit-text-rendering: optimizeLegibility; - -moz-text-rendering: optimizeLegibility; - -ms-text-rendering: optimizeLegibility; - -o-text-rendering: optimizeLegibility; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-font-smoothing: antialiased; - -ms-font-smoothing: antialiased; - -o-font-smoothing: antialiased; - font-smoothing: antialiased; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga=1, dlig=1"; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; - } - #copyright { - margin:20px 0; - font-size:10px; - } -} - - - - - diff --git a/docs/theme/mkdocs/fonts/fontawesome-webfont.eot b/docs/theme/mkdocs/fonts/fontawesome-webfont.eot deleted file mode 100755 index 7c79c6a6bc..0000000000 Binary files a/docs/theme/mkdocs/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/fontawesome-webfont.svg b/docs/theme/mkdocs/fonts/fontawesome-webfont.svg deleted file mode 100755 index 45fdf33830..0000000000 --- a/docs/theme/mkdocs/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/fonts/fontawesome-webfont.ttf b/docs/theme/mkdocs/fonts/fontawesome-webfont.ttf deleted file mode 100755 index e89738de5e..0000000000 Binary files a/docs/theme/mkdocs/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/fontawesome-webfont.woff b/docs/theme/mkdocs/fonts/fontawesome-webfont.woff deleted file mode 100755 index 8c1748aab7..0000000000 Binary files a/docs/theme/mkdocs/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.eot b/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 4a4ca865d6..0000000000 Binary files a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.svg b/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index e3e2dc739d..0000000000 --- a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.ttf b/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 67fa00bf83..0000000000 Binary files a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.woff b/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 8c54182aa5..0000000000 Binary files a/docs/theme/mkdocs/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/docs/theme/mkdocs/footer.html b/docs/theme/mkdocs/footer.html deleted file mode 100644 index 923ace519c..0000000000 --- a/docs/theme/mkdocs/footer.html +++ /dev/null @@ -1,113 +0,0 @@ - diff --git a/docs/theme/mkdocs/header.html b/docs/theme/mkdocs/header.html deleted file mode 100644 index 6622f93301..0000000000 --- a/docs/theme/mkdocs/header.html +++ /dev/null @@ -1,50 +0,0 @@ - - diff --git a/docs/theme/mkdocs/images/arrow left.svg b/docs/theme/mkdocs/images/arrow left.svg deleted file mode 100644 index 4754eddd99..0000000000 --- a/docs/theme/mkdocs/images/arrow left.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - arrow left - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/images/arrow right.svg b/docs/theme/mkdocs/images/arrow right.svg deleted file mode 100644 index 481d9f6927..0000000000 --- a/docs/theme/mkdocs/images/arrow right.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - arror right - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - \ No newline at end of file diff --git a/docs/theme/mkdocs/images/docker-inc-light.svg b/docs/theme/mkdocs/images/docker-inc-light.svg deleted file mode 100644 index 0c4564de9b..0000000000 --- a/docs/theme/mkdocs/images/docker-inc-light.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - -]> - - - - - - - - - diff --git a/docs/theme/mkdocs/images/docker-top-logo.png b/docs/theme/mkdocs/images/docker-top-logo.png deleted file mode 100644 index e48626b3b2..0000000000 Binary files a/docs/theme/mkdocs/images/docker-top-logo.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/docker-white.png b/docs/theme/mkdocs/images/docker-white.png deleted file mode 100644 index 3513b55016..0000000000 Binary files a/docs/theme/mkdocs/images/docker-white.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/docker-white.svg b/docs/theme/mkdocs/images/docker-white.svg deleted file mode 100644 index b97d1f8724..0000000000 --- a/docs/theme/mkdocs/images/docker-white.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - -]> - - - - - diff --git a/docs/theme/mkdocs/images/external-link-icon.png b/docs/theme/mkdocs/images/external-link-icon.png deleted file mode 100644 index a38f55283b..0000000000 Binary files a/docs/theme/mkdocs/images/external-link-icon.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/external-link-icon.psd b/docs/theme/mkdocs/images/external-link-icon.psd deleted file mode 100644 index e71ec10fab..0000000000 Binary files a/docs/theme/mkdocs/images/external-link-icon.psd and /dev/null differ diff --git a/docs/theme/mkdocs/images/footer-links.png b/docs/theme/mkdocs/images/footer-links.png deleted file mode 100644 index 2d13b662be..0000000000 Binary files a/docs/theme/mkdocs/images/footer-links.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/fork-us-on-github.png b/docs/theme/mkdocs/images/fork-us-on-github.png deleted file mode 100644 index 404c6849c6..0000000000 Binary files a/docs/theme/mkdocs/images/fork-us-on-github.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/glyphicons-halflings-white.png b/docs/theme/mkdocs/images/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29..0000000000 Binary files a/docs/theme/mkdocs/images/glyphicons-halflings-white.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/glyphicons-halflings.png b/docs/theme/mkdocs/images/glyphicons-halflings.png deleted file mode 100644 index 686433b297..0000000000 Binary files a/docs/theme/mkdocs/images/glyphicons-halflings.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/homepage-docker-logo.png b/docs/theme/mkdocs/images/homepage-docker-logo.png deleted file mode 100644 index 4f4df6a479..0000000000 Binary files a/docs/theme/mkdocs/images/homepage-docker-logo.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/page-blocks_03.png b/docs/theme/mkdocs/images/page-blocks_03.png deleted file mode 100644 index 61eadf7dde..0000000000 Binary files a/docs/theme/mkdocs/images/page-blocks_03.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/page-blocks_03.svg b/docs/theme/mkdocs/images/page-blocks_03.svg deleted file mode 100644 index b2e682ecc2..0000000000 --- a/docs/theme/mkdocs/images/page-blocks_03.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - -]> - - - - - - - - - - - - diff --git a/docs/theme/mkdocs/images/page-blocks_05.png b/docs/theme/mkdocs/images/page-blocks_05.png deleted file mode 100644 index 3b62ee05ef..0000000000 Binary files a/docs/theme/mkdocs/images/page-blocks_05.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/page-blocks_05.svg b/docs/theme/mkdocs/images/page-blocks_05.svg deleted file mode 100644 index e049763d88..0000000000 --- a/docs/theme/mkdocs/images/page-blocks_05.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - -]> - - - - - - - - diff --git a/docs/theme/mkdocs/images/page-blocks_07.png b/docs/theme/mkdocs/images/page-blocks_07.png deleted file mode 100644 index ee31fa0273..0000000000 Binary files a/docs/theme/mkdocs/images/page-blocks_07.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/page-blocks_07.svg b/docs/theme/mkdocs/images/page-blocks_07.svg deleted file mode 100644 index d7e74c0a87..0000000000 --- a/docs/theme/mkdocs/images/page-blocks_07.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - -]> - - - - - - - diff --git a/docs/theme/mkdocs/images/social/docker_social_logos.png b/docs/theme/mkdocs/images/social/docker_social_logos.png deleted file mode 100644 index 5bde456365..0000000000 Binary files a/docs/theme/mkdocs/images/social/docker_social_logos.png and /dev/null differ diff --git a/docs/theme/mkdocs/images/source_artwork/banner-frontpage-usecases.ai b/docs/theme/mkdocs/images/source_artwork/banner-frontpage-usecases.ai deleted file mode 100644 index 8aee9f447f..0000000000 --- a/docs/theme/mkdocs/images/source_artwork/banner-frontpage-usecases.ai +++ /dev/null @@ -1,1340 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R 42 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - Web - - - - - Adobe Illustrator CS5.1 - 2013-10-28T18:49:06-07:00 - 2013-10-28T23:04:16-07:00 - 2013-10-28T23:04:16-07:00 - - - - 256 - 76 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgATAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qlPmTzNp3l60gu78S GK4uI7WP0lDH1Ja8a1K7bZkafTSzEiPQX8mjPqI4gDLqaTbMdvdirsVdirCdZ/OLyPpV7cWMlxNc 3do7RXMVvCzcJEPFkLNwWo9jmPPUwiaLs9P2RnyxEgBR80Dafnn5QuLqOA2uoQRu3E3MsKekn+U3 GRmp8lyA1kCa3ciXYGoESfSfK9/ueiZlukdirsVdirsVS+81yys9X0/S5w63GpiX6q4WsZaBQ7IW rs3E1HjkDMAgd7kY9LKeOWQcoVffuoeXfMH6a/SMkdv6VrZ3ktnBPz5ev6NA8gHEcV51UbmtMGPJ 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 XYq7FXYq7FX/2Q== - - - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:0580117407206811808380D9EE884C4F - uuid:ea1f37fe-972d-7b4a-92d8-bf119d38176a - - xmp.iid:0480117407206811808380D9EE884C4F - xmp.did:0480117407206811808380D9EE884C4F - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:0480117407206811808380D9EE884C4F - 2013-10-28T18:47:59-07:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:0580117407206811808380D9EE884C4F - 2013-10-28T18:49:06-07:00 - Adobe Illustrator CS5.1 - / - - - - - - - EmbedByReference - - /Users/thatcher/Dropbox/FILE_EXCHANGE/mailgun_150.png - - - - EmbedByReference - - /Users/thatcher/Dropbox/FILE_EXCHANGE/mailgun_150.png - - - - - - - Web - Document - - - 1 - True - False - - 120.000000 - 80.000000 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - RGB Red - RGB - PROCESS - 255 - 0 - 0 - - - RGB Yellow - RGB - PROCESS - 255 - 255 - 0 - - - RGB Green - RGB - PROCESS - 0 - 255 - 0 - - - RGB Cyan - RGB - PROCESS - 0 - 255 - 255 - - - RGB Blue - RGB - PROCESS - 0 - 0 - 255 - - - RGB Magenta - RGB - PROCESS - 255 - 0 - 255 - - - R=193 G=39 B=45 - RGB - PROCESS - 193 - 39 - 45 - - - R=237 G=28 B=36 - RGB - PROCESS - 237 - 28 - 36 - - - R=241 G=90 B=36 - RGB - PROCESS - 241 - 90 - 36 - - - R=247 G=147 B=30 - RGB - PROCESS - 247 - 147 - 30 - - - R=251 G=176 B=59 - RGB - PROCESS - 251 - 176 - 59 - - - R=252 G=238 B=33 - RGB - PROCESS - 252 - 238 - 33 - - - R=217 G=224 B=33 - RGB - PROCESS - 217 - 224 - 33 - - - R=140 G=198 B=63 - RGB - PROCESS - 140 - 198 - 63 - - - R=57 G=181 B=74 - RGB - PROCESS - 57 - 181 - 74 - - - R=0 G=146 B=69 - RGB - PROCESS - 0 - 146 - 69 - - - R=0 G=104 B=55 - RGB - PROCESS - 0 - 104 - 55 - - - R=34 G=181 B=115 - RGB - PROCESS - 34 - 181 - 115 - - - R=0 G=169 B=157 - RGB - PROCESS - 0 - 169 - 157 - - - R=41 G=171 B=226 - RGB - PROCESS - 41 - 171 - 226 - - - R=0 G=113 B=188 - RGB - PROCESS - 0 - 113 - 188 - - - R=46 G=49 B=146 - RGB - PROCESS - 46 - 49 - 146 - - - R=27 G=20 B=100 - RGB - PROCESS - 27 - 20 - 100 - - - R=102 G=45 B=145 - RGB - PROCESS - 102 - 45 - 145 - - - R=147 G=39 B=143 - RGB - PROCESS - 147 - 39 - 143 - - - R=158 G=0 B=93 - RGB - PROCESS - 158 - 0 - 93 - - - R=212 G=20 B=90 - RGB - PROCESS - 212 - 20 - 90 - - - R=237 G=30 B=121 - RGB - PROCESS - 237 - 30 - 121 - - - R=199 G=178 B=153 - RGB - PROCESS - 199 - 178 - 153 - - - R=153 G=134 B=117 - RGB - PROCESS - 153 - 134 - 117 - - - R=115 G=99 B=87 - RGB - PROCESS - 115 - 99 - 87 - - - R=83 G=71 B=65 - RGB - PROCESS - 83 - 71 - 65 - - - R=198 G=156 B=109 - RGB - PROCESS - 198 - 156 - 109 - - - R=166 G=124 B=82 - RGB - PROCESS - 166 - 124 - 82 - - - R=140 G=98 B=57 - RGB - PROCESS - 140 - 98 - 57 - - - R=117 G=76 B=36 - RGB - PROCESS - 117 - 76 - 36 - - - R=96 G=56 B=19 - RGB - PROCESS - 96 - 56 - 19 - - - R=66 G=33 B=11 - RGB - PROCESS - 66 - 33 - 11 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - RGB - PROCESS - 0 - 0 - 0 - - - R=26 G=26 B=26 - RGB - PROCESS - 26 - 26 - 26 - - - R=51 G=51 B=51 - RGB - PROCESS - 51 - 51 - 51 - - - R=77 G=77 B=77 - RGB - PROCESS - 77 - 77 - 77 - - - R=102 G=102 B=102 - RGB - PROCESS - 102 - 102 - 102 - - - R=128 G=128 B=128 - RGB - PROCESS - 128 - 128 - 128 - - - R=153 G=153 B=153 - RGB - PROCESS - 153 - 153 - 153 - - - R=179 G=179 B=179 - RGB - PROCESS - 179 - 179 - 179 - - - R=204 G=204 B=204 - RGB - PROCESS - 204 - 204 - 204 - - - R=230 G=230 B=230 - RGB - PROCESS - 230 - 230 - 230 - - - R=242 G=242 B=242 - RGB - PROCESS - 242 - 242 - 242 - - - - - - Web Color Group - 1 - - - - R=63 G=169 B=245 - RGB - PROCESS - 63 - 169 - 245 - - - R=122 G=201 B=67 - RGB - PROCESS - 122 - 201 - 67 - - - R=255 G=147 B=30 - RGB - PROCESS - 255 - 147 - 30 - - - R=255 G=29 B=37 - RGB - PROCESS - 255 - 29 - 37 - - - R=255 G=123 B=172 - RGB - PROCESS - 255 - 123 - 172 - - - R=189 G=204 B=212 - RGB - PROCESS - 189 - 204 - 212 - - - - - - - - - Adobe PDF library 9.90 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/Thumb 20 0 R/TrimBox[0.0 0.0 940.0 94.0]/Type/Page>> endobj 44 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 120.0 80.0]/Type/Page>> endobj 45 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 120.0 80.0]/Type/Page>> endobj 46 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 120.0 80.0]/Type/Page>> endobj 47 0 obj <>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/XObject<>>>/TrimBox[0.0 0.0 120.0 80.0]/Type/Page>> endobj 48 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 120.0 80.0]/Type/Page>> endobj 71 0 obj <>stream -HWI7+yI0 Cˀ\bj1@ V~yq>Ï/\bpwۇ߂{|qAܗG}}v$ɕc*5n} '/[Xޓ\=70Rws)dz =p-i}& )&>L.fcZ>,ih$o;5o `KB[qaN<^p:4p*yu}8|񸤀DzǏ_ :A[a ³VJ B}LdSipO)|D"5k?'&?鱼}KC vHr64 ̳ڿ_"kriDf$8XI4Z롊͆&:tͱ+>wb(XLgu@&S9ઘ -)w9Wjl6v(Z[;kg:IFDWy˂wZ a/9&~.jmy[g5[4Z9FM)r)ReNIdd) ۫Vx"\36T 7&NqkK9PCԹ,8QqFu`{XjI-<]$rxQ D&F +O0V%?lnHP2"#R˩Qd=(~DÐ8憥inu@J"R5Et^8A_}Vǵ@Ԥd%98'!PM2{&@%*G?s _%v.g?7HqCH%`nL E1( 7|%'ؔhI&֪C5_)Ȝ$>|O$N2Ӏ>Lu{Y32d!-sڲ4~ l⡧`T6M}𨘪| PI7$D|Lۉ b򌚒|Wa@*VIǫT!E(H>?-ebVܑVj_ΐ|Jo-̶ϰB+Pvʤ ei픥A'ʊ2V -2 (cq︜L(BaX1+FX:exFrpƛ<9Y90Y05z,Nٙ1%"؊1:ٷUq\d(sUU9nU>R85:jA}N'ER3X Rֵ;6> endobj 42 0 obj <> endobj 74 0 obj [/View/Design] endobj 75 0 obj <>>> endobj 54 0 obj <> endobj 52 0 obj [/ICCBased 76 0 R] endobj 76 0 obj <>stream -HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  - 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 -V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= -x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- -ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 -N')].uJr - wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 -n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! -zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 51 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.1.0 %%For: (thatcher) () %%Title: (banner-frontpage-usecases.ai) %%CreationDate: 10/28/13 11:04 PM %%Canvassize: 16383 %%BoundingBox: 0 -275 940 0 %%HiResBoundingBox: 0 -274.8926 940 0 %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFiles:/Users/thatcher/Dropbox/FILE_EXCHANGE/mailgun_150.png %%+/Users/thatcher/Dropbox/FILE_EXCHANGE/mailgun_150.png %AI5_FileFormat 11.0 %AI12_BuildNumber: 39 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 608 -296 728 -216 %AI3_TemplateBox: 16.5 -16.5 16.5 -16.5 %AI3_TileBox: 272 -562 1064 50 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -709 527 1 2546 1232 90 1 0 7 129 0 0 0 1 1 0 1 1 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:-384 -316 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 79 0 obj <>stream -%%BoundingBox: 0 -275 940 0 %%HiResBoundingBox: 0 -274.8926 940 0 %AI7_Thumbnail: 128 40 8 %%BeginData: 3986 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFD0BFFA9FD13FFA8CAA1CACFFD15FFCAFFFFCA9AFD07FFA8 %FD44FF5A36FD0AFFCFFD05FFA1936F936E93689AFD16FF93FF9AC3FD07FF %52A8FD0BFFA8FD0AFFA87DFD13FFAEFD14FFC3C3CA8536855AAFFFCFC8CE %AEFFFFFFCFCFFFFFFFA168BC93BC93BC9AFD16FFC3C3C3A8FFFFFFA8FFFF %A827FFA8FD09FFA1C3A1FD09FFA87DFD0DFFC4CAAF845FAFFF7D7D52A8A8 %7D7D7DA87DA87D277DFD05FF9AC3CABC530F5A850EA8C8CFC8A457FFFF82 %82FFFFFFA16F93C3A1A16EBCFFFFA8FFA8FFA8FFA8FFCAC3A1CAA8CF9AC9 %A1CAFFFFA1B5C38427A8522752A827527D27527D527DFD04FFA1C39BCAA1 %FF7DA87DFF7DA8A8A853CA9ACAA2FFA8C39AFD05FFBDC43D603AAFFF7D7D %FF527D52FF7DA87DA827A852FD04FFCAB59BCABC7736FFFF5B36CEC8C9C1 %81A7CF7BFD04FFA86EBCFFFFA16F93FFA87D7DA8FD057DC3A1CAA19AA1C3 %9ACFCAFFFFFF93CAA827527D7D5227A8525227527D27A8FD04FFCAA1CAA1 %BCA8A87DA87DA8A87DA87D6FCAA1C3A8C3A1C3A1FD04FF655FBEA867FFFF %7DA8FFFF527D7DFFFF7DFF7D7DFD06FF93C3A8C35336FFFF3652C1FFC9C7 %A7827BA7FD04FF7D9393FFFFA16899FFA852FD047DA87DA89AA1A1A093C9 %9A99CAFD04FFBCA127277D527D5252A85227527DA8F8FD05FFA19AA19A93 %FFA8A8A8847DA87DA8529AA8A19AA19ACA9A9AFD04FF3A83BDA937FFFFA8 %7DFFA85252A8A8FF52FFA87D52FD05FFC39ACABC7E0E615A37A7C8C9C8C1 %FF8281FD05FFA86EBC9A9A939393FFFFA87DA8FFA8A8FFA8CACACAC3CAA1 %CACAFD05FFBCCA2752527D7D52527D527D52FF522752FD04FFCA9AC39ACA %FFCAA8FFCACAA1CAA8A8A1C3A1CAA1FFCACAA2FD04FF8B60407DBDFFFF7D %7DA8527D52A87DA87D7D527D7DFD06FFCAA1CAAFAF8485A9FFC9C9CACFFF %8282FD05FFA16E929392939293CAFFFFFFA8FD12FFC3CA7D52A87DA87DA8 %527DA852597DA87DFD06FFA1CAFFFFA1C3A8FFFD05CAC39ACAFFFFA8A8A8 %FD05FF858B83A8C4FFFF7D7D7DA8A87D7D7DA852A87D7DA8FD14FF82FD07 %FF9ABB93BC9AC3C3FD7AFFA8FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF %FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD17FFA9A9FD25FFCACAFD05FFA8FD %50FFCA8536AFA9FFCFCFCFFD0AFFCAA1C9FD10FFC3CA9AFD05FF7DA8FD24 %FFA8FFFFFFA8FFFFFFA8FD21FFCA9AC376375A377DC8C181A7FF82FD06FF %A1689392C9FD04FFCAFFFFFFCAFD06FFCA93C359A87DA87D27FD047DA8FD %07FFA2CAA1FFA8A8A8FF7DCAA8FFA8FD07FFC3A23B89A8FD047DA87DA852 %7DFD21FFBCBDC37736FF5B7DC8C99FADA7ADFD06FFA19AA89AC3A87DA87D %C39AC39ACAFD07FFBCA152527D527D5252F87D27FD08FFCA9ABCA87D527D %AF7693BDA1C3CAFD06FF8A7DA98BFF7DFF7D7DFFFD04A8FD21FFC39AC377 %3784377BC9C8C88281FD07FFA16EA068C3FD05A8C9A1CACAFD07FFC37DF8 %527D52527D27527D27A8FD07FFCA93A1FFA8A8A8FF9B9AA1CACAFD07FF84 %5F52CBA87D7D7D52A87D7D52A8FD22FFCAC3CB858585FFC9CFFFA782FD07 %FFA89A9AC3CAFD10FFCAA1527DA87D7D527D7DA852A8FD10FFCAFD0BFF8A %CACAFFFD08A8FD2DFFA7FD27FFA8FFA8FD46FFFF %%EndData endstream endobj 80 0 obj <>stream -%AI12_CompressedDataxr#7xi $}c"My 퉎 -ĪR["b_ߧ`˅(*KRP%%L$p|v5LG@|z\3w7ט/_ %p⍽?V77/gV_ -2\Azެo?.߯w7fʽʛ-ov|e:D~X\\ "n}~~?A2 J :~y]j}lus3\noL^?@=׷5\.Y\\n良]]o>oO}w󯯖oIFߛ7f-t{L..zqHKMP~@7_A- 4{&q'`wa~Y RlP٫lЯe6^Ȍuuz^f#3pi=*W ~&XzŽ0}Ԡuo旻o[f?lWp~qS7hsywK^7@7ZBR>ֿn8̓r`T)T\6dҿQ߶`, q02?Xt}b0-`r'o8X/*pTDKk ]mx?DԐ~x ϧ+k@k{_7Gn}~?7ś/7w_ۈ/z<?-p^]ܮU|jgAЬՀ/)|u'|rCBgw0Só;_|s.?P_aTV7D_`/?V z00uVl;~?o7ɽ)>]^^^^~pqWo77W׷gܮvb}H-vsŖˏ+*Â| 4oҌ,?EBIrߐPߘRH[S2 M5X؂O#u3 CZD⏒)!c9S9shIR04Ze MMI;b*ifvh/XOLϡ$`MTp& l2L&I9)&$@(r0\t<gc3@j,I(碜rR˲,ʼJSjU2)żbR(DY9%5Ch(E :31%Π0M(AEAa)e %$Q.~|я)qB4ijħ1&|fr 2d9rHRF4 /Yf }0, 7')kruGćK'.K^G]sxBJ%~UTB&30Ka"_Di)\xgfffbf23w"FE)_%sMbssAtf* wbx^Ι;+gv#s`T`X%WԻ%kf;Sڎoh\494 qޕ^s`[ ENEi Lj -j^,2`j010)0y'0 nW,;NKΠGDdW@Xi,:;V;, ,W%.k1_ʉKZƖ1ٕ|n=ZNeԲVSYiy3S,jcc'TxX)W̠! GB QȮ'w1 -3CR -4(3JC%IG͡"6*GO#S+bΪK+eS@uF+vXூ2) gziA=E4i -{ YSC-2˳4U,=ý~ԓ -s3`Rztֿո=}t. -,OXF9Nd]MhQW$2FBxsg)}L3f ZМ(Mڀ<?'zxrp NCCD Q0XRΟ -xTZHeAp\QWV]ɰPUrAJww/v0v1щd6EF -LqCpQR[Ҷg%ͷYkb&[xK*$ŖoIY[4mIoIdDDQMK& v52j:&6 kt+ּk]ܩS/SFVjVc}Ym l6ڢ o D(D@#X_`j#-q >%<7 y)| 2qˈm!Oπ ܈? cZQ^$.0!M/.09%0Llp g`3RL)mZa(:Y-f3O/(vôLέģ4#YdZC퇣tC!HH?|w9v86dU `С X2JIkNo `P0j5,q -g-lBf}!ñ 2XV[r -b2**8SigJify9466iJR&X-c=nJ|hjFS)-;VLsA EFAHy& -%sS[v2lhXo5&\&2/iS)JfGtO$jfg$X "ߑlK"0ޓ&̎-0:khEuAla"b&D,#5x)VEӺp*ɌobU7!) -3++,X%tqFX-T&āV*L%UTehXqr V^f;}H_X9%*ˊ$H{cUv'p"SHtlG:~4xe%obPBBH'>ّ$G BcUdˋUi1C4B\ܦyQmGil=5WwzĶ#gHKIxcM>2r#3Kk=Yxsܚg~%k,hլf~gVԛ8?k{~-['^sd@_X9iYzw0zgl %+'NTܢ X1V][ZxڽZ15SQؽ27Z;%ra$FLu93+/+|$;rIVT^4Vwj=ˊs'VW^,4^,?b<`x<:Kbba?Tf;-h/:pBBˈSQhBX2VRِjb!f"llMRY L%eȢHƖC0 ܚPõ%u4 -"4 -(s2O){HJ+e,vﱫD+fd OxؒSJ[49;"QX/Lg}V ;] uJ3Yd:?Ey3gg 5VX՟ZLlv %$SҘMǴɚYƗт|/[K$Of5CKoF2 Ɋ3eT6"CJNp th96Fp8tYQamjo7[vf9"3pn $Jaqgx^0g#P͛kaØ"AиIx AF)p2 -;uc4꾦zGIDN3m:ء&Z|l|rTq6/aӟȩ ),gu /6kuƺ׽I[ÿ$šjRaMuY:ii#+9}56) Iw5UjF&n<8\z}5:°8Lx .r;V<`E%#[CYSCTZg3 ќ`Rn&e,L-H ?'0U&q SZ8ǂƷ*9_y^ "~hGȬBiȵBv A#37UMb7낖nnyFI5.[Rt: R5.X -gVgnMZPP۝ɽi?G#&e.s}6L%2ȂR7,E,y,|Twk3"-c=@/ hWdN,6Y($OHIyLB=?K;gth( 5|H5aقxEAZ@T EA}=#hx*D2S:!,ߘXN}szF>m ,hA`nd f<&ʜ Յo@m9~͜z񌰌cpM̗ko%.bMhhKO!"#t82W:s\mSgoaSinHE7谺 sjstH8 m8hxSpӀ_4=̓8mNM]k -VȥL%eDb?ƕ4Ko*z {m{{ |~P'$]IJC~cHe%YoCItm+CK'~Lya{t2To)}x AlPQ|"G=$$Upve*̂-YSuH 3IIrBE@ƭ:j͆_y!@VgEDЊn8vaqӝ&-ӀeǨ؎ۢ`. -C>*>bv#U򠖇mSUyrTbjAʐ~?&gdVNHfA$ͭ] mUm8oqz津d~[$wG>dd(C&rARKS;c`'STW11Ep!/S]9FݲAlOJ“4ޓJDboے>dn"-S"-S"-Q.x#ia'x"\lzpV Re,8XX֋Lb:[}խN ac+;::/ihN|;~kF[yˑ_6xMcAl]@]^uJFf[ti1- ɋg"vfKƺL PS jأn (\X!TS@VYGUWxHKkĮe-P 9qy2r@xA԰չ }B:!ngQ􅅤K Tk΅0Ԓ>4~FwqG8㰈8,vefڶ~v sSI,NmR;$KSm[R;:<>Gcgrq9%e쟬x(Pu O⹝)AhQeSLBз#"O,8 >Na]$Q4v@n/AlQ/YxTL^H Q!HeN~yIRAkAIl)A!'3?rO UhAʼnLe 3cÂH?S(wƹ0bEvQ16j-}EFf2%lģysJ AL#0i 6cDYX(&|MF'#1am&3 aa}<#MAxB)1hG s0?C .O4Ă%MΑŽh)xQa/ {d&fyofIhW>B":桉һxTXOVO`'XxP~^ -w:Ĩu bZVP]L=<r"MH5Œ$^i>%uSR:3>3 (6t? # t2bXfxrR r!N ;AOIa'RvFa'2Ф8խy%UgZ[c6cV⯆{8ޏodZIuJr~;KuM^IUWO DkDU'Ug-MZXO{Cewz] {-ۆq(V؍iT3o .ԑ j -qZ#.pyG1 8iQyeؑkX=MIxqTz=t]m Nn˓j6m)"T*cZhu/ڭYc,>2۟F -+ -fh WNtcTFFXlV(p⢱_h~)&EqJ` .iiV> o"8g77vKS/@Q?-eqI>7c/߫ &;*v̶ʚ)$1jJ~?{Ș+5񑼌@ǑJA*N* m)KJyw]@{ͨfÎ;nӮl4˩G(YAn9ecq<37sq4 ,;EBqƄsf.~^6>9 cg6 A7sj+\'s+y1z zkJ{=DFMb@x 3`̯1УDth\yjY:찢8-'!A'EP=scgw -q%Q *tڥ=:sl&e{3~2,k֕܉[UI'{uqd>i>s"s#bqu@&C B_l,hp .@!.D%PT>4 -5@Vx C ET7FhO,׀׏x#4ECX3V ^/m c~,X*NEũ_i*d+њS[~xjc: T>^}3sY*sOVsڤjU8A0V:SۮJ{[^6K|YnU[ͪG5ns h]=܆is.U rm,I^TԸ5.4MhlT 4xס"7jR"^ϳԲ{sݱvŔ."7ܣK?V#fūD("S٧*d%bB.?l9sv4טfoV 1]<@ p!ckQ*]z5SQ.g KQ_Dv(E inWSZ و JzjEtpI[(Ec# a0Ό0m,d:96Ԃb|E[lJQwXV֐{%wBF 1HM' F6<\mp{xJac*@#@|vCK2^ &|~C_`}|ZT 8wߴ5@Z.P9h;.2a>Wr,;gVL[ᘱgFDvL{i;2vѴ:ii8j]5gs9ŧhyDp3p \1[3pӨr3iy:NAW/z`O*pdխkO -IOSBqv|ilHÎ/KMP}:wG|v\p0{X9H9Ry#P(4Ӫ8! ->MmL%%\t5n)k]0!Y42F RcUwaOQd\_YVs9rKB$\yk-=F4=d: HtґItVijp\=JMͲΦɆJe&#v:B݃{CJ ;[ǛX@s %^w{N,wxmM\ountef5!O{)6[VRKJX{b$'O'm-O) 甸Ji%љ%.z}#J[dJ=U NBy-j wT=j_c%w'It.8Y5y,|jCB*<%xJy Or<91C}L )9̑t#mȣmCYB_Vv'V :q]B.hy 8ۨvSݜ6$dq5rݚD={ jJ{JȔ%ު-Jw$x޳A}hދN4te{&ݍm{mUaK뫶1 -®m`rZmz0$50yX͑-U#`+\"<hp@c=/=%?䮋Sۏޞx6 -l`5K7>&;ĘKu* ܰGƺsE0::5J>.]b -5*Azt(EViR#F:]ƔFDFuQ*ƴѫmxǭH_š@N$+?@(fV˚ O4=liUI+>oju>xoDL(?e 4XT|[7҂Ũ!1"D}t"|r;DTHG1:4U#4[Qi,>?G>Kng#nԷq7|,)f`C/kN9 (Ԇ#Jˎʸ,jd]eѪ8L~8z|h|斕osQӮݐZ0t?OSnDJa9ou[sܡN׊( -;j`Gx$YmvQ v̫~SNQh!K%nYk&ڧT؃T4 aBxYI`[IAv2'6İ@{&!RIvİ*MyN*/Jv3aaP - 26,!IDGjMx)|EsHoF,ɴ2gwlњǑ(F͚ZK&Ř,a@usfgH 7<7oJ)ba8V7f*c -)=GymM\:-NӮx+T'qY!OGEqi(?OYHB:JC]đ "q؅H,J(Ml̷o5LJoj(3߾H/|Ͳ؛"'S% 6%49_n5DdG"UgAt239m|+==daFUx̳yҲUsIRjBi6"lѪvXQaMd> ۲"rmi5!,h2*2 %" #l:K}(".G'[Fщbj}՝V$ XF>,#I{|w"|ԝ΁*+*qB?vWIc""ڸu}%mY]Kmfjȃv枀b?ɦ"=t%&%PuђvHnʬX(lљMbA!&Z[hwu/:$fRa1 o|pGw/`e6=OԝRZkv@5]8)ttŋR))i  8p`Eq}춀#*ǠSݓBO -=)N#]pMB -&lsϴ- #9MnӮvCvjwvjwvjwvjwvjw/`VO -=)pшLdj2W^f|*` -6fZ±_[]^ 9׏F?Vμ 1nX>B</ECGSlNjF1D;şǧ|ָk<ՂбŢ'zRIA -q4{:QL8a-jJOF:-w:Ƒ]by 1fq5f뼚~V4kܚ/uĞ2fX/MphUG_m眛ue095N^XZ_.sEI|1p'D=|Cm>|s2V `Vq'7w#l62(ll`Lx%- g!@lӪNcsǰ)[]H,eI@礄 nŃ4%$eVnc&wTޟFNS «J29'. WhS{c[87Va^g>$ -*6C% C-hŸ~Zjji1 %"C3&C08FXhHڡ0ѱ0vE.`ʕaOFqJž75NSΩpr8jgAj:92\)Ji543(jGhwd3G#{ 't5>imTYn(*ubgeq(M35MӅѴx6OvKy,ѱ+ Y8Wō-_Ue)}^xp eB0CT6>/vQ'+$;%fAԃu@Ar{7kkf -6hUn"Zir#wq3 *Q;y̍S@U -JlSmٟT܀[,)3[Xc/Ȫ~^X+j Īp_5mW9Gz6NPU - -np?@0%iNNb/l8*4itYUEE}2дɼ"GGGGG}#j>4.σKzڗ}Y"گ}ׯ}ׯ}h{ZkS[_/=pn{mkأ,{RI'p۩c50Yq -0aZY %[y/o9{%Zs!dT\3;&hH4|UX2N X~pPSաA g1Р`Cj1ajEіD36 05EL$e7=OƩ6NUʩN^#<%=_TÞ<==TamdE%BW1134r6g[hvb`acY "pG46`qe(qU>񚜯Nڂ5b=gL3kIuV"ȎHҢ@O')ݶ#>.oW/!X81 b'ޝE$iդew:SSh ݪEr>OiSXhϒ<)|y|UP,*gĚז@c)zB>g#g@Ol .E~*69/+7S?*,SWLYEXEa] " y9 1 -zimvqڑE -Ĝ=xhǪss4}R^}lTWf]/ϽMx(ڼZzysǽg^^=lE:cjn-βԶZYN9?Cwв _>1C,5ZCY㶊|veۦߡݗTvGeۘ֡wۢ;ۜ:⺵bjǍH| n2K.4vxA4 jBSd;6 ~UV#^hET U+]v LzMeB֬ ЇmM^J7ފD9WfWNtEҒ'F(iiU*V,4[VeӈťGˮ -.)4(} -"Zb&,[^noۇ ,vNdYX$l:42S -nsVT:ʖ'C"vZlsxeHNot2Hd= - r,m ̬Ȭ2uVw,%F:D N<ڭ'hqDI M-݂Ψϐh0]nn.n?׳ջk{Wt^Dxz}{Y>Zӫ{OS^|<uO 5w\+-Vϖϸ0՚=h!vCvsW=3E`$IGs5g:Cp+@gm׾b}Z˞S9>)%u*h8I> 3:bWۮI|::R8vNQC cd!؆Ov]9v ǢPwcs(\3_WGKI+N j(jqQ:OE#gE`ǻВV[R=h){a^._.Wgo1;t\#tFcKNGyZf7/gǗCGZ·y;юz|×nAKUP:4h\e7-w\& wstCW|ѸtxO7)˃MݡиZGip>`˿YgO8fGk DuGdW?Rۨw0-F=M~t =v!,bo0$.cc<7wY-Iz.0u|BjG`y}qju-t?g!vNDZ= xG 6dcc 9i} y`ޝw'Nػ{wrNɽ;`ޝܹ;D"t(ţޅD w!W[ֻ;8x?:89Y;5n֠tm_G6FjPƈ=./7uz@Sk(xi[G5۽b͘_ |7V[z+_MZǶj-_oaxϋ}GS4-uquw@EGX_pu u)UQInd1& |\v ]2?#+??~=+}Q fxצ2Ьൽ7ܜrzMo״pspY)n 7֊CpֈaB= +T]E톻XSL[Hd?aYBqpyqbIUGU>vơ3jȳk'AgLKgw)}ܩvqSO1cNE1^Xo}RD#( [#Fo޽Y`^; ;g Sq 5}'':?[Sg |Bq8xnC蹅9::ktjGl%EGl -l:} zsD Qyq)-^yiW:3G>az/Xc5Ǐ loHC=]c#ȺjKďMq[Þ^qlWo&%;; -lk !.ʺ"BxT<(HdϏpA#&Ҭ %0OSonjYLK??yp?7L[yW ay}qjYXËEJ^^'? CVGΩ?(9]+CXc'\Y I)3e_:]:Zq}QKKgW]uOi|boc(ɼEGRC}gq>ceGO{zj vL 5솯ոyl*q0?$6]njOѻ\ ̶!>^TT&ǞK?}cbc ;R4>?\|G2%n86.O1 1:Cٵ-:{s^[~^o=.vES0R->95R_ڞ_w_^Q>HOξ%љ|lYM1)h [;I/r!)ɋ~[?}1^&os fyf3Ԛ 9{z?~24﫷Kdy+ ĝ_w|I$$ -$QYEz2hߗ"0~>ok? 뿓9l&2|TzpE92Wz&LPlQQ -2(r3rJCYxJ/>,{c$Ma[V;hLH=2JLGRsf*iFҁ| :yp9p -9к\[L.>[mVch+A -I -CRgf0@Ij%dwL 9L:~W/JHk6ڊ+we2Y/ހz[xdCS`,K #׿K_x z]{ ;~w}qxl\Vц9K_1VRnΛkr=j/ި6QjFr0Km2v0Lg>w,nWeRWo*&!`tMk~!i +}|#~Q 3sngT+37u|%&oAO>75j7u~ DS%xXʔ{^7yCaX `.kP'W4&xx ,jRFIjTV\uBf^ǒ>h?5uݡ広xd\@̐oaS~آ zSWWb͕ /%+|k92tM'J=o ~=`~GZKl-WD"s | #=~e|Mol/۷ol/uhnh˴x?b=\u/z (W52AR4,W B1- (`}X&(Mz:$, =]/YA_ٻa T 뀕LCC8&w4TqҖ4Ln\FAȅ9`P%1~OHL'':drK@9 -cGf.p`Fi(r@_j[ߪ:7%m&(DQb&GPB’aA58PAit k "^iL,+1i,̱ZGk퀴#76,^lǺ2_m'oޮތ/@^9no›/A63 RYdLggwWln=Hʊ }{RHcR9>,Q:q ƕPu+ jEދ4?W?߭nY>rUo6qwY,DCrT˗ȗ_^LЦ$%KDLѶS;2g!}RQF `O y*`bKOD4m% eh#"i#%M"iki*ֹeh.YeTyM@UD{%8 me q3mJGY,no#M)v24X5RI5 2ӄT{v ޒ Xڐhnb$ n1* -4I,+QNqDεAа -Yc)@>;eC_cSp^@s{= j[Xm#@>Ȁg!.6׽pr!wp6$a8Y8Edo;d#S8fQyskO'/e~fWw:{s8:i#%E71fdK]B_ 7[7á- ^zGo( G1[KVM.JA*n.̦"1fT8#^:Kqu!G<{DG8?S̚魽KIE/q6C9NZs2:sxܹ&eUڌ2"bT&ɽuyh"d̵^^0s* ?:ש/ "t QADG9"] =,QHPw,M2KJ0AQoV1Rnd$S@x4/SMA0Z,O>G0#0X4{S`/.r4L0RU(,J CK,&E;no@R -YHp+0_g+?L}J( ݨF*\/q; "g(HWH,- -96pׄ ~U+?(௞胏fR'2HR;T -Oҧ^A:)avϒ>B7Z'\%9W"ߢFle%QT^ I1TʌU[1`^C1PG%iɴ9W1utdnUF(S+J6>zkN*4GE(l:iq$Ok{p@eL騵R0.xZ86EQDS2m~WԦ1IU>෉ds3ѬwDwKoLzVXbA j뿭uخ -vmn^ zrV_`v+=XSn 鏱E.&#]{,4Ci6j1٩3neH=sCiè %j^ݛЦ7h.,&Efaen1V!@Sz#y^D>I"8!{ ubc )qQ$yKhQZ3l$-(dxJ|@:B&=TyI{J=0sá)2V%-b{k:@EȘ,Gե[ORrå)eX7qzKYAUUZ -}5b-&S+oy[c͑bւm|`):MSu`G_yB'\`P4 -_ FM*֟ pp{&&sE}C̐jy&4pE6]]4A-6R)ZGQ+XP%ah+9^E:Ar%]R`) -Q%.EN,PDlCuesDWEĨQN鼙:m(fS@x -=W+S-:ز㺎(]d٪pS!LHZdR#]J|ǐW5n.ҜrHҀnC ֐gX@M6 F_jE:-)ߑ'%j>W -\5 :i)xFnpL&Jҩ #<= 1) •V!xH  `lTDYEs`LᢒA[@̈0cdʠ pP L!P!&)xl/fŽ_LQ9ڞg[|/մl\ժÃS:XiDl%oitl9sFXkTCpvi.V%t7ltx]"\EO7j I(g)Zk@/7YGo"Mկd6v)8^9UL!0A+160WeV6t`y"DXbW>'U#湅=cqa5MgqYvY8H9OLՙkhJ~@kªšIHIq6Q%K1GaW'td!"XE#L#1^tzwu:~ԍ?{o x /P9}~|뻙+gcXŶ۶ϩMeeeFFFƖb8 -;q ) (*+f!ˈ]wΡބ7@Xp*@OvfERˠ Ky[,,gb%@.ś=]FD˚Ϸ%\NC&!hA#f`w12 YY`gR]).2NN›!)0'"ԣDgVl 8UIV~-:_\e&v;L ((LdAGjBաYN'zԀ7JtYzv.2ڈW^HbFn --wF3> wvO?>P('\:[RzӐX=#0.#JB-T$L8 >`7"'`Ȭg+]@1>y"5VҜ]Dl~pQU'"q: 0)1t YG2VG81!Yx8`A`wBpIvMW1aU,ա g睒\v.P](vKv_i)#,f%p$#JpÄʮeCn42AJnEK`$~! E71MOjE)GH%QE'J $lX%4Ep nJLK82Wo8ˀ9 ȆlddM*7$x*bvlm@Vā:Ӂ'kxreNG'eGx c11ʒ"CV77#}!0:SqzŬe {>C ȇh,(V -0 -;" -I5`2a iCL%&s8\ [p:ДE - - !Gv%A< = ϼ)$+VHc-ExX0%E h8).lKBW;K*bT6N1cZdCEا. B B] 93RB>܏q 8@R$UUJL`2ބvD\o"Q?^c0sAATAS8Fa6)%I,#߳22x4Y[}qn4l} Z"TaEKZlg>xүɗ -Ed/,'37U!i](1<2}` qxQEe1OXZnjMOz~"+x[>D`Tz{V~hF 3@x )ӗ NQ4l4𗘏* | -Ei e*F tgb6"A 3I40vTpIU33yI` 剰AAj3bpa ';Xix,Z8<^qduÊ24Ӈd8HD'B#is'3ՉML"]nb I39~Xx'cw) T%ldYAϞuLt?$8qJoBSq!Kb CT")jP f -n/3P /4 AU<3ox30@Q"Whf8Q})[XhB t+~((K%N -/4 - ʊ?fj~KCf;qq ;|8ncAFwEfڪzFfu ~-_;Vr0dK`68?1#fϙ%#emE1Bl$X"LCZW;'[MkKGaEcqX܃xf|-%M<]5|ؽ7;0[l4Du\3D1;;CN >l&E9NH0tلL&* MxiΛEBԢ^PPU:d -Jxhe;U6gmE -t?ЍU` xYǂndx<ƓQ<$*:%2cطG yu4Ъb.2ΰ!:{˰)t+ NJ,d0m_#tdq!CbL^FCE$I -+3"ZCicaBĴp8/COqpAA=NĻn] YA &cŢ"SoY9ΊlM,2q*2dc2 {c)S'p -XiҤuJՑs~فA57GIGAwB:9+x8%bayy:w>az9%sM,SˠČS8"eKq4,%"9|= - ݙpk`,ȁӓOUo 2pNRa!/7J=3c`Y>fHɺ3ʂα%Szf%:!ҳ_ULu# - ٖ}=ѮFqXb& (P +s,( 㮇EA0sˬ3I3gA9W^jFH/kLxgI_!PSXV<<яŭ>Im2VqE>^,< r6sHPQ05*F"EF3ȘGƠ)2.lg!UȚ=c^>g;BREAdq(a6(> Rˁoӳ N*WqLx TCv=\#2Hdq8܆!n"^AU 8\j&9l?Y`vif n Ɋ{ b cz;8XG@H河4a@>jǮPYnyAn)PN&;A0̎bl]bf*unhf,Chw"a"CUF*B5GRREnK?i|NaJF7l$Cv=VaJFm[e_u_(t!C8uQ9p:'vi]hqmцwR:q4o:c`s]#Bi -o=?]z!P ,}id[d~nq7qILivwMdx:=cUr8eH"y70% ]DQ}Ș`g!@o1 l#A> RĜ$S S80)y>eepR:) #P"8 b.RJ .,f$W3NeehS7{z!wI\_cAN=,M3weIv(U IiY#٫M@x$\\FԍZ^[P8@XaIB[h1E.sҝ$~b N/##mGF@aw =E熙MY*{E?/w*$¹n! -؋~٘G?5 * K>L/NgQS$Axw ˷;܁J϶B4usB[tX얡8 5L*[2 95Dy)+R+/y)KJ#C]hKyX^Z-/-Ut@^r|Ѩ4gIΑΆ䥫Б/##mGF@p 30U^S;]Ļ -V ޭuQt+X5\ypɦi׌ `dZ%>ŸyH38c>hK.XeLGdfmK޾?7Xv͋0 A5e*, JM SDn\P-"%pwqC;07<Lm| "[.<9AcF y"f'>{?p624DZ2VAAG"<>\0"Zq(M'_hh/w#=Iw˄hhWk%f~ڽF~V%4/N?*6nh7X u1ȓ>KŠ_bk& =״Bb C2 YB5I>4eIАy5`?_j~XERu6S;HfAe^$0Y(BR\Ye҇5p9mh\mF5wl7''8|-I?ޔ'>.$ -zP+;v2jў̫׎ D!Yn]K;Z'Zh)ucUVvQֈ. i;ZkZNz1RD7?4}4:Q&C%CTIRPas8阕 rh5ʳ9.a'BֺEbx rSK}WYgYK߆orj+-ʹ5~QZоG6No%V_2SZ$Hin i kFDŽQL ,9oz\)7Vg s6#9OZo~;7$9OʟÿͼھӖf?v#ǽ}la-c~ⶾ'<)I?N -t'<H@\0y&cr3oځ:1C=u_2pƿ 'a3SDZh}b:_ y_c7O}Vp_DfE8U_=hLe_<ޓe-O$O$Mp@=|qKjij*^-񊀙\?d= l"E̊a%Af?7?r&tN59/\,$SYܴXXFwVjLf!Lſy/NZx?ٚLn￈N/`J? GT} J2ϣϗ陮< GyR/De^ `/PO' -p5mkm)\4w"ԛfC`+ZU -{U={if]cpeOJītEEYd coM'D_Da!,6MQN?,4;Һ<QD l0Yt;&p~)x7/_D?_gꞀϜ0ǃ9VfRTPmqv9;dG(+YFN)*b y`jlk5,pCMmy^:u`JNcͣY딪sAY~կҦk͡=:=8Rô FAQѕ(Sl#_KʊŵT!YX@V -6$A˴*@qjRdG܈$6 -9 <{@¶J ]ݢ3"nQt T߲3&diW 0dd8b%mUi( o{}>ipTƑ2kF#({%]@>n1yo"D~"xNA~ꕁmSHN]6:fIuDzD`=sNAA+<^{Z~H hs`2*͹O~SoZO >YϾu|r93YdqZէuzEWBo>:e}l;Fh^Vhl1(*_lUǿ0X)׽m BJ2ae -?<x}sVnL7\`FhEwi,`KzA|h^~{.ZFKi@&D؊Vg?i|nAk_f3TIAJnh {s٬w5د=׿4& ۨ>-Ri$PD|cLGW1o F@_9 'G -1 izkԞ[_\|hTET@旲%`}?_g\|L{s4g?8IFsL ,"|0}hdNOB򡱔Ft GY Cٞ qϟ=B){ZgR~g5nW{~[!|hLZWОȐ,`޴DQ~ o'(GhG!~ٌs=,jCDg{g{py6sg{6oNT =ݳѿe*T?@:$yg{g1 螁{ tI3H c t@ _c7Z? ,tHV,tB,tBc4zYN,tBY?y1yg{zmRgU?eW3=|{?<9=||yKfg{4 ^h©'sm&kP$FS` Zxnv֬WbY5ijoPxOZgӝ[6篍֪⏧^GkuIm6)n\֫ꝜN8 PgPL_}&C30\i5FjsZN6~p;z16O&~QZ79VqDt\_Ã8чל}h@IYCzzfSf hΑ%-׋}1NC= 7?GӬuSk'% &C+;^4s;">?9&s3xnF~ =7f s3xn<7 qBf s3xn<7f ǖfvf ahf s3xn<7f O4=7o=7f Cc s3xn<7[f s3xncs3ns3xn  dv5H|⊍~'41lb7<,L"<CClw־=O~ 䙟a EdΨz@ ~Ctj5k"w7 -n ķ☙?aml>xJֺH>)ʾ}Nދ >cg W2?) `&Lq -c@V"̆,SY<~dF˳!KTB q_Y‡%I6dN!dI9"r&P[G,~ۗZ}Yvm'p,c>";Q-@E^\u,E͚Vm3rV.FDh} -iVumq zlZ@ H/Mߙ5}xqR!,ECusiT#I;Ev-:%CEݶ*jj]syBR[+;n,{ mdS@IJ,9;͑ޭ3YFji=Wl2Q13ETN5cKE$0wmu=Be@{,щۭq9:8fBo4'o2Zzj֞\A=ik%[''Ua7=Zzhc-kN7QxfM1¤oÔi6G}g 7eP%5/V[%ꌙ0Xɴyd7;^DtVI'2 tu9mLBUteVknct:2HEglc9Ul1BX]}=bs8qciZύaFAwsthpv{ 5vusrQߘ̞_Mf^"0oΗ -79aަqJ(Ư *$ hBp$hK  jT5}ՇQm,grwۜ<L |C%B o" 쨘_tPo|#1OhaK0;N鞋/Ӗ3z+u lYN,1 -Q&ʸW_hXi@GNm96iםN pZJr44E MP#[~ּz8]* 5FIkZ뮀@So+*7lvWK行|nxPL =;"4_8\_I#L(;v!yY+ns]݆ -"|'ԃ{Zch,K~6&wCMdZFr# ޓ!R}+F1T݉ VbhA}zeU6ꎅ]b]H+̡!_kFvV 0M$(Wo5c#;qTҍG N{4G`-0)f}ٓq4Gg֞wLcBǼ+ӻNI&GmNAx& BB{;;qOM{z U*,;qG upd Mѹz5f~j{A@~țXwNF\V+ɲ̱_âl*+88l';(H%Sˣhn5XtDE@_׬>cD&I'OA'NՍl@8;Q?]??u^˶?\P^n4Ò x,<%+{]}Y{q5L~,-c꩔9 |<ʅ:<1m#4moƔK -oca.Pil/X?ɯc:u kYK~DX|NWx?:R: و?Vj/~R 4I;=sޜ?||_^Wq^I sņ) -tiv -mjؿA,ŭ:4nT/nD+qÅ?rzGgS?ەu?-7j/{մ_??7J%2CKٿ}p߹z|}9O΂?{wI;?c|fflE)?-j|H3W˼XMospڸ?U,/_v_5ׯ~$-]{?b<8^ϯ$vH74i<{Ԝ ΋/Rh~cu7mv_ճ|Pgٻ08m͟. - i.֘Mse#I@~S2ҹwN5/`k% .+uOM y|p3@ݝ -V$p/|@io^×`ujyaal,z}/$>,\ gݭEnA[.T nۋ`p8\/czv0Ti5xtnzw|h_嗚|y|ەRs_քťzt1l/ -z]ܭBs=pZ,,n-ޜ5&,>b+y]G—KRD_Z.KwKCCXʜK흥ZЯ-U땥f6ԫE+UHR֋ W#CV~1twBv6Ԉ3R?/Rx- vx &\^_$.O0\.^¯ E\&_We>/ԗ}tЖ ax?߯p񸲱?_\I>1dc誳w+/GJt7&WC*nFT7][=)u9~ħVedUG"핈EbǯFň\w|(RU#&=JFt&D/BыBT;<ߏ6Z~s-rvV\Sq-X;Yk7kŵC b 3;fzsdȴHl0Y8nU61GA"0~ bmwx殖{\Yk6ć/ '>!>99~߫ KY/OK[pp2/\-/z+tR__Vb/KZ5Yft@)e>ۉ|w. WrR>9&Ne5l?Sk۵T\YTmy^|7֪jX'='FLw,;zO:jj{xά3p%s~[Jd^ԽAl끕|zPзC'í3]S !szsl~)^ܾYv-8*׸xE~Ǥ8>nn%OG鍓ÝWO^SW]?{+S%m̟\"Bk9l.A~M_<ﭝ'v?RP -;zܫϗKM~Sب_[Qu袲z \2\9QvJڿ:Y m\=׏J+O ux})7~VYfwn -M3޲!p[~(n߅JDvswWlosi>{oIM&/?FS+?+Oa!Jm-dwťvkLq/bgxVR{sRޖÌVV_ʧ%Sn^܆uM\o$6*krryկ+3skik[k^TN&܅7j뷵qh/Ry߭4_ϙ(/1}ikԩҸzs7\RZ%UZcU93KZlsI?>\Uy_/3|Gn,u?-\-ݐ%fn\WqmRc3kNZYa¨TN!gR3jmFpQxb뮚vb}y4]E_P$w}:ҥ+gXM;]St~gW wVpVt;hםaZ*QEof6/7+*r -ݷZ(T 7ӣ[S2k:&7&G ̄6PŁЦ?}IZzG^-6Jw=5Xgh;}B9*gpF*^/v NŰ㨌Vs4,Z,;s:CўnC ovOfng#~ u/0쳨u7ԃ tmHVHMN'W /rQ$ }{%f6GLNfvdި3 N}SBJCkGXo -Zְ -yR[*1ZݰddzYZMko֫5x uv 6_jt17ѩUTjtvRZm + t ke5@Kd2tq]{_Szz v'9*U W jVic -% -`e_/!R!;#!dcx#5r}Ȯ,9rh -nMхRNS8*ãk䮡ٵ]oI]X W" 2;S-+oV֍#H Q:N,ֆLzŬ>'

    $:Ftu85Z b#Ry -3q}1ͫGsoH|>vD 90bq ֪7=ҍW_?\OǤqԩt^A̴dqu{.BQ}d$'0/$A#cW.eq/,wqєpN[kYf -f>d$82,<m\s7Ts=3TQ?mh Zr$ekXߣUI܊3oc'a.ij 铄3:8K ;2ZF18vr>ͰNMΞ=;RR5_ HzeSMq]LmԬEx&=m6&[-]=&/FƊƷ=#SއYc 3uS1Z/};3cpψ}9swOhѓ)2Uj*&3ੜaS hC2TQor-q"ӘiԻZLw֮0@ w -Ѿ8M0Ou7{6=i=bZ.a#4ڏda+H)T >zUg:w|]+⯪uiFvcкP֡#Q̖aネ}76Y4:vM{ֈ[hG:?mz4Q}545_C`Av*i%ѱ4C{k tF[!l4]3oXߝͯS=֬nuհJ{doP߇ V YߗzNܰmaRNyv¶ >#iUZy9׾GkdFki3d;'+[Kxv _ -%jZ 理[:Kr:)AV M$Wݍj=悻YǪtЋ?fw7=mmHW5ON^/rn"+RN - \0Yac[Պ|qz{+$;u[ݬw׻Jr5Oʕ "+Dh$Y!jU@bf_w7w.i;n _!o(/ |$Т0\i\P} R%4 - ?^}tB/o_V_T%[=̚&wj O뵇rYtVl~nTqqk+[Gkrn6;- 6yI/y^Kid~٣PdU7\:Md6UUyJm9aԝƔFoMصSe'iV l6. As#rһN\X?RZG"7ԇaT܍w OtbV?N68s mg[*|p돢rh&]x&ㇲcZlO3UODU:I2znkFFv/x"mFҰR̋ѵO'Tɿ6c'tr0aN<^!m]:mKM|a.HO{N:Ĵ&~iB;\D~EU]0D[[Fns\8wF/6J> ylX>>Ɠ^܌kP6PYڗb#y)j.¤ltS1^֯ȜThu QƼx%qk)vh/j- Yu9;η.n-ȋ'kˋJla@ӏaAxnK'KJ,5g$e"DjExzI[3vZJ!yxIo0o6-cA% Q,7Nmv/8=ujgi M崍@< c GNzJ*A#M6[8_dؘߨs/¹vM:Xo0]@c.6FeŰv͂zݍ͸zyGqe8), -zV3t8H'ne~y|WYgO2/A?=+G[Dt+a EگF-vksI_OϮ ^r䠗["y.<&Rl@8'}ZY*.xUv/_kUvWsA؛>fM&D^FRodQY!e\p4t/_4"vRL>Y)$+sԪqԏT)Kg9X' UkBv~3ۉXl~TȌ_.yq7Tm.yMu4Z4V B{3U\ij2O?d|+w^ }륊\ph -bfM/IYʄǻ H'bDE\>\-ϐBcBLVϞU)$3 T -GZ[=#VXbݾSZ&x}wFjywK=sL̏^wҮ #FuXgq:|ٲӭrTW{'gR&l?hxl/PiqwR]czLSn ;,z3@nzb/l W -c``2ƌɲrR-o*[Z~n/wz]{=TEpdi(=nv[Z5UAB l҅'GvApyǀ1n+dӻhvZ4o+/.MiwjJG`/&ob97*PN2Ӭu؊7 )tT'k'gcGl`t[:kT؏QxyҞ2ʢK@[4>vL\CHAT$/;slIdd/bDž~X:?{߹8$zl$β$w;S;sϾH -;;;-HP\ ik29=0-//5v>2RC3ۍ/5Z~ZU=7ȼ8XƾྛX;ǻv28r.\M}=]YDhL?ַF3G~=3r%˟_oc.ڃƓ"F0=<7* ; Cvy86zطev/Z0/l>8SW߆ \Lo8 -S%l[8G돾3۪ Tb.a;{Ok;E0Zؐݕ -zw|[_VG`j`3Lw62X[}"뫉"nIC.9k1Mo^;$m-"F=K?~@߽ƀ^l3 ˔K7rG* so.__aXbѬ=2>vd L>VL ߿ZA)bٯ(՗h/0|F4_1SV"?V7>\x ^Uw,{z{J?l/bn}KXWk|f;*Vgz'+BΊzN?],LNl.NQ9i [D^̊E_@Յ9ѯ-03W _7Yu{tl,Kǵ̵9=^xurlY E=@+Pt2fT]F47~`= 7C&-j6 m+C4qZr_/=}vz+ޙ3vVNl+\nN?+Nnv55uZ}؜=r9|ީ=z:>mJi_. ?j73:u_Gg2:=:3j?FjJ~ʪ^xv:x_ﰓO?fh㪎{s:RXn ':uh's?~?et:z3ӳNW#_N:NzٗzZ_fNa][ilx[zёQ ~y;ַNKFǏZ\jVAz+wD~M$<՞]>:=6ޤ%:- >;t='o2S߻eudlSQs]{u'/"Ӎ]au>4vGַzxt$Ӄ_޾NKs=Y16;Lz}iMnW3|>vF8׿GM-Sv?׿_$:^Lftzo,yXO:;ct;<4޹J&qr:gGV3cS D)B_џyMv44#;}O̴d;]<2pmznˍTim -VHj˝Ι B8lF LU7SEv;zyN__n]Mt7v9޾ۋn/VΞ2=6~m^ ~D6P~ KCo Wոz_]<ߓ }w;ŭ_}kl"ߗg!_3?Yٿ^}%51[js%H?G1?;_>Tni5W_OfR~<2݁ڀY0/N={ǫzCCkc./l^fn[F2~uV15穑/_tT]-DoN\7'UI.g)&=Oo_SY(aV{'׃#02jK;UPzc!YTٚ?6/:(h'?{o9_3s5 -ԩo<#}[t2:uQ9I>:.fJNfx]guzwju]::%?T$Ћ8ӕXG$9wZ,œO$l8#MA3[xehw>q+&?#7{RXGs51Q+'K@.g&3$; Xu03?>[] ԙ} ^^V^I y C~)0.ɱ68C Xwnq))mPwZbP?anNXsGK @-|,n4C:ga>e~ý+ F3?+o{,mȼ =dɢ r32* -Y_&[YѾȼVN_Z|*ށ9;c[z>KȊFs'="mӵWcbғ3 R3qw4ٛIN%Rv[&'6zecHZR4~i*o SKJ0w@;pC}_2iټ^1MٷsLJ̢5Ex׬Eoΐ3o;r<-:w: Z C_q dn4 1Vz#J>V&J\F,o$YVpg0XsV*hAڧh\9xEUKh-}hu֠v:hJWj'48Zq*4n v u6S% -wqwlwrAarZgn"SZi/C5 ->ɈZ<<;:&S" :F1+<;zxD o&.3\^(5~H(D(aVbrmй~Q,MJRJ2m#Wj\IOyRjrȩW(,#Y;ZkQ9&r T';"=6o[+zɏ]kMf jOhJ Q"{ ) ZQ )~b9x);yP\ސ; /$uC#NԀ(6&9SN42޹Fh! LC` CKhd"R-idRs`;0F,gax͐O\(u`jS#M|z/@]j!|u!5ZY\]NWW_/7N ͉nMR^ujEyrLN< xx,ZP^<j;<R2fqR w;.w#4K@Wb%e,FuY\|"OdoY'੐Odv':e y4:3l S$$Ǩ.Dr5x27h\kwjdx<5x<4Y!tr #M1rʤѱcx\pԍ֝lNk'#J R-ִٴܬS7͆J'5N40,?SS:H5u朕X˾A#R/ u%";N7"R1^TlN4 8ͯHvԖF'Ǐa0 -NǺ -G=K]µc,_voA NADp$.EBc峣WcS Zzz_Id:Cc/j8 -MRQŪ5w,p7C3쐤Fת!NTHhSnUf!n,E5IKUKP:m-/.y&R0z:Pkqw-WYRVFzK^ZAe[Pl?-9Z>k'J@kR_7-w+ydo rEB]v'To,+\~a+ǧh~9qMmo[cƃn˺-o`%1lV/"h_Iiz|9id u^HS KFvV/nC Cv\/c-˯q&YׯC]_~^P/_ڊMPƺ~kU^:רJ֫ee9k_{Wk_SBv]uѪ+^ׯ}ec"z3J#÷[{ڐe迿Hu1lEGI] 7$o=YmUHߪM ZfGipv{H4?Vvݯ՛|K-Z>/m+ ns#Gg_꽯4' ߿/'}v'Xu^Ir2*#pΔ┇'stǀzc gL[ղzV-[>4j/M ~FV̉w/QFi8XRsY1ᇙqˁLiPT~kazkbx3W}!lЫKg.di4 nЋ@ADʯO@7qd#֏ǚ9q{HwZ[N%U]ųI;?3숁vILf*dʶo7hv Gx&{?`5~7Ayp6,iYX -&]K&챕` >.<͞TF#1̇ .,&XlF 3#c2q3fi+V|{msG1EvR;U8~YV~."PA` gK85#lI>@k ow)>̈Zh):F#>U |]<:Q48r5s -G^Iֵ g:_! -u$*S;@pۊX !Gs5GBKXdTr´$ y(yW{P{c sS[rc/n(XQP@C,glt4efl&t bin dNAʭ#Eqͧ?Ui}5br"xΞ6' x3 -TL6רqrozUm|yG%&5ַ8;y/1,'k8r_wǀAlrfmlt l m>>t 4l3vVÜ5S)Ѐ]6o7`ƣ[iwʔdUj1T`iUM@/uũlOR|T mcRrzh~mzYr{)й#>VcCiUbjjqtLO-O?@kedwlkLNxɰW&OƁ͏GFؐ;N G#䱕weJdW[/9Zo0G=}2DNxd<қpj&I.ۋeIjâre [2*/cv7e'71^P!YI2*2OfG@2.6`姄,4eNTfQ !>NHHIon##sSoFB@*|xlf$후Jm&(3t!=>!CTH}6{֧xL40µ6#H,Nd$1Eǐ:<#:c# 41gnS4P0jD h.0璣Xn'r\9FEe܈Ju7-hӠ0Z6Fc䎢^:ݖ XogƤLE2 8M].++eH<{[k 6(lS1Zª6RWT5ئbwr 6-T F -T \ZP uiA5ئbԚjM`xT \ZP rt`~*Ͽ kϟg- F}-K|3>iDqeR=[q4ϗot_ip sxcn_Kfg zL8_Fs9,/~x_=S:ܬ-L엞qOOhp<7{*OOn{ endstream endobj 81 0 obj <>stream ->?p{O=ysu{f~^2zA}d-qanF9p|C8ײ0?# ?f=%F 1͞F vSLl3)ܲznC r`C+sz3|0 ,A'!BVOD0ӱ{&m ԖCB/ly-ʁgy&,p⛖߄:n9 `^a d3iV>0U\ZHykS%`\S2,tOR2 -jYe@,X98E;e 0, -z((C+dSlXiC 2ˆe|0_h´]’4@)\X*|>mܰl!fju6,yKKµl3epBstaCF҃>xh8>\` `P`ь9]|ܙ> ׳{Lȧ<Bh# `Д[\=ڞG ˷>L^q!!>ƅa6ܔx;S[lzO0CBo76 XzרY"_s "LS0]jo  "sVڸy)~S| z=݃ߗϷ{|?a_L G??Woȟǻkgu?.?^.<+z<^>!|ƒ3~&z0o^odMmԦj:'sjUx~כcEEm -|@3DDW_õ~mXHA^QaKIׁC 8r M b@(\~{OCp?zf^rI0DŗY}לjKpi?7%gd;gdcu^e:\d_ԹpAG2(UvL(OsmUx#.Mϯ˛?hFiNN0LɁ DX}ن{u !j  GnE^ni敀x.Ç\@M`c#|sҷWrm' .^b>-5 !!󻸘=O;O7fAȬ^o^O' H؀ -Paa0%3e1ZM?郤X(ף EK P !-JZ`(Y(dI^M砼qqX ħuz 24EfȏѿH`6 YDoLój @@Ɓ:boۄA-矔ES(D - 78Q.}/=_5 l%M_>)oC  !0PP5]Ĺ7`2o2@~BMiËtٵ |6ֻ\,%? W~_OV`&-QpbٮTB_GfMk.ޠ< ߁0IJ9#>$C6Up,):ߓZ/ Z@i=R#?0_7/I=| *kiQy骽 -0]"*]MX+dXبi5^}(}iQh4)/d>et_,$Jp-  Ɉ@HM hN&hx8L5=t+؎KxwPEXp}-5 0đqH4n[ʸ-Rێ#a8M X4!l'Όھ,[3ԦR yMxɴև''YΊSIg?lW '" -N)e}!_c&\o! ]"E*xG05 AB 2M5ou#vpn p8Au 0?۲$euVHh3}3"|. +JCOtDC&4ϥIҭ=HX4DjGIsz9 TbJQ5bVv=r+I*AV*Ix!41DS@]xy -da$hgRiNO#)Kɸq>')HoU[2x1%9۲ $CPN:#,~REҠ N!5ˊ [ -2GG% }^$N0*w$G40 -T!$/Zvc .Y%ShOyHgYZP{9J`d=rhq}bSx *= C #bx:'#%;5)]s`jm)㸸Uīc!su1Z(:6,B`0Ef 0\r4gGoD]){YBA3_ A-bC|>ugNAxI`wSN٢q6\F3^}!yQh9v> K)\OAz+!*in("p}T|`4C`T<I+5eh|`jA]>Ha& -kOM԰iG ܣcOzSOyN ra0a a0RzcVqDM#sKauO$[C|toñFPFW)G>9jY)Kg3]'J?0@t5s\!Fь8)$r/!8)P џ -,$O a,UB^,^rLI5ZGh6¦(.;'u.{gy )`4c 0̲_aiP @%L!)dfqR QA2d g; Ӧ"iJ\Ǎ -[P.t XH#_H`"iX1h: EO?6B<ɫ!,K`[\J `;G@̙$O=e*j'P O B|aJM#h܀y"7)6ˣ|eЛJ6`! 5EP*U=Ӟ أ&x5 며S1Im@K#=!H#@923`Ț?Sg*Fπs-,'F%(a8Ranh] zC'cSfD OmrX5pL>yBn/:hp~-4~ԺC :f@2F@5 G [ #tNt $>ڻ)0LǗGmtXazؘB5n@W60.Ku"@34v@lsL^NLYBPB]<eXmJ46_n}]94Gӕyzl?@vy>8{m=Vt?$ٱ[H60PKs9F% OkS̕1D ꊆ9< ͏A|;f$ӫOShz'WMphmDmc1T0DoĄ 8:ԟr%=8`P#G a"qT4R)n>|f!+X`}v(@!ElxFauU&T ,aG X*r8dNU"d;uC $,w`q4#<뙺o{txJ=ClWAq+0L|Ys'HPR@M6SVɽ tXAFN /<t -T6WХWh>1crLXC0,U1y Ȍa*Mt|+6&H%,+zSaBC%)5pD@U~ $;yA!'Z'ɞ) }m_zOYE ^d$(}l "?ge=LAXrwa' ^ y\HT^mSλvD7hk@zF9 F =Sƭ^M-:7?sJ2TyȺrlxh -ȉN/'%i yU9:X:Dt}`, 4%s,zTx{6<|zRR)0!dYAO{#)cKM][_Hݿ-iS&F@U-{e~ѧa>NtC\n_j&2Y֤G-^b>D#)T'1$KuBKLaCJG UK>K$2u, -k‘de% ;exJxR.>@)# D)`XÛHBy}1o=r4}3=F%>'qVr*:gUgjAIsHq34-JfN_⚩t*bdjT0k mbV``HM$Be؁zR"-X?TR -3j j52O2T3l-WjU;ŨZjԣj40<4D3`CLmD &&Z(8GRLFPVluY6@ML(2*O{81Gr$DQ(0BN' ,^ꓛ:Sձ޲˥H Sc)ڎk]uwЬTM4uL"OgN:Iʷ -"pEHVm -2{hg4b[@ǏHiBi -,^듾|җ`sY2AYb3j;^STN*iTT] &{9qGM@RݐP Iwt!fe )*X%E?*e"qH4XP=@h!Q2H;D9?@3mN] X3)Yugal3 WULyL(b9),Aϴ[.5Ld\*$eTؖ9Dv4Q*L CV -, fPw!0ǞY 1lIai4 ( ~Qk]G(y۾Ž+\* F9Bجȧ4,q%ˆ PQV*+֢Z׼–'aR"t`@,BlLNf9( ^ .[Eĉq)31aV8"29=`v \IKI3GZY@4=gz8)̓ji@5H>jF3@4`^9XdNLHUHZ|KI V5m Cn92:K@$<$"#$=!M(@TkMhYf֐ -\쓚5)…ɃT=Ā 5 rcݼg qƥ -Y8*FRxC`0~:Laq-XZ,e^N -G-r:b:a 7 IW*G" ِ\M3?!@$ǗS?3f 9698WM,ZTT>鲄M%25%3eb$N"+7~[SD1 dAҸqol^?a4'uEgH):M5jd8MJ1ЯS'DZ%|VQDgA\FIs#,C$ldE&a*8JYØJ_Q?e_ 2Px:LɨʴCOjA\vuEtd\ChK!Mү#:K-ƞse:HbЩp͚ i,^"Rlq5&Y#s.sPLdfSŀ(|,IPiMCe>#o8whx,H9_<-HsЀ5Rȋڈ)J)S?d0;qh@& -[h$Ȥjģ9K29jV^UF~S]:u"Vmǟ ki5m-$_#䴆̒- X''fAy]}eCu6dȗ RbŐ@Q6 fz&'ZT0ۃ9zjj --րHwD z*0`c]d}LbMP%jP:.T@uuZЩ3dph P.@dߣC?JWB7BȤ`S Sj 3=mY2#BʼntBP-E0݉k`X !02-nRcU0Au7լCCU :Q#2NvIhc1*1§`] RA03{zj0ID H{*< :M4Ԡ-Br4`JRv# -5!m(Y$ (X)$mٰy 2"jot6FYKE‰7`0Oل !<ξ1 "0aD&0BlϖiE:f§(I&ROJ i -UlOH7rvEt:l ScЪ+R,wV Z(=4v>F܌` !Z5  a|>uTޅڰ)[D,]5Fyuz -B gPLb>JؓM13\߄)3H¶4R6-,nf&TȽ9\F{h!!o(CZąᖧ+ N$/d"OB@Ą)IN WV[ -7U5?ZS.G"CF 5}we]=L',S4_) 䫘%= [I95cb[S#3x\[ny S)6Rv^mRĢ+s0Jc0PȀ kR^EnF<5n"bWR'0 i%p#9Za*.$P*0 k>J&樵%Mr;evmkFdI%Fȶ$reЂM cf3\hPiUd-B'Ց!eMj#A66pc`ֈ0\)X`$ -" ySCԠ15C28m  ._\b,1j^D MG8qBNչV( +aaXw)MS&:Z! ozaC !j))I+t)Bo<32 _aÉ`bn5 ۽lSܜ:|Lîdv'`sIHA]ivhn9d/'N [vv^ּJBW gC [؁$лS`)@QRbStپ y!Hb" -(R TT۳3y2rľlt ;TK Pׁ*9LZ*ѿaKpN@֋j!j UGX96y`15AŅ PZ2恢(='} A(h{DWJHJM}p|hhRchB>yk O:@ԅ*\qctvp.Af,FXa"hZ#EDLQ'<]țZҀJ:bmy`ª*6g s'+5e.ik! {gNw^:~.2t=,,كB"NGڣ9 B(y+ɺ/*M_"rysAMiȻ5403,\ƽSMPJ $Āp]CMD2`%nٻ!O{SD#̯m>Sb%LGoӕ0)xQux  =Ί"Ro,)Gm\*'2!6~uTb?@>3(ѡ_Ж-Qr= -o6g_sGe}Emaޗ0I8'y6zHJy須"Q:Nkܭ#?xO#^.E9*8~gjɼob.?Пa6Lֈ28?\n@ N Lua -52>mY@Y1ϙ3@5NfE[qU]H'{\U@!Dav,=Cu$S`&TV@a1 2Z!W --*|V6{x+ ;.S"qpZTٳ~kz`ʬj|&R$^=xLEך " r1L96gUrUqÇP+J":# -j -vQ-lb -#cO26l7G\pBϥn8'PxD#39M5 0Hkj:sڻn ?;}?} pA[ Iȝ1v>䷇vhFV "^H*hmVcYX6ULw )E0u;7[cyTr'̔aJ #4- W2 hedp M;% 0$bB. ]7h "0і3aL!owrPDU+,1#)U)7N,@HCc4yd\'ZI7,yp2F&wÖi{Y(gV? -2E;xNP\i W^UzWԉ}d -T\P>mf\r"0?ؽEzTeeTB@ PNϦfЉk_̜"OS ݋b>IJ\A$!Ko9A0oɲ'1V4xjP -$$_C#`SqC͒C&?bDרt))˧$4@4f(MsԸL !9\Zm)rz޴HdkoH==\p^q6STLcPq$fjF}bBA؄DN3XEcKHY=FTS+W$.M]YŗPXqt~>j2)3d<yMqN<0.LjpWK hdmOe&ˆ~x4͗7/N,׆( -rЎr=N&0p0r`R;8':E*Lh@_–ymY9a2 k*Ԋ]jOI̱Arqħ -eJ -72`B:d:1PZS=6ј"&^&o|$ ˄zVzAA,&6 {r'$4QRM0X*f+4%|k$h(7pBj• 78u%1Ono9q_z L SM^p;҉E]iDA\/Qfr#)ժhԔ>.%8hvL!W ̦ṵ<2$d*y(cSM69M! 1E-iJKX=!!ψu9H Uw8wLIQ=d^}U*UQh/V=߱^4u|z & Ibz]}eqhcqhd` ϚjW>=oRŞZjf< DkAbtMb TH5YgFe;ZW}0qn ȷw o*1( -f~>^y NA@FfT=9]efĭe%c`iyYc8PNS'~V $RNdmo Z2{|>Q`nF)t8oPj"W<>`٠$/@WPsd"J V<(Y]% -*Q>pK_A1f%Q%X+8"4O5#+X/-L+lyTAkRtQk -J9WVn1 Yƺr溕. -0Ļ(ZJk2 0ݮvۜ(=Vnk{F`p> H&o MWjC4-dNQwNjEj98vhFE~Ȭ@WQ2(};w'$maF@xɨ# 0= 2J $̡br 9S]"1lCLDLB) -cKz^N@B>s $o*ՋNT`YsgɐNVw`FAҽ(e]q:V0n\@YumABEdgY^|"@|;VK pmRRs۹o<3A3F1wٛUJDN씗 :ߌsl!A0 n -{$bd$Q k$_wt`lgI"-d5nm𧝺ĝ~(p A9:֫=TE44I\3Mbİ@9UVSP~ؿ62ܿxXs؄d ytY@j)Bc!8AO M^!6kp›AmܪB} -R`ڊ}7pED`fkק6hT 3at /e ,4O;H̡2~=!ޚ;7vE AKWB-$p̩KGeWb܁@P  8!\Y9IFsr X85|<d D(Ξ,)$ jՑv -tUY%TY( 7d VxOT+,}~tÌD*D%t{ꈁ5DO5C|Ly7_ĊϘ,T.Ԣ UW[T>Q{S A|$F1vA>I%`#K`hFc f퐗@iZ4шjӚ(Cj6}^ܝc^,ێ}8&ڱt@fsDaNy 5RT#w7"ѫ7os9<|ӿeSm6hLN\:8o:QhL(6nC.:lCl`(ljS6mv3R5TdЩʼOG!äP3 H-yuxAԹ #iHƨwGC/כWԖ!6$P[/ݩ_(18Q.^+; XB@x$B L -Ш鄌@$CIc/r*[P vA˗"C^Q)y E!+]N (Q -&C:U+,0rFH&xљ6A&͑ 4}&U?Ov6.o Q73ٍlMvߚnɠ PfjH'̢zrDL!rh\ -b İgݦݒPj<'WCgGzֈ @h& $xʀٙ1uI9@*_(vʦb;c׽#/^%-h5d -$6s lzM >MA,CdB)U`H"3Hc1;KS`fjO;׬1Wl!8^nı Dg[c p(e/T{Bk)s^#*zm5 -J`wXM#"K!mb5Df 2fZIyƾ7Z$OH ~7pOno촲h.]0h5PVW)7@.@?SHrgрh| X(blh5ث}CU\R6R -mW)(LZo@?,~E4!2.&G/t?4S*l*bdH2GaR9vR !EHTjʿyjT %bɠҭԄu~5f\bXdL؍Nf1'\.0bة~$,Qs։J 4ymNaτ\K tvә|6NP<%\Y#Sl| s9p-AjTPVYk|[5Bd5O 6X.jDaMV_v@.bze Fhĥڼ =EgLqk=Ͽً-/_,pG? gWs=_g3q>>xnx"PI_͓{~׻'~/zW_|ſo_'/g?^}WVoPnDj񋫧;N cWN~1Kd٢chGpޏVbbU= U71 k`DYt)0|eMX"jKE_lmA{DUkAK:n6$V|DH\JPZšitɭ+fh)Zò^ !er3< P%ֵ:0{`Z(tl6OC {z ~ V'< (P+5t=Cn*haURڹ%[BCTވח:Mu ""j6؇,nza{H\9o6_Z1 eb]Y = w(xƒ_1`߻ݏbf5;J o')+ ;qv%c8Rڌr c(aF.A;X!BzUwc<~k@H%6{$b^+yHRxN1Dmkf{!cli䢩34$ЎPN'hÂn(sz5إ!c)~Իq+>]ƅ>cR0؉;4L !y z; Re#Va0aIw}B@FPlg={y. p'ŠF̃zt݇/%A}X^};pooZi٫=x8=')gQLt_OBcESAȚ$->W^vmefԴDIe9,'夲Ie* fIe9,'夲TSYL1tU~(*MeA̜+wbDrRVNʯ/{ =OIY9)+'e夬b*ɥ+)crJ}4eշM5?~b -;ß4rXN˯/4t>stream -H 0 -O.ϖpB(!*@pK$إ?D4m\bTCEUUf9Dlh `YOeC1؀eD{(!0G5 endstream endobj 70 0 obj <> endobj 60 0 obj <>stream -HrCs?VMt"Kv8I&ѕB!B!B!B!B!B!B!B!B!B!B!^ruB#qH!0g!B#qH!0g!B#qH!0g!B#qH!0g!B#qH!0g!B#qH!0g!B#qxq~qsqwqyq{q 񿁫#>98C(1:BB7{O=܎1z!PwqGw`m g-&Zm!p)qe ѵ/!}!pq gF!p.q` g&}!p"q`_7F!8b gC!Tc7C! S3 !p1C8Cs/N58C !{qZc5tgk#Wrp33o8T`<U@x!_nNgx8ÓLc A\s \.8gx,gʵk;qrinN\+ gy aF(o!"gx$GnBX=GJ pJၨ׈,pS CE{gxw\g%qu崱;gxMxCF6Zgx#A?Eu_[y_KC%ފI 6`,ᝀ?k>M8m}$oΝf_:nwlw/gVJ{dw].~@Iau,P\2r+'$*ZVq -V-]]qe}S([gqm=I_M% - V^m crdIb?TH -lf{GrgSK,(, ư9v/ V5ËdFGd[ JXPZ tsl^۫l7+r6|*r -V֟"H CX&lXjVj6[}2?r -VҞ(Xw&lWlV&/mt |;JJPX7@}W˼% WnVM_ @cW]a] -9--A+g/mޭ@-F}WkoLT+ܘ4'6[1]=@}WЙ& RԔ\`&/v_ʾ}?hK9ݰZ[ u U?/kR%Yƀ.V[ NbjAyi\j\4zWj9b;Tyz)eƥRyc,K)Zl*W'KJTUV崱6,K)^NBbYy\)*ʜ~Ƕ,K)^JBZay\(*ʬ}jhr)ȵHgʅ:ʇv\J-\7"s HjrL0;g\J-^3 {tRuphQ :2;O+}J -V9 -RǗgGR*_ -u?C<# Ѹp̜@\FO|2g~bs*UJ<|lBJ\Z^/L*QÊbG|HQJ-r`/\֊ /[QP˖=,j<&lPӥJ[P|Uӝal3rp\BMtn& 囫MWZ5(eR[-.A" 5 vBN%.h(\ҐpҪ=Y/[yyxwvYLjE.ܥQ8 ~tC:*ޛ9&͘J/it?\BKM7]QҡaLe]0[xxϕoS Ch).>,Xdpg`4Qe]|+g`[g996x;^6IΏO8DMY1[xZxr㗩lxFxY4}fh\g}';` +AH!e=ǧ}fhF6LgBHTm)wGmKfkkPU8\ -rwSaq3PWoIw]-P0>![~OobFͳ0WsbcD)O;[$vU!΀3X0WsbD)O;[$V`̖߳;*Ge<..мӼQ-=>Eb -ly=[xGaIB͋-I-PtR4[}Ϯ<2Ѩ}XBE@3' Uc3TS:J96LKBH^tXӴ.O[ xQ 84iô`!E8M Gߓ ts8:m,iy!]v@V^O~ 46j˸Bɋ qI@Ia騍簴12BbJ8 h x$0tsX:WX!y`%N{B;h @z{c9N;UBH7X^N)z^186iǸB+q5Es:j9, -,}06i˸B+q5E^gP:9,̫,}08jϼBq"LRV(`RGq<՞yz -n)z>pQaig^Ep%yFkާ3&usXZW\ y"gw^S>}08jϼJ(1kާ3&usXZW\ %zMyaz5E:9,̫=or%Pv{MUW$Π_O3uo IAC<%2Ĕ^S)nC=I9МxK㪃KU3C<9Bh b LNV֠9N;U&osk @d_k Qac\u)L`V*kFМxKCHi= *vzM@8Qac\u)}#YN)/X/pJGi P:u妮;F E@nyaǹ/=`P冮;FjeC)A. )b'Wn押QX$= sei)%RP! -\w#L -B{E)rXڌ -o Ұ,$amy9L8z(<`!b- ,!"ݳ4&;J - ae IN3hAl} \dP"( @AI{+ƛ&!D#1pfߛu{2a -rBhlD0'#!MiqsIh; =* :n3B~m d9-.Vzi"o3J٣o{1vI7v* XSZwfM5#4gG|[d'.X pRۅ϶WG1$ Ok!BIuhFtI2N 'VeA_%?1A/iHpRC;7DB4" 4n,i ;7FB-и |젬6OxcT<*DHb>F F]ix'h T?Hb^ -KzoB5 -@'8\~4nN.H TF[V7k>WV'W{t*D';=T:i.l7( TCMva[w_^^'{2@DK>{e.VEv}Nb L2~|7V#y^^ emwrehҐqF6-{]Dʰ̏}ݟewr&gpҐqFeR@4\D'y.'V_.ϻ!+ @Beta[vF+D%7vGmFB2S$&Sʰ' [ILx#2P aO:;ż -%VOX44Ƃyf)X40o\'y'3_F+Dg,y\gTrU$r\ %VkxG`)ur7!{'4Z!jo`9ڳ2 u#Wͽ(j TNtOwZ?O]FkVR^{( C|m&x-PS=Нb)^%H*;ՈH136~8- '*=5VƋo[vs -D6( VDXr22)Ұ2=?~ х_0 p47nw4* -BA%Tv@xJDoQ 7w6&Y@W?IĿG'B0ׁx= o|(J?'gĞ\gM;@F qX<20A>i :l gPy?x(³Da?q{ ~.8ѕ2؂;%L;?eЈ{#<~2~/|Y||݀ vye+I$x*kD=64V| gfH$ʱav1 r9<>0:' -(JV#YgrKy8o}cT2N:tguH2ܧ{FA+CȨC(Lַ1+: N֥1:'_utg0:c[!QS=xvtJn|+wcܗR\P<9fnqŶ6A@bS lv72r0~:9@9c;}% ZvDy/K/WhS0\\/]#n.8i-#xm{z»ҒFoY]O;e1~j Nel!:`@ LUe:o>*30,`VYX\ixypBX?BO%4F$%̦?1ʠ=Z׵`m('ŧԡ(袄[ W e$~&v8# ˓,Ŕu.R5h e |g$)@,fa~E h2,ZPjXX|Zz8׳aZ!|ַ`2k!Q[) +z2_3Ο@e I{PJBٖr 70nϰ?j`h3sq~Q bvu(KD(`DabeXC⥔ϣDx-kfke0eHKX C1l'+!2ئ>_ l/՝ҞBd2(Y?-uBLʌ2$kLbz8+7vQye&0K?gj/-𶆄Y>eNERP]o|ZQPa_93{i) Ŝi|6ԡsq!fYlɳyʿά`Q\n#!Oڹn?n׺_qWY\>r->_iqW\hhdjZh4V҅VF(Pp~H[ 6"24 - FcF+Ch4Fh4Fh4Fh4Fh4Fh4Fh4Fh4Fh4Fh4_Vq endstream endobj 53 0 obj [/Indexed 52 0 R 2 84 0 R] endobj 83 0 obj <>/Filter/FlateDecode/Height 300/Intent/RelativeColorimetric/Length 18384/Name/X/Subtype/Image/Type/XObject/Width 1050>>stream -HyTTp1XWbTTjcrԣ%Th(AEMl5=`:uKڄ=֥j4%VS.l3SF@~7}w/77xvͶ.hhBHB2 d!$!@BHB2 d!$!@BHB2 d!$!@BH]6=zkcK zBV뫬UvкYB -$sJBu:cbH-@Tu#=ֽ\? )A2kI9s}@cOH \qمX 堕k쳹#Rd ^3 ~0 u2=5H`w -cǴz"'u, -k 0cZO;KJCieCF`Gә%RGBXdByEʭAZO+ɐ(A2pujY2:i=&u5H-R7^:$_l -1ՠ:o8 -8$4b@ :q}"%HhQ?C -OՅǰZJl_zd=ΠH  >ݗ`}Cu uf -$ԙH/`~u(QXjƽh֣?#Zd¥Ky[wofȿe?I_xza8fevk=:cin-opOxC-`\ΫCfn&e\k^^2V ʉ)nҋ藎d7//I~ ,ɭ^zA.{Wiܐ P%o,d.f+Tc:o;u7֓H[uo#Mm1_4'\52neR$C2ބK[ {&~OEHdḱW]̓@y픘 \dйVzi[]WʑAɠow,ErSjvym \dеqJ<|S }$ g|dг%Զ{͓J !tC;zi -z$IlmTa[ɠ_o/eU u6u\"d@29,U8!=}93Z{h>ss+jn z̼}]BT$ tju1Q -VZ0 k=XO(H]u)ӌME+.h&@A62n5^Bfz #ɨnsG`C z4q!-381 ~T S9h$uHjw \K~#qMYsc W t(%a -5*rKeXbˣ 3> qB?1HgMQd`pAw%o5Rk#\x,u/%Mt&eF Q!{r^|KGZHy zF s\p\"YzCA$Θ[Y\\.8\ gYɠ3 ;x̓U~\pב2/$?2BX}%2~UL!)FWl:>0SºUS%-0K ( C,ZY5w o`Q簨߬JM7R'Ѻ!y[F0Fv1b UeF]37wbʩF|qp!y~pubE9w/t/nY0w7w+6,yEVJ[Mp7Zi9Y -;cxKnRZ7d0-7h2Pߡv2݃ 6CԖ;=|0M~Eolŭan-orA~¼y3:_ G7ÓAƕ `TX~'6CcA,5"B|P됎6C2<\RӠ7T",?B c }JxJ;`1h`# efLM%5Ho)IBm)_'⊤(aI_ ^52Ӆ/⇫qe ,Ǎ8aܗ ܰ ڳX臭n/G qhʫd9KUD  ׂ;i >bfO0I9J?dNEgx!y ~|&8 r+Zf~`4v3SQe4Cww -͠-j q"W`)}ر;J+X6 OLnwnP\&Jiy,tޮJ4|X+J߰h*9$r9ߩf&7CD\ ɗIP~Uma-@ed)b:L5z w"M|<͚Z Z ~u* F3hOȧ5}qb6e##Ό%1f͠MF[ ZTaiMi -i8$cXjLzVv$cv'np:zoZ CYޱ4|\qFgJ&vFɻP1g>vk/9ky34ʳfoz* kU&ZDK T"6C{>Oѫ+%w3{hW6aNj$A4Hp)|zU+G8[m-xr sM \&cKتrNhAf> SZ PCphGgC3!u7o~Й*P؊Am^֫@lQJole'-[y^af Z@]2/ 0>E$|-xqgl3l8]S"u9zf}t8o$A*+T@nDz!UlTcM4~,ùxj-{ ףOJp7R\3yj \ZúLaMthfyrEofp5zOl"J ݝb{?/4C{ q=\3|0j+G+yB8弉=/ֻPf wddl dZiMD̂.y-q}t[ Ck5qCDfIz124fVϫIXoڳj=&+2Qˑ/6jRfGH}|bqEpdjr~{'^ c ̒L3$Cմ]1sGM[x܌`;4i 3WͳbmfH3[D|bPFQ?ԋ DV'C !s+% ZiEAt+?"+@a]3Lc1Xn/69_Ol(k<."s-_V-fXnDJSXD-zpxL"+@`]3|MIHS\4CI9GK Ol(S!NM*$n !z11[pC!vL$v8piƣ!ǘy -X N0X<@sm _ɺ&ܑOl(_vIc$g!J}8fHiGb5̨8/ -[ Y >ʡꩶie]<"4,I:&?éGҴPy -2[[0OxB&Q z5tv,zmonZ|dӀqcs-dSTxQvE限كޒnr|@oQV) -$!]@> Yd-^L3 ]V䌦M(Hbb-rG( w`́t34X=_l$bGf~ - S$a%kH;$E{NujV5C؛.6g̃(~BBHd))LqZ -:AVUDa@UV[Z@AV6AM",!$@}o>_;^]A(P}\jK< y W0N)i3H5i7y"W2O~5i,-\Ҳ4C@< yE 7yΧ -ۏO<%moH) NW - a&}jj4yZvNfh*G=KMz:XϡsS<%mQnsK7鞂YNK#OЂCOB^.PM>z&; @Wȓ~K4 [Sҍy㺥 WwP3r ` 6%`}e4i\u<"y es"Sf誾ۢ4bE L5"Ae4i/<$Ӫ2 ~{ yNcK[=Ww34r?0bj֧fXE%DӲc4oL•3g/Xbѹ\`h:PSbğ15S3lbإHΠͰC2$Zd+3g|Py]C=pҧfHP"Ӥ2<$Ӫބ!e φ<nEJaJdH!&`mh$>#+o4nA2'&b!1x! vbEJTb>3$&`˺.Dl31Xy3D&Y9=oC,t*ou<4$ܫZ7CJ3CUŲcM t;DOunrb Snky$X{EJΈOͰfO ?W\>\y3DJp tD*:7[d4`p8UQԻ1"WϴN?W]iٹfP&쁷K;g.؃V -4FVRRfL:DLa FA%zyZv"zJ+@&AD<.0gAsFWv)36.Pd*Ͱ"]$*^#&}jh"mỲÛ݈o2'/]<~Fת -,fKY??BfLX?a&}j4G[<-;GDX0*EE7v'R}׻Qdd0iاfx;~ -kG}Mf-Z=>%;j_fhKDOP 6`?'N2 -!)WEyVJ>dR,fiڧfɡl`WeˇbN2 -wd#\Jڮw3)3K24S3 y]ҲaۘN2=r&߀am?@R ROмSlLjiگfEfҲ((9,&8hl.9_q$Lf"ֹD͛7!Yr ?ҾRT7~moGkzXO`W|Gg3/N'7 f֖}g7h Ff0B)S93XXF[/s4C2G%ϙP~c0+P֋%#,Uo-z$*{;-yxk˕[˙~rG%o&Q Bm0B[+ConS -$ 3W,iuݙ N UJkF EGfqvP:J؂ZĽ -upDUմٹ./^py pe}dACY7rCueZs f9BVmKٴPHI 壵fڊt~9%>y'[C%`VVmR-f淕;- Wh3d -GW =`!+#4ݥ~7{@Co/+W-7,fNxB3TqyhlmਯP13%yu -9O'2kv\TINqAΌG%ƕ$&v\FcZ=Q"艢fƌq CEG\nVz^>Uc1cV D83(錋;FSڧ!S3t*,w4O3(V(tq#>'*@::4xaM6]3tmS3ysaΫ^:C$*RǸkG).LH2` -r^gPo@@>&bWxW^*P*Ԩavjd h4FY=j][%јpIaҔunЙPM0uQWrQj!Jce *QP8?gvWxt+]kq|S%1wԭM;8 u*,GJJmk/Pb jg@#شSQXEz@93tL;S3x/W=aOF@7\? sng*3^6pk3PI41HЗ4=cth̄{sng@3X\f;S3w)XC!}AJiWe*׵V7'w8+Qx7 h_A8e(+%"pR] ]EZsvg?{ƁS.D h`] 3rzg/mJv"|cTnG#mPr&YKm, PkčeXMd΀:JxD[N x<+uRcٖ~|3aR3 ]2u5Q58OG {-w1J+w,2 k@9֑M0Rʵ>}5MSsM yH/I> X%S=pnm~[*xXO4/BSR3 Iɶ (8[n_jK o`Tv3ӼO/bT;n軕qn+0t~e"Q'n >#/*C8B)kg@u\z' N׿Ѧ2⊪n]:BJŖ^΀\^`KHE΀ܒruy΀2fu%>Eo{"HA2:Ba ֣T spga>'U)(sj~gIl\޲C nkw"OZPt,BPzK̎5!PpHZ@?D_潃kY3D/-p]oDH'# SEg&cbd}20*|pu^7ڡda ]ϚExW}=5LGmoV^/Lileϖ֜IIE5`q. SyV;͍_ WiX \~/sLzje秭&a=C Z6|ܴ֤1 ~3Xi.niYYi ۡ1aE`^@V*3hEE ݘ躥DVC5샶uD>U,ʍ/_„1j g.t%V4S*jdO„ǡ֭x^r'SK\z Zʡ zek+yR]](.VK$a7 ZN&LJMl Qpˡ I1u4{b.&pk*As2iptiJÞ VsYVhNp QOYJJ3r,Ұ=Gm(s' y:\iv_w)gK5h=ʗOn )`\~fLsۄlڣ -GZQ'Qt(1ʅkH[k p0̴v -?L{B,ǢWP܃ִ#Qt[)׭!̈́2#qy:' xkb99/Oto/ő8 --Hl%P אm9ǘ췩;J3|ٸ~ -M+9k ŽzhU3Hu7I250_GWauZiY9w$iNi93`SXW/;geIm.,ghQQfGo7l} !v~ 쀓%9C2k~Xΰac~`i2t~"?Y(ȅRr K~yBe9C-"og)<443zF+_.g *WC6NʹtJg lfY~8C\lsST#V!϶6J z\ ZH\ "pBJzR* ҊFbY:Z~c8u[gp뭏)h.Aށ7Kp^u -g-%//(̗Z"Lz`m{hʏ<RCs/ g8]]{u q1s >lELut;c<=f ig]_&fκq| -Z9yD)jݵ -эc<YDTDK][7(J1qbOCMhUB4.uMiCwQ @(~5d|6Fx9|0Û:xe|-Ui:G59ؿ6 .K4ӠruvڪKuQ鳛pH I L29'Yht&O,P0?"j!O?ebf&! δ.\~k "$xRM(;2nxT{(;`%9ϬiU#Qkś[Cſ`N\묏Cv=Dž3]A$%o -G?іŴ,`_sq g ͏W6=SnBnoQr?<"Υ&pg;J:t3LAHnV!k+wU™3h3C[Vf8rYu;m*JZ6$D ,E\+?{PI(yTR \+3wR2M6n2K=~Žr;)X1*H[IفZf&FL W\R;32Cu1jGa yX&&3ted(dY)U]4|Q*v[Wf-`LA=f|&_hfϖٝZuƢo$$/(_. رQQrnUKv7Tm|IrSiZ`xta+vbnfxARS'3Km 3r12` fW%| !)e`WT9w!U{-!>{f' -C!˥B"/Aw % g-њdQ -[ 2^T/PU)?2QgmL^fS -=@801i2 \0y"8OASaYA=%:Hg!1C&$$+dfb'٘x:rȃDT$dV0lgqW.bp!ʕ})Z\Fo/)uߘgu8H 2_e*7h-^>&oi!c>ܸuB:+AH&ߡvk{.s#wy↋$H:* aQ/m7$p^Ah FhC -*{UA^hw-H#5 -\S؁/}){d듛-P0 gu' W [E{aջ 7 !>ɀ-Enf{;Q&.6Ѻ55gp0`:wiwL @$5!T -?@`L FLX=XCE[f{1{wjru^f`{X5G:޶jLdNpJu1C*}-I9bi7u57]5f ( 7-#3dE\EZ 5+F3؛AjA>[%<3P ^nɲꅠa( 3# Rw+6tSO//ov'F" E\T5@ k!ǴI^|@rbTRr]`o\a \قp.,)Tf)9&Cy8YQ:3n g/>xfqqH dhap_l[|Yzj{ {ч -%ɽzG>N!,*v^=y@C^%. -6 T}r^3fp%§%~ #5⇀듛--C@5P܏@ځ듛-\~T S\҄1'6V*geOf"iRwMI؏"V<~KAXLŬgzQ.lg2د򰨎$^37(' 'וa=UƬ}D+nkԍxd?5$1^5`V >1*(s1çǼ~]}.>D'Z맯&TUoPfhd ¸GŋW 죀+fO59n4%ا^"3")U )#\Bf$ivQb -ZNNѾHfl>'|PN6 -x2,Z -]L[ OY痶,KԲ׆F$ʰZ2g6JEU^1 J^`F#f՞Q3Fqzx]0^v=R.]nR~=ahue%ʂen 8,.X \A\:P4ԍab:Rhz$qhhT_cMJ{RƾIdA yOZJ5%T+x QzI f=aqx0JmRzr8e f (Ӈ )U 7K5yΥ20D'5|frs "b`ch:E{}J09&ء.HPU -=L>IYRQ$Z\zv!^jN⺴ ֮y-MAW@=r1B ̗D7zvō0?r$ocTfk o-hx?mK{́Zw{`O9 > -P3g#G8]y/GFBX$ut1f<0Vs*;3@jgx1.k9F{kXor4rfPdR -?fq U pU(4[b܍rAfI.xSwz!jŒN-y;Zx 8K<>wme`ƿzҌQu($|fZE.꽛c"|~Y7CV7𱇛m"hk]BRݕm-3@sW5[fmӴchJs,iE3 6D] !UlYlv,23i%'[̭YRT-x}4kS <O4 7S> MD2I9Wi#_o^`YgŔ^&>9`N.g3S96c^kLhQU^34NO3QXiZ]0aR_z34٬H{"vȶf`뉔7 !Ulmm] -Vw};煔saZZ[r - -v^gdb=q ¬.M!:RB'6̼sxs5>σ#^Idž!8a_z -jI^>8waћ; -!4m@ME{#|K A"]vq16\ler% G݄ ->ʼ|a 9?B;N9:]^&[T(-7gXG Rb^6һdoML3U:0pbRcCvmR:6r:Pe !m:["QZ]njΏau %m[zH(cy((qUe,+Q qIĔ>stream -!&dei endstream endobj 82 0 obj [/ICCBased 76 0 R] endobj 67 0 obj <>stream -H\WK$ )]d~ ![̬'<_EI/~_~H?qܾ1a;on_>#){|`g aGŸe[>_oziu^bz?-|\2V>{swq`mkv?G<!Z+iڍKrN<FX.mS ]Ky-;.l]G8zZ!S΅u iٰ>/Hyن,ݥU`xƽz:ސn`9eq9-(sE\!b"'3`wz摳B1+@(Ξ Iw -RaXt\y -VYz^b ɷ+/0 ah? q8 naul0И [<Ϝq j:L.m ׭2&81ʰ)_50J -bcwG (#z%IY9^M"'ڮ ̵c^c }ADO1;FfL&Jv&|Q3^sәl;| -Net*9/t-zD~6>q=3Hy˜WHޑHUSYޡd(7˿ j8b2ɑ7B -gh2)t@ YE:Ǧd}nb7ڈm@ E +kC\D"z0R^C- &/S"օ"Al@YkoqJe\|=\'#R}1*_]A1kEVefB"'5UT.#4LtKX41D,6| jJ r@1mc7j&|i`Ce,PJDl,ʇMxZtQ0kp@ YQ+ X!PsnSx6rE@ DupŖ 9 -=@&,m4v2xPBcu~QLvC SR6E b`LJW24h-LТFraB2QXU(h{U}@iH}ۃ[;kLa5TΤ! a1'4|8V '%Tu3.j9|d_HJh"CS6`Y޳귥MyĂc1ڟASOX|TUD'I,-]4k=knլފddVVwJ!C,6yw>f1naS{LA8ް'jxE^mVL$vL^qM*C'})4)V%)J䍮S z(͈&@zYP.I44\qdYqOH[ i&"_D^FXejE9*_WwȣXUMxV4X ک[L6tV+AQ?I陵6 (:̲FߐW k7U!.1inU͂X1RJ㴢l@9>HOѺvt !N5~}2XCmt/zQ|͟*}j `FȐyTNoi=7e6ŷ ۂ&_|]6fpzAz{UV@ǵ"*x#VԒV+Y?q_ -N endstream endobj 68 0 obj <> endobj 85 0 obj [/ICCBased 76 0 R] endobj 63 0 obj <>stream -HWˎ$Wt-LZ>uoXÎ?Hw 0UG"׏Ǐ%#qqˇ?Hg--|_oxaGŸVϑ5z.|vy=әk#lƭbٌ,KVǖ*gWL#p3eITz~B]+r\ٽsj9lģXˀ 6{LJ|>}AŃaMpXO|g8^>'#ӥۙJ 8slP7̄;Gǒ`*pq< -Ua V^6]t (^gIT׾&д~';  iOHM?E? ac.r\15,pp k;Qd -.pŘ/4`e-} ˈhK#5B?c?S T䥙˲7GIMLzi^˯.vT -$ְjQc+(wGȎO8*r!?On5W$}.ŧ F`^cg3r :F~9>)_?ZH1mqR3okdp|6P@Ll*=V6YX (qh_ ))^ S&!QM=|zO5aAdPImPP"6Jj x SwYF %M5}9>2,j#$BICy,b71LԴ -Q'd*q{\xFOFz3j$TgzGwz/-∄mT; z<n&ln@X|;)\~wu+ʼnN(%YP"yK\lN @c? t"Em''wND`!-=l뺼!!ZBRӾPRmhJ8Z+erJ>7.|o)om$**hJ{eCLSyLɾ7OйgFS2|e!*Zq 5Buy._EJe,o_{n1A[1~ D%ҙOz%)',FbN(JJ4$ّ47Z/WK$+%Gtutq7}ܴ3sV_ DeC4Ƴx~ELSj{Ȅ&fdUFͼe?++yyG0 koݾ hoF+Q5Bt 奭%"gW:"ljpLei 6[EieAteGDgxAh1DMuyD751&UI.Z1$;\E9pqx7lDB  ut1IRu{$)@ $q )nǜiQ)WI%e++}R)]CKD~ fWv1"<]d\C|B `A=J{T\bM̤.wrdhyDA ,hz BieIǪ* *%/$zS̿[[Կy1S$@mX}h' dA9LՍp !`nw6i]^3YA2m] -HAэ`!_ I[))q-Js^r %1-+KAr%j&jgDۆ8^#$;3[Q+9!!.}8j 2ߪ5uJDw=o>s9QT=haw#i'SX -[ZKXz괄wZV։֘q]%4ZZ z/^/R1fCEtkyRMeWYcϼ_Ua-OÀ 䢄6]y/,.;Ȓ BUQ{BXWL9u -nqP.X# -nZוh.bVȓRub3f7?Ϸ181G۩h+2;9 P{Ooe!1Ԛ? aufjsW=o d --vI;EmGI qkQY(~&9~z,u?y 0l endstream endobj 64 0 obj <> endobj 65 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 1 1 1 scn -/GS0 gs -q 1 0 0 1 35.5254 34.3291 cm -0 0 m --0.003 -1.098 l --0.004 -1.535 -0.361 -1.918 -0.796 -1.957 c --12.531 -2.984 l --12.925 -3.02 -13.249 -2.762 -13.309 -2.393 c --13.252 -2.713 -12.971 -2.934 -12.628 -2.902 c --0.805 -1.869 l --0.416 -1.833 -0.093 -1.489 -0.092 -1.098 c --0.09 0 l --0.09 0.088 l -h -f -Q - endstream endobj 66 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 1 1 1 scn -/GS0 gs -q 1 0 0 1 22.1172 32.0664 cm -0 0 m -0.002 1.088 l -0.091 1.096 l -0.088 0 l -0.088 -0.438 0.439 -0.761 0.877 -0.722 c -12.612 0.306 l -13.047 0.345 13.404 0.728 13.405 1.165 c -13.408 2.263 l -13.498 2.271 l -13.494 1.165 l -13.492 0.681 13.101 0.26 12.619 0.218 c -0.885 -0.811 l -0.397 -0.854 -0.001 -0.49 0 0 c -f -Q - endstream endobj 88 0 obj <> endobj 87 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 89 0 obj [/ICCBased 76 0 R] endobj 91 0 obj <> endobj 92 0 obj <> endobj 90 0 obj <> endobj 93 0 obj <> endobj 55 0 obj <> endobj 86 0 obj [/ICCBased 76 0 R] endobj 61 0 obj <>stream -H\UKn[1 SDmݢ~N4@ܾCI @F_rfH?|;ŇS>bx 9s<0~Ŀ=k̩+3zW~ /bE. -(-u! Aglद&)0|_6TJGI - -Q,ri sk*V7:Zu4Y 9mOZCP> endobj 94 0 obj [/ICCBased 76 0 R] endobj 49 0 obj <>stream -HWˮ\Wl6_[IVA`xMTU)!>cN?1]\rZ9]]}לn_S>Z[o07 %2(4v1lz4/ѭғu<]QktŖS܉wԎ -aZڱ<ٵ<õ(%ӄ~wޏƭ+tqn~xV_46Zc5,3Վ])؎*ڹy F}ktW5n}-G6VySM~;pHRƹccp΀r:s\938ۅĀ.FA{-vmV`Z, 2ӗv8u QpؐN]a T!m(  \G0 s'uqLqa:2fpGC-nKV(Ba"Auk*l$fp6 ]%£WT-}SN_?Rs"zEM+ҘR p9qhp47"_yxY%:*RE'BrW3 \Y[26tI-nbqG|Sxɏ% W%&iw7 4F4~Uԕnz9?$,K#s \뫕G2XPzfћ8'{`K!Y\ @GGjT\sE$VZ=~i݅QڽcP;Pr0W0Xq&YvV]eMP(Wc;05-"̓s"2~y%07 9:8an.bA%͏f)L}c@mY^Y?QW]jD]F^CI{^,'þ eIY¤Dk:a;g-%g5whɱ-Izg0?{fsb7=ӄWWJ֙d<)%aBдLw&QV\5U*| ,͌&7ITN0KR/zٹ4\aFEU[N9Oe,[EUj'.V(4*MU{ -_r?/u";y-)گQ͂D>9#+̮'9 : P^Y=m*OCG`m uUpGK%7B 40^5(e2픀-覵dڂKGr|D1W! л3(~$FLB_#oHhR dX=nfo=†xYޑ F)8n Hwߔ<кʝX `Ͳ7>C%5,Epb:$bqL|r6Ӡd#lsKȭCqLiMgqh9R3ӨLlS#8ϸ8K'c>s#T8+ڈ  |F ; -ݝQLv Uu N2aXG,R|E[ԏp#ͱ^{DSI. ^놩MW9-/ ,ܠ`1| AϨ-sժSxc!cb| |m$ -D)f;DNm9/4•U({j7 y - -*fw&h[ m!> -̸+ՠ@gb -g昉 l fVj%=VrMwZH&tNЫ̹8s -L;:ho?b;E"Q$CD|d>j"]T}WA7 Q۹9Ueܯ1yU[xΒ;B% U,Ҳn~ԫ -ȦNHYaMjdPDmwȰer:T{/rEzt`%U~br`޾קbZ'T۷es&GVNPqJ +#4ۆ;Yd- -U,"FE3k0>ll1w|o`jx92έZ:P< մуZ#qާ T~<֛DtD~Rf,(ic} h \j+^g])މ5\v N?jlltVAV$OL/@ jg檵(ůťfHX6LVӾm*gW֍pum&Ⱥw@:hxf-i6^Eu -P[ӋuwdcTƝ AshM2 -b!<*YaA; W߅ ֆ_j_Q5 L?էA#ʒߪSYKC*ti +tIK՛ Vl3͖ARv`GqIXoaa9 -zHjJ>yIAoM ^Ԛ/w{6馯smˊ)դjfx:Qqcd -<*j LʁXKҪ* -# 1W6̝' I|VxŨ> ޸T/t92cc$vmɁv{:= >)M* TyW7֫lڗd.I^6 mEr]i`3rQ=VkY NZF=Ыɖ[So̠};ӳ -S/`dE)| .8|K `C^̙IQns6ď=uXR9 Bz؞65w$?uxF>Ӄ$m_'҉!1QFrgl!\a -' -M#L< -1ˤl5\vE5j"p@L>7Hq -Q2Ra5 -q* D#yB 3-sd!nEUd(yj*짰 ($23QWkv NPŨ$ht4vz+ݞiqr4ZL! -~hJXrdH5h)l8|mB$ Cdv>n~[ уA_F23yl^qrnkPy`+;R 7dɧ?fIYz@ib=@s'CҦT:_xJa#qd3 iә_ٝ/=Ӡ6Ww`mv 9>q`ҏ0Ym'*Pf%J# 4{zI‫!qYtϲ*=Uyi/xSUFed3W}%!ͧ9bO=c_c>(HԤ(knN0e5OUk 8cV4aBfߦq^(Sպ0M]X0x"NԄ+IXvʠJ t!7[-9o[v1>bҽ%~dS˫}bVe7>YwuYޛ$M&ttx_MBI2]ImI=yJf6/mٜ}n]\OIee+i&Y M -!ҊL2՘qI8 -\*,WSD dgV q$xZC "=E~Mf -Lޫ{ͪn$K䯷7=Kَs 7/Q1Y~yTP 9 -W.՝ @"A Z]*Ow )gĢDpde釖f =̱pq A@Kҥ>#}0۸bo AB_fGרt_{rva sjQ?g kMl?^|z.9cJRf;([_ 1x#5\>X !_wԗ͎0r|!v/n3{ HQ$֑/m`\Jq/ <$ G5;s+J?GESxޫ:bz0A=}|E D<%rR( !JAt5sc)((g}$CLP`vi EFV{Ӂ¾Ԁ׆lTğÛXߩ5y=yro3|)ĵ~(%b܄g OnF'~;}H>/CY˴+O$zz~y: -Bʦ_$Lԭvۀd];<n}ryEçIG웸Ʒ d"塀gW)t]g+{{'!I?zv.&uCzQ|~ B8q,$,ODdVuήf;[>WՅ8*eD Dd8>B=HF-pƪZ>Ml裙6}H6M" ;06ț3Rw$gEӠ45i_'P I_+vX^ HbgЈ ~ fCK1<- dX"v mM\X -+N -"<-9'|X MbmBPGK?`H:nAt~)b*L/ ze=@ƃJ.FDQB.r.GdVL(`F5@# hc`U_ l=įɢyPQuAM~o`[ " =sC9joemHq!QDGznu-ޛfVkg՚[͌Vъ׮aTME -XbCfخƌS#_W/(li_FigsYb,ޏ3X\a6b ܅|#̒xa6^YìޅY=Y3K<njXXZbdi"~o$%bvJOTӎ❷j_P/J-ҲXgOKrRSOt `vV/yui'';';/Ϋ;ًY9Z;7wUŠ N92agT\}Gz\ {~<׏q=ّ'iukKڡ厰=<{$ʲYǼwo5エRgV^d߿^~"Z.9\r;=ׂyRE_~ ӧ?~±1>d1Jɂt]zX3-sDAނ3)g+`i-܎t-m+B`TLiE [+M* - _Q^@4 ǖ/œ*:S𡥍IC9bF3EJ0I%[YO-f>UnUgh.q ھ!W8Hv5VP7! -FEwj*~8?:~613p;[ӏVF -1Op[@ S tp{)7@eԗ -`|ŢolBX. 7z.5Q](:d -qz=FU&2O3o]*6[vݼ}!w|`H1LNab:m@!І*^3fܘir<})327dvnp/ [MU9~_K+kE ٭ ,SeV8z&V'r/!\E~E4!dHSbRHʮ3AT\>d4񡕼8k &0 ?kE(%},MJ|]L>[49e:f2&w𺢔@% -^4j f/"o0 \hVf7F̩A* 8aT)Y>] endstream endobj 50 0 obj <> endobj 20 0 obj <>stream -8;YPg0lFl_%.r+N5R%;oqLcMuF'bL>knfL/IXpBC]=!le4Tt-cRRLDS+bBsDr(]i* -2PMN`LCEPVKOf_bnT[CuT.l=k$^#i=_1B40kmYKt;;A]Mrl1ZA#Qc'bip<8 -Jo2Pn"%p+dZJ?X:)MViJHa:stl3CrG"0;c^5DG*MW]*OS")u>7"-IQ@g#Ypte7ia$ -"JiGd$&%$R"Ip0;9KG+V5#fI2Ijed6aWmE_ -@RZpLa7t,LDm!c!&`aVlG\ endstream endobj 22 0 obj [/Indexed/DeviceRGB 255 23 0 R] endobj 23 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 58 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 1 1 1 scn -/GS0 gs -q 1 0 0 1 224.6885 34.6367 cm -0 0 m --0.005 -2.255 l --0.007 -3.154 -0.741 -3.94 -1.636 -4.021 c --25.752 -6.132 l --26.56 -6.204 -27.226 -5.674 -27.35 -4.915 c --27.232 -5.573 -26.655 -6.027 -25.95 -5.964 c --1.653 -3.841 l --0.854 -3.767 -0.19 -3.06 -0.188 -2.255 c --0.184 0 l --0.184 0.182 l -h -f -Q - endstream endobj 59 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 1 1 1 scn -/GS0 gs -q 1 0 0 1 197.1348 29.9883 cm -0 0 m -0.005 2.235 l -0.188 2.252 l -0.182 0 l -0.182 -0.9 0.904 -1.564 1.802 -1.483 c -25.918 0.628 l -26.813 0.707 27.547 1.494 27.548 2.394 c -27.554 4.648 l -27.738 4.665 l -27.73 2.394 l -27.728 1.398 26.922 0.533 25.932 0.446 c -1.818 -1.666 l -0.816 -1.756 -0.001 -1.009 0 0 c -f -Q - endstream endobj 97 0 obj <> endobj 96 0 obj <> endobj 95 0 obj [/ICCBased 76 0 R] endobj 5 0 obj <> endobj 34 0 obj [/View/Design] endobj 35 0 obj <>>> endobj 43 0 obj [42 0 R] endobj 98 0 obj <> endobj xref 0 99 0000000004 65535 f -0000000016 00000 n -0000000159 00000 n -0000042704 00000 n -0000000000 00000 f -0000187913 00000 n -0000000000 00000 f -0000042790 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000185588 00000 n -0000000000 00000 f -0000186119 00000 n -0000186167 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000187983 00000 n -0000188014 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000047209 00000 n -0000188099 00000 n -0000043290 00000 n -0000043646 00000 n -0000044092 00000 n -0000044450 00000 n -0000044853 00000 n -0000177996 00000 n -0000185526 00000 n -0000050192 00000 n -0000047509 00000 n -0000151068 00000 n -0000047396 00000 n -0000176902 00000 n -0000176153 00000 n -0000176296 00000 n -0000186680 00000 n -0000187210 00000 n -0000143526 00000 n -0000177060 00000 n -0000177899 00000 n -0000171863 00000 n -0000174892 00000 n -0000174954 00000 n -0000175486 00000 n -0000169840 00000 n -0000171766 00000 n -0000143284 00000 n -0000143464 00000 n -0000045207 00000 n -0000047147 00000 n -0000143249 00000 n -0000047280 00000 n -0000047311 00000 n -0000047544 00000 n -0000050266 00000 n -0000050462 00000 n -0000051586 00000 n -0000055752 00000 n -0000121340 00000 n -0000169805 00000 n -0000151111 00000 n -0000169748 00000 n -0000171828 00000 n -0000177025 00000 n -0000176091 00000 n -0000176029 00000 n -0000176439 00000 n -0000176688 00000 n -0000176474 00000 n -0000176569 00000 n -0000176783 00000 n -0000177961 00000 n -0000187878 00000 n -0000187816 00000 n -0000187754 00000 n -0000188124 00000 n -trailer <]>> startxref 188293 %%EOF \ No newline at end of file diff --git a/docs/theme/mkdocs/images/website-footer_clean.svg b/docs/theme/mkdocs/images/website-footer_clean.svg deleted file mode 100644 index affc804c6d..0000000000 --- a/docs/theme/mkdocs/images/website-footer_clean.svg +++ /dev/null @@ -1,197 +0,0 @@ - - - - -Layer 1 - - - - - - - - - - - - - - - diff --git a/docs/theme/mkdocs/img/favicon.png b/docs/theme/mkdocs/img/favicon.png deleted file mode 100644 index ee01a5ee8a..0000000000 Binary files a/docs/theme/mkdocs/img/favicon.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/angellist-white.svg b/docs/theme/mkdocs/img/footer/angellist-white.svg deleted file mode 100644 index 5c52f3a832..0000000000 --- a/docs/theme/mkdocs/img/footer/angellist-white.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - diff --git a/docs/theme/mkdocs/img/footer/arrowhead-submit-email-icon.svg b/docs/theme/mkdocs/img/footer/arrowhead-submit-email-icon.svg deleted file mode 100644 index 0fc1e6c978..0000000000 --- a/docs/theme/mkdocs/img/footer/arrowhead-submit-email-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/footer/docker-blog-24.png b/docs/theme/mkdocs/img/footer/docker-blog-24.png deleted file mode 100644 index d04768feb5..0000000000 Binary files a/docs/theme/mkdocs/img/footer/docker-blog-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/docker-blog-48.png b/docs/theme/mkdocs/img/footer/docker-blog-48.png deleted file mode 100644 index efffca0ad6..0000000000 Binary files a/docs/theme/mkdocs/img/footer/docker-blog-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/facebook-24.png b/docs/theme/mkdocs/img/footer/facebook-24.png deleted file mode 100755 index f34d73c7dd..0000000000 Binary files a/docs/theme/mkdocs/img/footer/facebook-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/facebook-48.png b/docs/theme/mkdocs/img/footer/facebook-48.png deleted file mode 100755 index bb213a10dd..0000000000 Binary files a/docs/theme/mkdocs/img/footer/facebook-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/googleplus-24.png b/docs/theme/mkdocs/img/footer/googleplus-24.png deleted file mode 100755 index 535d879acc..0000000000 Binary files a/docs/theme/mkdocs/img/footer/googleplus-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/googleplus-48.png b/docs/theme/mkdocs/img/footer/googleplus-48.png deleted file mode 100755 index 002b3a9032..0000000000 Binary files a/docs/theme/mkdocs/img/footer/googleplus-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/slideshare-24.png b/docs/theme/mkdocs/img/footer/slideshare-24.png deleted file mode 100755 index 1734ddc7d4..0000000000 Binary files a/docs/theme/mkdocs/img/footer/slideshare-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/slideshare-48.png b/docs/theme/mkdocs/img/footer/slideshare-48.png deleted file mode 100755 index 3cdec03402..0000000000 Binary files a/docs/theme/mkdocs/img/footer/slideshare-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/sprites-small_360.png b/docs/theme/mkdocs/img/footer/sprites-small_360.png deleted file mode 100644 index 92af5c7092..0000000000 Binary files a/docs/theme/mkdocs/img/footer/sprites-small_360.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/twitter-24.png b/docs/theme/mkdocs/img/footer/twitter-24.png deleted file mode 100755 index 2acab394aa..0000000000 Binary files a/docs/theme/mkdocs/img/footer/twitter-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/twitter-48.png b/docs/theme/mkdocs/img/footer/twitter-48.png deleted file mode 100755 index 75509e9750..0000000000 Binary files a/docs/theme/mkdocs/img/footer/twitter-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/youtube-24.png b/docs/theme/mkdocs/img/footer/youtube-24.png deleted file mode 100755 index 3e100ed5aa..0000000000 Binary files a/docs/theme/mkdocs/img/footer/youtube-24.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/footer/youtube-48.png b/docs/theme/mkdocs/img/footer/youtube-48.png deleted file mode 100755 index 3837d3d2ab..0000000000 Binary files a/docs/theme/mkdocs/img/footer/youtube-48.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/form/check-mark-green.svg b/docs/theme/mkdocs/img/form/check-mark-green.svg deleted file mode 100644 index 4f4efc67bd..0000000000 --- a/docs/theme/mkdocs/img/form/check-mark-green.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/form/padlock-icon-active.svg b/docs/theme/mkdocs/img/form/padlock-icon-active.svg deleted file mode 100644 index 9518bc6059..0000000000 --- a/docs/theme/mkdocs/img/form/padlock-icon-active.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/form/padlock-icon-inactive.svg b/docs/theme/mkdocs/img/form/padlock-icon-inactive.svg deleted file mode 100644 index 174434a3f1..0000000000 --- a/docs/theme/mkdocs/img/form/padlock-icon-inactive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/icons/README.md b/docs/theme/mkdocs/img/icons/README.md deleted file mode 100644 index 6bd32ae6e5..0000000000 --- a/docs/theme/mkdocs/img/icons/README.md +++ /dev/null @@ -1,7 +0,0 @@ -### About the images - -Generally the icons are created in .svg, because it is a nicer format. Then we can easily convert them to .png as required. - -Using imagemagick; mogrify: - -mogrify -background none -format png *.svg diff --git a/docs/theme/mkdocs/img/icons/caret-down-create-new-icon.svg b/docs/theme/mkdocs/img/icons/caret-down-create-new-icon.svg deleted file mode 100644 index a07012c629..0000000000 --- a/docs/theme/mkdocs/img/icons/caret-down-create-new-icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/icons/cloud-download-dashboard-icon.svg b/docs/theme/mkdocs/img/icons/cloud-download-dashboard-icon.svg deleted file mode 100644 index 031da70972..0000000000 --- a/docs/theme/mkdocs/img/icons/cloud-download-dashboard-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/icons/comment-simple.png b/docs/theme/mkdocs/img/icons/comment-simple.png deleted file mode 100644 index 034b6ec465..0000000000 Binary files a/docs/theme/mkdocs/img/icons/comment-simple.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/comment-simple.svg b/docs/theme/mkdocs/img/icons/comment-simple.svg deleted file mode 100644 index d7c4206f79..0000000000 --- a/docs/theme/mkdocs/img/icons/comment-simple.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -]> - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.png deleted file mode 100644 index 57dbeb94f5..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.svg deleted file mode 100644 index 3598f1a67a..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-checked-repository.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - -]> - - - - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.png deleted file mode 100644 index cb6cc59865..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.svg deleted file mode 100644 index dc2017d9ef..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-empty-repository.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -]> - - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.png deleted file mode 100644 index cf804ae47d..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.svg deleted file mode 100644 index fad0392967..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-linked-repository.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - -]> - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.png deleted file mode 100644 index 801f530699..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.svg deleted file mode 100644 index b4a8898107..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-normal-repository.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - -]> - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-official-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-official-repository.png deleted file mode 100644 index e60afdb858..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-official-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-official-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-official-repository.svg deleted file mode 100644 index 8eadb6fe10..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-official-repository.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - -]> - - - - - - - - - - - - - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/framed-icon-private-repository.png b/docs/theme/mkdocs/img/icons/framed-icon-private-repository.png deleted file mode 100644 index 7b12785557..0000000000 Binary files a/docs/theme/mkdocs/img/icons/framed-icon-private-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/framed-icon-private-repository.svg b/docs/theme/mkdocs/img/icons/framed-icon-private-repository.svg deleted file mode 100644 index e13fbbdcff..0000000000 --- a/docs/theme/mkdocs/img/icons/framed-icon-private-repository.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - -]> - - - - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-device.png b/docs/theme/mkdocs/img/icons/icon-device.png deleted file mode 100644 index c45e0fef35..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-device.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-edit.png b/docs/theme/mkdocs/img/icons/icon-edit.png deleted file mode 100644 index f729982370..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-edit.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-file.png b/docs/theme/mkdocs/img/icons/icon-file.png deleted file mode 100644 index 80daf93297..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-file.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-folder.png b/docs/theme/mkdocs/img/icons/icon-folder.png deleted file mode 100644 index 27702b86c1..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-folder.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-link.png b/docs/theme/mkdocs/img/icons/icon-link.png deleted file mode 100644 index 60fcb2bc95..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-link.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-minus.png b/docs/theme/mkdocs/img/icons/icon-minus.png deleted file mode 100644 index 29b52ef468..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-minus.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.png b/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.png deleted file mode 100644 index 87c47a8b48..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.svg b/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.svg deleted file mode 100644 index 8084448f53..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-normal-repository-frameless.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - -]> - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-normal-repository.png b/docs/theme/mkdocs/img/icons/icon-normal-repository.png deleted file mode 100644 index 59342a674d..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-normal-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-normal-repository.svg b/docs/theme/mkdocs/img/icons/icon-normal-repository.svg deleted file mode 100644 index 53f17d9ac1..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-normal-repository.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - -]> - - - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-plus.png b/docs/theme/mkdocs/img/icons/icon-plus.png deleted file mode 100644 index 27c49e9f01..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-plus.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.png b/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.png deleted file mode 100644 index 999422bde2..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.svg b/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.svg deleted file mode 100644 index 3f1d30ba97..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-private-repository-frameless.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - -]> - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-private-repository.png b/docs/theme/mkdocs/img/icons/icon-private-repository.png deleted file mode 100644 index 2eb26616d9..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-private-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-private-repository.svg b/docs/theme/mkdocs/img/icons/icon-private-repository.svg deleted file mode 100644 index de0d91e617..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-private-repository.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - -]> - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.png b/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.png deleted file mode 100644 index 83d927caff..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.svg b/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.svg deleted file mode 100644 index 9ef96f7216..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-trusted-repository-frameless.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - -]> - - - - - - diff --git a/docs/theme/mkdocs/img/icons/icon-trusted-repository.png b/docs/theme/mkdocs/img/icons/icon-trusted-repository.png deleted file mode 100644 index 54d83608e1..0000000000 Binary files a/docs/theme/mkdocs/img/icons/icon-trusted-repository.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/icon-trusted-repository.svg b/docs/theme/mkdocs/img/icons/icon-trusted-repository.svg deleted file mode 100644 index 8469763a79..0000000000 --- a/docs/theme/mkdocs/img/icons/icon-trusted-repository.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - -]> - - - - - - diff --git a/docs/theme/mkdocs/img/icons/official-repository-icon.png b/docs/theme/mkdocs/img/icons/official-repository-icon.png deleted file mode 100644 index ccafcee156..0000000000 Binary files a/docs/theme/mkdocs/img/icons/official-repository-icon.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/repository-icons.ai b/docs/theme/mkdocs/img/icons/repository-icons.ai deleted file mode 100644 index 06cfeb4199..0000000000 --- a/docs/theme/mkdocs/img/icons/repository-icons.ai +++ /dev/null @@ -1,4237 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - repository-icons - - - - - Adobe Illustrator CS5.1 - 2013-11-20T15:39:09-08:00 - 2013-11-20T15:39:09-08:00 - 2013-11-20T15:39:09-08:00 - - - - 212 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADUAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYqxhPKmrjWNVv f0xMkF/C8VtECxMDFaI+5HLiXYgbUwUm0bqWhald6Db6dDq89rdwiMSajGP3khRaMSOQ+2d/tY0r dhompwQ6Sk+qy3D2BkN27A1ufUVlAejAUQtUVB6DGlTnCh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K 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 - - - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:00801174072068118C14977817F3299D - uuid:426443b9-ecdd-0243-a283-43cdc4abb981 - - xmp.iid:FD7F1174072068118C14977817F3299D - xmp.did:FD7F1174072068118C14977817F3299D - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:FD7F1174072068118C14977817F3299D - 2013-11-13T17:19:13-08:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:00801174072068118C14977817F3299D - 2013-11-20T15:38:58-08:00 - Adobe Illustrator CS5.1 - / - - - - - - Web - Document - - - 1 - False - False - - 80.000000 - 80.000000 - Pixels - - - - - MyriadPro-Regular - Myriad Pro - Regular - Open Type - Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 - False - MyriadPro-Regular.otf - - - BebasNeue - Bebas Neue - Regular - Open Type - Version 1.300 - False - BebasNeue.otf - - - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - CMYK - PROCESS - 0.000000 - 0.000000 - 0.000000 - 0.000000 - - - Black - CMYK - PROCESS - 75.020981 - 67.968254 - 67.022202 - 90.164032 - - - RGB Red - CMYK - PROCESS - 0.000000 - 99.398788 - 100.000000 - 0.000000 - - - RGB Yellow - CMYK - PROCESS - 6.198215 - 0.000000 - 96.514839 - 0.000000 - - - RGB Green - CMYK - PROCESS - 62.764931 - 0.000000 - 100.000000 - 0.000000 - - - RGB Cyan - CMYK - PROCESS - 51.793694 - 0.000000 - 12.539864 - 0.000000 - - - RGB Blue - CMYK - PROCESS - 88.366524 - 76.916145 - 0.000000 - 0.000000 - - - RGB Magenta - CMYK - PROCESS - 26.990158 - 81.640335 - 0.000000 - 0.000000 - - - R=193 G=39 B=45 - CMYK - PROCESS - 16.961926 - 97.897301 - 92.724495 - 6.744486 - - - R=237 G=28 B=36 - CMYK - PROCESS - 0.445563 - 99.142441 - 97.323570 - 0.094604 - - - R=241 G=90 B=36 - CMYK - PROCESS - 0.000000 - 79.803154 - 96.874947 - 0.012207 - - - R=247 G=147 B=30 - CMYK - PROCESS - 0.036621 - 50.066376 - 98.565651 - 0.000000 - - - R=251 G=176 B=59 - CMYK - PROCESS - 0.021362 - 34.848553 - 87.130539 - 0.000000 - - - R=252 G=238 B=33 - CMYK - PROCESS - 4.513621 - 0.000000 - 93.188370 - 0.000000 - - - R=217 G=224 B=33 - CMYK - PROCESS - 18.896770 - 0.039673 - 98.233002 - 0.000000 - - - R=140 G=198 B=63 - CMYK - PROCESS - 50.109100 - 0.137329 - 99.038681 - 0.000000 - - - R=57 G=181 B=74 - CMYK - PROCESS - 74.615089 - 0.000000 - 99.703972 - 0.009155 - - - R=0 G=146 B=69 - CMYK - PROCESS - 86.385902 - 17.578394 - 100.000000 - 3.823912 - - - R=0 G=104 B=55 - CMYK - PROCESS - 90.218964 - 33.475243 - 98.764015 - 26.065456 - - - R=34 G=181 B=115 - CMYK - PROCESS - 76.195923 - 0.000000 - 74.978249 - 0.000000 - - - R=0 G=169 B=157 - CMYK - PROCESS - 78.442047 - 9.085220 - 45.755703 - 0.027466 - - - R=41 G=171 B=226 - CMYK - PROCESS - 69.719994 - 14.847029 - 0.000000 - 0.000000 - - - R=0 G=113 B=188 - CMYK - PROCESS - 87.536430 - 52.645145 - 0.000000 - 0.000000 - - - R=46 G=49 B=146 - CMYK - PROCESS - 99.130234 - 96.548409 - 3.494316 - 0.500494 - - - R=27 G=20 B=100 - CMYK - PROCESS - 100.000000 - 100.000000 - 26.251619 - 24.524302 - - - R=102 G=45 B=145 - CMYK - PROCESS - 74.520477 - 98.516823 - 0.939953 - 0.228888 - - - R=147 G=39 B=143 - CMYK - PROCESS - 49.558247 - 99.191269 - 1.370263 - 0.109863 - - - R=158 G=0 B=93 - CMYK - PROCESS - 34.891277 - 100.000000 - 37.204544 - 10.815597 - - - R=212 G=20 B=90 - CMYK - PROCESS - 11.844051 - 100.000000 - 49.250019 - 0.872815 - - - R=237 G=30 B=121 - CMYK - PROCESS - 0.000000 - 97.000076 - 20.495914 - 0.000000 - - - R=199 G=178 B=153 - CMYK - PROCESS - 22.854959 - 27.426565 - 39.942013 - 0.000000 - - - R=153 G=134 B=117 - CMYK - PROCESS - 39.844357 - 42.853439 - 52.529179 - 6.808573 - - - R=115 G=99 B=87 - CMYK - PROCESS - 50.399025 - 53.136490 - 60.897224 - 23.593498 - - - R=83 G=71 B=65 - CMYK - PROCESS - 57.598228 - 60.415043 - 63.738461 - 41.934841 - - - R=198 G=156 B=109 - CMYK - PROCESS - 22.671854 - 38.394749 - 63.668262 - 1.181048 - - - R=166 G=124 B=82 - CMYK - PROCESS - 31.595325 - 49.182880 - 73.931488 - 9.890896 - - - R=140 G=98 B=57 - CMYK - PROCESS - 36.234070 - 57.402908 - 84.057373 - 22.613871 - - - R=117 G=76 B=36 - CMYK - PROCESS - 39.169907 - 64.104675 - 93.441673 - 35.580986 - - - R=96 G=56 B=19 - CMYK - PROCESS - 41.538109 - 69.994659 - 97.024490 - 49.155415 - - - R=66 G=33 B=11 - CMYK - PROCESS - 47.794308 - 73.476768 - 83.712517 - 68.157471 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - CMYK - PROCESS - 75.020981 - 67.968254 - 67.022202 - 90.164032 - - - R=26 G=26 B=26 - CMYK - PROCESS - 72.576485 - 66.601051 - 65.191116 - 78.161285 - - - R=51 G=51 B=51 - CMYK - PROCESS - 69.481949 - 63.179977 - 62.151520 - 58.361179 - - - R=77 G=77 B=77 - CMYK - PROCESS - 65.377274 - 57.988857 - 56.878002 - 36.661327 - - - R=102 G=102 B=102 - CMYK - PROCESS - 59.728386 - 51.235218 - 50.771339 - 20.132755 - - - R=128 G=128 B=128 - CMYK - PROCESS - 51.647209 - 43.149460 - 43.149460 - 7.547111 - - - R=153 G=153 B=153 - CMYK - PROCESS - 42.636757 - 34.787518 - 35.315479 - 0.985736 - - - R=179 G=179 B=179 - CMYK - PROCESS - 30.679787 - 24.246586 - 24.765390 - 0.000000 - - - R=204 G=204 B=204 - CMYK - PROCESS - 19.366753 - 15.005720 - 15.533686 - 0.000000 - - - R=230 G=230 B=230 - CMYK - PROCESS - 8.459604 - 6.131077 - 6.576639 - 0.000000 - - - R=242 G=242 B=242 - CMYK - PROCESS - 3.704888 - 2.508581 - 2.508581 - 0.000000 - - - - - - Web Color Group - 1 - - - - R=63 G=169 B=245 - CMYK - PROCESS - 63.179977 - 21.942472 - 0.000000 - 0.000000 - - - R=122 G=201 B=67 - CMYK - PROCESS - 55.407028 - 0.000000 - 96.551460 - 0.000000 - - - R=255 G=147 B=30 - CMYK - PROCESS - 0.000000 - 50.835430 - 96.163879 - 0.000000 - - - R=255 G=29 B=37 - CMYK - PROCESS - 0.000000 - 96.505684 - 90.057220 - 0.000000 - - - R=255 G=123 B=172 - CMYK - PROCESS - 0.000000 - 66.173798 - 3.277636 - 0.000000 - - - R=189 G=204 B=212 - CMYK - PROCESS - 25.375748 - 12.716866 - 11.676205 - 0.000000 - - - - - - Color Group 1 - 1 - - - - greybrown - CMYK - PROCESS - 50.390625 - 44.531250 - 49.609375 - 10.546875 - - - greybrown-brown - CMYK - PROCESS - 56.250000 - 53.906250 - 63.281250 - 31.640625 - - - - - - - - - Adobe PDF library 9.90 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 38 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 39 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 40 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 41 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 42 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 43 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 79.9995 80.0]/Type/Page>> endobj 44 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 45 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 57 0 obj <>stream -HWnG WL$q& $:Xb+I .Sy{*wݜnK:ݦ)寮Vi)ݞ~$ ?LM{f4k/-Bf Ekfk-[I#wt~HJ$aHs|erV1dzy|;UKGǫvU/~ïV+pۓӍs ڋ'Ub<,#p'}E_wS? ϳ&}ۭ9<}Yf=lfE6@("Ʈ%Yc\[%w ]运QLd}U-fݟ. #AaFsj|p4@rFutj54Z+Ka%+,I*oHd_q!~f4E'g4kDTfqB' e ˠ0H0nk: -b -RI|E -RxNPY"0|B/FMÕXУΛ5*TE0Mv֞;`M|kEFg^bEꅸ5RWFXQ)A+V%tϋ~ ]տ/ֿ e-^͢ǡqhtpWrA(ڊ9%47G4 #9!  954k=83*1flp2Gtk1cĒaj Nhb 4R[Z_]B2Ϲ̎Xˆ"aeZmp$:JCm135C-YHxYX'Ό_tܪ~́@EUxzOYE9pR[td0Ń=U]Gbb@@ry -~n uK*%;$b0n4LA -y}`W| endstream endobj 5 0 obj <> endobj 58 0 obj [/View/Design] endobj 59 0 obj <>>> endobj 49 0 obj <> endobj 48 0 obj [/ICCBased 60 0 R] endobj 60 0 obj <>stream -HuTKtKKJI,t(݋4K%ҹH4J#Ғ(H -wqyy~3̙g<3Y9El -@ ]!O-@\+BVKK :OX~WCaiHKL0qY `5ck -X]x= 8 XĿ׽>.f#aPn D^{y8  dp H st:Y׬cxc IV?S!:_9[YbQP~+rA -ShHht^ '0߅™kYXY9Yqqpl'WzEE$%D>,^|t*K)%/`\ҫ:&D [7dplDa5|mb4,yy{e5 3⚅,t+whlA   m k -xYUH&%Ȥ -qO'Mz3KT@v[NUnn^\o]abTrtlmE]e~U+jאZ:zaqi5};CS[\_ۆwCaQ1;>L$Lz}4:%8M7l̎Χ/}XT^]X>\Ym[n!ycskkƶʷ;v{pIs0Xݯ3s󝋒&$WWW*)!$$%!e$cHNOAKIMEq ƕ;KLw@YX;ؚ8^+DspfKOTCPpJ%D=++O%$*8IZ\Z^UK_wL"dx]}>9=;s_G8/̹N!Gz[<=2|B}PQzlH0Wc(Een|Pds::5&89yFT"od䳔i/ZK^&gd:fgQl kJХeJ*+篍kj5U[ZUh0|em6]B@`PpH?QM1Msψ*iϛ.Z [JYZ)X-]R޸Ѻپw?@?5 ǖ'vNg -W3gLC#u!MMMEvAms˔FVNA̝GLwA̬,llؿsݛnͽ+!B²" 'R&k?3?4+:6oT\ұڿ6VʝoF?LT;:>::>:;eqvx^sawݥʕ'_EFO\DKLtAnFF)F|ԭ6\`@z?m+F;LwiAhy͖)Mgw~_ @ZH_XA,"F)%/*9aZ:Q,\B^_AU񡒀2 -*'[j o5[uR1uh`fm$1xJgBdrltlyyEe$feg-g#`dGbwj0TOC9; ܨݿxz6zx8IP=A!.aAxۑϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M -\lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} -0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ -~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;',#h%T,Qۥ{[s:9󅼓&^!Փa@!" y -.Jl6mHju,bU6+s hܸd-ʥ}wi-sun=0Ľi-_*)U_ˈb$na+;ϧT;ppA7C4.*Iߥa8Mm.ACi7\j|fiԫ)]ޭjʄU]3(í whJch-4x7h׿*P0H됎L랇ڡuÂ,{Bz}8vggҲd[!XTZZ.vlAg -{;Sm`vؿ`~?ga. -3Ì{L^WYe4]L7ok!wI~Ira^=C#Zh`Wu}p)"z7ff&3$FJ8Ҷ5m -uR_,^VS&aR~PfLL_Dw*`\-9]q  TI6)>u6 D`e͢/xqY%9ʜ;åOd\˾P&eRz;].R<oΡ]P{?: r̨\ʻb Ҥ3|m s؟W9oZt]RnÅ\cW#+nI&gyAjsN06HiD'@J+a5V~cRI̫vwtUc[3+?F|l(iU^+O?Rs1Hqil$Wþh=(RE -1BvџnF/ BsGMY9>ܖ3ȗqI ڣ5V_1ȣβiJiX0WVH[8g_/ -n3 ` 38A.|f|ј0I6bv%& ;Y㿜҄#dD.).p'3J12K[Duɥ$s8IƊ.z^48e!R6}vcMiozo0'=~i,3:?-?oS,9w#ROa; ?pB -֞IO ݟe#}ԯN$\l?], y,>&Рq]yh0AqK)ĝBFҍcH:-h-ǟcf)K9T127]qEjL<>h;|U -dpG -ƫ`&!8al`83>.qɂnA9 -; `HByg KB*k㰗2fF=#OM eT? -mTm_OBۊV<ɆF('n3uG~Ȯ#7Њ9[١`Ns.P..콤 'KnpF\? B>-`NWOOWBlfxW^b-_x&*/(j_=߆󑊢zF`LdE:SNʔ@S 03|TOKokto}bFz$4-,.m'j*J|)J6BP ^3ewܫpX.*,07xPڳ:2XOT21|"7=0ߴy}ĸB)H[Fs V+̯+Y(I(x&9JAI'tXmyG=X[8TK)2<TSRvxlȓGO|g/{>4/gRFȶ&A52 uЯ*B幃AuFǞѧuD)B,*?n` 'qQIzK֗4{B_g68#ʉ2.A$69!̒ub1&D3Qx" >ɏnνxVG&TۨÓ)sxd-5KxߣD&1±jdGjJ|J{Z ޲f6/vTp̄ub PmBU#gBg˷)-*E -ar>>Ƶrn[ɭF-IByѸP=ĶKUC wG D}"vN.p]]Q8uY{#qCv}sax_oyiNr( d8aw2CQ}V8UWO\g \yk@dcZt9$u -p-1z(=f) -vě92 w u煼ת#{P6+Dq3HIi%BCb!kc5&U ):X$܎[b2*@PkcӘdoTB_L1Uwi")=2#pI9,RO>T@>;bnDPuCfk^^\G~ oLRcHqܮ=-8^5Ońy*9:-\g8:T<?*C;[yX+I;lRL߭$DvYTQ6DyVmfy%/sIsmXP1Lռȭvow)QBb_LVwupeėO*|+](uHװ4WU.{ 4\m.QwR~MAiRz+%BKz?'{ k҉aa{H]sX}da~3_auQz VM\ĵv5I0LM)DŽp1:5,&4 %!$}ocޤA]R^xT◬M&/B:DwA24?cd&g]5b4a?iǐ Ĉ.OA 6vfvsd(5yTH/P=(a;zUs bWxDa)Eʼ $sgPJreY3w`cFo0|U[j5k.5J&eTor È´}I lpjC8c5J=g%Uo|L58E" -ِ[Ak]J͆VBM"{NrQihЦ@Y?6^߫ZWٯ]ذc؋hKSLj:>O ɲ.ݰQ{5mm<ٷ?^v"}ъw9O&vX7km[ ,70nΒ7|eP\I;-wgFN cIP#qWI ;NٶA)H~7i thl~~dzY Cx2>*c&mb{9f1X*L #> - V@g蒼]7n249=MK% ;,F\j 1klZi؊ΐ.|Q9а$_.!;̿lE,ɥDi}D3^a`Y5g{J=mɳy3CM'jM-iЦm n5? SJE+U~ ;q.tXd~~p*QeS%.Ћ"ưBsZ6-6[\d;^z4`;64藸ͱw;|+&AfLU3XTm)lF'l VɺgcGObbɜ9;v \CL, >B?KGCe"z -@EHILp<5'҉$>8#gL2m c1 c Fw)P+rkC qp/u8#!*g°Pa`vu@oH`"Ž:z_Q<,D>'ӅWP .`xW3|!6 -5 El[",0 e[Oz0~lUO+&xkPc|u$k.?{Qp""kr6isVa=~@W_ -.<7 -2#h?c~m'rE_xs6aG+K 14L^kUp^^_mS^dШ'>}5$:τ!E[bJx&n t(m;ZsF5uqX.ՂBqKP *l%{ٓ{'f';,TT,bhUq2Z3;}T9vwRR;GD - K*/@hUv$j!@ vyבm,W|-͢ ^ ~D_􆭍"ĉ#c禘*X/Ϝe>|XH;:)d9gƖ4aBQ4Ew,C -ۯBU#>SV$L-5gV ϯ*B#} npþtdU$Db&$^\^&Z"/˺+-}%Z:}9AYu rTlP0"~! ͚*@5K?߫Z-P=j>܈[O?)a5 -?WUsy5^(ge${Cm> "Gգ+$踿ϫ& Xw8?g,'ō="/xNM)'EFqrf CįQ9ZY$r!6m)4 V9kJ$# FьX٥Cp[ģ)CS;rFP#ImKGɺzj>>X9,ZL-jIbkȉ8˚?vtxPIO}_ay@:|Ve6ubd/e3<֭ztea'cLaM -lz&,f^_!?l2x2Xyń3D)\?ye ~4O+9$  -EVDTSؓ7X?MM!ԼuOtP Cbt;iްa@gW#@4c9.Do z2>M5i~u0 qswQ9ǸLt삟Mz)>kɝI;io"U)]$YL >$$T:gUo$UK,C`sCMAJMÄKC(g]ٮ9sUG0?L5QM%0Ol5&`Ƒ1,x'{k+mY}-Js#\d:i/NK\8HstQ#-ND).s*Zymnf\1l{(E=VGW9s:?wǟQZsC6A1ƃ6K@8OUY^`7j6@9?,yt4&}"T- -\Y&kVx녣391ٵqQ=beMq\`/nņ|2͌JkzDmͫIR4\~5NlօKɁZ]TC3l̅D3jSS)tWw$IX[wV -WTUw^PeUhWE^ؓ~Wchs sIg`wgs (5mr] B`7JfAaA3ƓG?{O[ ?xj/Z*7exXz Ά})C?`KcMՌ&)Y5J]q':]$؞]Yv x(ıH1eU>_0b?*񸨎b¤،D;Wxm]|N7U13*;.=>SÜj)CM>.eI1/QvН6Tkk+Ɯn\\FFV#Xde&~WE7"bju^I@j@bQ Wk8w_D ^z xZKA _`T}] -x}ЁM0S,rV+ KO&ƈ`;E{irf0F] w86f fm_8c3V<)r1p +hs|p!QP'Ղʛ2rӤej4Y r, r?4! Uq]f(*&umM+;1 --c8CjL=L1TDJ7>)BH*cHY}~xI,{7WjWާʇhg_YovMKiN> QRǧ}AQj^G syJG"?txt,L>֍p_>Po$^<%}KDS4 -*S<ܖyd;éIJ~JMn>ȸcI6uɖژ䩊i77_5W2' 9t^}/8%wd0k)ͦF9kih3ShPBULzs'0$Y/L3ol|f ɪ\AW#siS-O^I+36xas @M -A hm45V-' ѵ1S+ ~*%~k˝ʉl * -lك=3_2~OgPs -Ccd[aے{<ХjA {! ߲ۓ;O'9+wEHE&JV?fiӺ j05瀶bhWZxo=ƺ 0zhK5mov (YOut;e=R*yMVn,$v:QڳE.yVl;svn,Wi.[@34SD_!MF>J柣ND @$Y~-CMu (+lBpБ^#$~2è /@̣6 3nh -;۪.3Fq3\َvZnZ"/vNFNJ2V{#ΚVse_쑮Ta8C¢!Η>FL\M{5eH~7;F AB?VY=۩Q i9J.sӿc%FVbdեiL`a)kD=W \ne>NX7Ƒ†2IYf-to7/~Uas[`W*v3_`~:kjR("E -* -e)DDIss,f_n6":hmh+]AqñQqSa9{~8|~bh6GZĠםN\h+(E30~kTMGβ1:zka'LG2>,gt X&@?e% -=@Ihs)HUOeX^m7R7~,, \jJԌfͬ8!*]JR:WR]Mɚ PZ;JN.8ɦ,[r*Α]MM"waX)Lbjd`>:?|:?u>^G$fa. -ʥ_S%ED8 J=ĕK{6r zGG Ui<Kg"^ q -I6vPWy^,uc/5@:ǹ+[N+li{P#^yv,ñ-NѳH⺣<֡gxV</nb6󴳜Ρ +nhB˾PoT(W##ĉTwZU} w-vT-9O᭺HIz) z9R'dI5aZGS˟agW=.P1ٜ y?2X)r4VaGXBe`9Q1͚@85$W?D}z2* -pt +;Br\ܕ'> -vCNeʔL-ʌqKHr 7I d<BgNelB^փRγF2AqCR&t7߄{" D9u)Cw1t}?"'[7o̩~1{>Ru* ʖdClutqf2[l~{S4>J$.nQnlP#x])By`r+wLH?VD:|iUG~ժ+&+Rb gP>}WԹkQǖ]WSkqwZ -DQdVd24KGMvU35KJ~4&jwJ*y;X߉˔O@5hw)񘴕o-9E:_̂o&6#V(ѽS-te$ פp}4%4mrnzhe4KX*KÃ29ʩ~'Ǥl|O5ÍB -;^j㛑Q`exH;J\*`l˴Khk -&tF|(8VǡܷR:ϳoG*UjSKknRgl ޅ-6&Nŗ7O4rGmO[du_TvY{ ̏Iy\aRKy&P7ݪJ)l"W5{K S_j0WSW;wixF1^lО伴^'1b%OAXhq)L7j}=9PX=n`ɗKX#CùA *7{ jWܴTByufכd=Af]F=_u*`q+_i݋\^`BaE|S&%Z a8+QgQ[IK-jIKr2Tcju=A ʧQ"7{ٮם*X|,Yzѽ}ƈf:jCo[>]x^hlhNrϳEDkcCǪ ת9c Ht<)}z!hE~DBӳ2S͆i{;ouIp??砃46ٺ^"1R<-65sjpCSjqi6dzھİ紈 41.$5EG9:=ob쾄 v#[xﯦAF+T(C@RQF772I$^a$Eq>.AEbiO0]ТK5ΫPÛG ZdJ*$d ^}E*֤>?Ƅ$dO _tl%$^7[KSECqz"$]*B]}W zT[Rk"n]EUYvFUW\B6-RB^Me2B4/wͺh4Ek5˖<1U[tD>Q!.kR涧7uJc>c -l/i^3;iڐ0sĀZnS -qW7Np:([568ViAFޜ~h9Pldüj2dO -+61--1Ewv =JCHW34܏&x8,&#Rc3Dvz6RSyu_N/nmكvT֥Y˼?RFװKzn9Q4gC^5l`P\ܲG&ޫ` 9PҞٲXr6 -V4,{a؄\tcY`]lǿԾar鴯؏=b!&Yb ^[\aYt$w -[R)i[{$7f"o Xp -zBz'hO|Ō4ǐ|-j -:}̴a%Tv5Y9QK d0 ?$ćH|#uD3 phrd@,@XmVKY@ou([8#!OM~.7SoJn%OG" -Ü3N|/'O-R_1Vh&׺ NPz8de 勊ZTH;XQ6}+'h_|ȋCcuHjBA,NOS{3 L`]1> A rxӴ*E^.ؐ`Q5 v{`=W6뼟\9avGOXc& v1w~0W:ʎ~f: 0/˵%m KRKAcR% P#CSߥfmD5oEx17B0<&Yd8"1wܡ5 TaaJ3p57A>+yIMcu Zd?Bk1x-rsV9sH6p]DGgO| y5S$aE`$Ls -[Ym ~u8p`6*I ߕ`S88sn9O3nXOE /7f^lbN[PBFO.9Z_.5>F S̉R'}ΪѬ`_dX|{dHXԾ3QlZe7PRqشO5OkZrx5u`aǂ:*`T), -DPQʮdߓJRk=H+ -*#u)h) )B6s9߹瞏HZGzGT"93hDͺ sr|b4y $TK "$I~$v(B#].qi?CN ~ޱ|ܷLcOnT~vxj̦5<.f\K<2p:CpSy,66>|zC -E -T)f/:X1}J+>_~Q;^ㆪvs&۸>.k7yZS:˩㜍rݖۜaKa!l.g57Kv0!;ڗfe %]"XT J3aժlwVj=v姠αe=bI/gH& :g,(y 27>aba88fVVqɌT0NɉB`( _"fo! t}Wg_0}HX 9,Qx=~Jٹx>ӱe9M2mFS)Vk-eZFF٥btg0O?Dǐ%7eyښ6WSCyeUS}l`a8i g"1лJ"|PKڝc,$+&PvꖴGBoj_t4I vqf熚(eC!b׼^SbYi1¨;2W`/7uh?4 -!z@#(T 6 ^!R S#>E/Sq9z_ /G%ӈ0C9[ۼ@(٩P ,}XTOkpQȫUG6 x2e,> -?ϭQެYz/T5FL^`tީ3\#̬D:,vw[mDW)TBZ`0Ֆ`3tBQ˟kks41y `\޸cV#z`XHhwA0چFTyqӵܫ*F˪%*/>9 -gS'"b'zL=N)cs*bR)W<#S 癛)K -&L\9WtW!Y17i*%wJ_ 閥nWJ!p-0T`:K6B+SzlL,~J#ZLHBEe߈Eq1 -ڸTD}bB;*OTCnՍl$OYQ0mz7o9NŻ|hDV[Ve֩b7YZÖHl~I)ܻJ5oOݑ%(,hZGҼmRd!/NEWutV57z;jjs^^lDǾ0-a_aL؁w44簍b^ppi&nX uƻ-݂ -cY4_g ?jGIfH %J҂[%ϩC6OzvWzoZtA$?z;ؼFT2/+0@@S<@>0bSuqw;j4S'/4sEթ(P[V^5ƊHkg/ۄw 0*֭ ajyB5TC J(_F4!m, RN ?S9 :״OfOV"յڇ1,V)S@._ -#Q`K|ͨ%cj/&\: [Ft^Z"q٤Jm뙊jMarח`VCg -w"~>< 8i}XT8dzQVY<p%HG/Û`rq;Nm~Ms\/Zh:(MXа^F.꜋.Ys}5`a((X0T+JS 4&~|iB!! !)$)ʰ WFY]E븎3x,˽}|dc -|i-0Ws -Q_GpRjy0׿tjT̎ԍD1څڍ›N:ka? 7ek_%]a;זF=9-b= &Mm0-vD'^j+/5(er^+EL F1$1KWE|fOFMKm::1`ڥfXЩM*i9 -l?+Lw?-Nx͈wɳ\C0瑃f sM;iđ`$O0z*RٹB9@"k5v~.lB?ug]ed8JAj͹um.DO^^v:y;ske+,L¶vŝҼخd_5Z;q#k> MU\J{l*͟ґ3Doy"UDcu#H)BPit/ v`_Sʝ{e5mpPpy=-2[m+v6*.WۿSǔ] -^DMk,2.#ɲ\!{^I4Ԉ.~çlDcBU\b"c jvJG|H`_2rHѥ tHHBaG :Bf{'9 -[jaЧe -&hz6Fdy?>gۑx&l$^:^nx-'-]O 5@S Uڏy]Tu _,zWPT|BJ,ɕ}`8ߴy?p7gˢu\JO(_vOUue4+Qbi?A.jCxyRJ駥Pt㸲rTfdd$ֺFR>PaL'v2M*׵T]`W*cD*hAe#"ɆKO9JKL2J( KgK3jԉfZnL5oM(_>FOӹGi}<@w#Ndhoo4Y ̾Fٸ2YAz$W֜5Copli\ 32l;a<;S?B>zprjsm1tZc̥{s/J{c*#3ހfϡneh->Bc9SJ"չO8'8ހ `yHϤu-*` x[c')Oy\x!QS9q*;$;d'=NY ,|ܶ34qT=ka%hs䬺UX7Fl[ o1apuxf9QGk4;e -˸7荇5xB:yZdͫ,`2?_a[0~9iY Fs3g Ë9u<,yx87 1Ja,O@/gO㔛94 |.]16'^@1'p:XtwL,jVQv@wl{έ̱\?R^UV\GI+9D03oyd[R<""" -.2}"!<4tH~(-r25DH@l"K濣,/S}"+~wF}V dRz,:w&?C~FqJ}JݢJirjzEgU#p]ZF%+[PjewVjlW7wR/*C%%jGx @EFH)&0_Օ|Xu -DRNXA\0JSH307͛73 CWc+U#r# aQOL4Eљ?s~{sIy?y>ҒLָKd-ޣJ1v*fH 6hz+~BO:IQqZUՍP[UD#BM >$ z|?^!J0W8N WzXfщ@'h< -%sdR۔e[$z,Z2H5[&Ht L UO 췯+52j&P6uRɮ! -a+rk!o4 `ܗP)f%VQTF(Z]s,TR|O)O?ho# ]6yл)OU,F٠E})gsٴGyҘp/kw~˖I'Y;TdgYU'I8@F* 8 $I+A2((+y8OϋWȗE {բbW"@}@C׌teYgvֈHofE`eagbN_4!/e%O;mhtWv6[iyFy4ʔat V] au #QYm3rM/q{~tjD 7fiɷ  . =[n`4qShBrx_5wԐ %nQ~x'G[ `+qb]Q2Ըi=UGn~ڋJ(Aݪd E7Kz +M]!} jnh-Cզ_魺a٭Dfrj6$-4nUZF)Zpux'@]U/ٳۿ3Ug`iU}ڰULWu+SU[;uXJPvOŀ{$KF,qQruH.}imfZh~atMBb0*iWC䶧jZmn[nKfi c+.&oV.&ʭ{5_s9dmIA. *s5: 1Ů m!|fl'6#N -Z>\oMkCZ8)*bEE@(27{I" $!0a=+vUZŁ`-xEJUǺ -~~7TSsV6i1=2J眆Jh@ Uu;7!0 -߽\醮%-;=.e/T7D$v{.ʫ|ZѮmcDֲ+-Cu_{>1H1]"D^nR ٺ:E3[h9 7TJOW+3 vœLimc @6'[c`Ǧ8v!bR{1_ӵuoPE2\@;4"mO m{ ߺE1dA}C=WB}[3']\PJG5VmnYG Xyahd'J[U~ vWۅWo]WnGnR9H7ѨAu 1vZm]lUrTVA -sj6lhm,My4A*0vJR? Ĵ>2C!*#q0MJ!:ŏCR|dFa?2݂ch3dBzSIt?%LmF[AxYGҏ0m;GY1űh%[sጒ@9 q_8G>r Wn)jodEzC.qJviN&If8bg - v|sd%:uTf&L0~p.(RU -; _)w%$/ t# -~#u`u[w.qsY_-*'̳ɩk/)2* i9$7fUzflc9}],툏WYCIkS-ty7>T! 26Kݲ m&cӣh' ..+upC6&@j5tdP0=I˂Ė -C{޶$tR:(ϭuOR4$=jluq1?פ9Si|cqF!_z^SK}`d%DT wV>;<'V=(5H%jWMV#9YD2֓p~~J }D]gNSsjJmn->,vg&SLl#>^i8ʞ%4'RJDhRN0hBA0(r0K+aMY|"EGE_R^v4/?m[˨yN`K/5[71[Gؒ' '铯RGhqꭁ]>iIX -5'\GB ćd^ux+[^%e ֪pxE - 6%!Itި@Ҿ#% :*h$r7שׁ55׈Ց'I+6*ЮwȰ%U#zD+Jt BaUؕ 6}uOr7dP Cu}FEua7RV"KST20 EN{^lkƕ$vW(,F7b ˢÞOy<"_).kh[n 9W?gڈ7yș*ӼuA@ OpIRrP($e[iVYR -n#(aFq&mq3%\g?%ӆM5XD3b$ʁW ƿ5&͔D4®KcᏊ . -1Zo -^`~¿`6z q aXǰ)Ӽ܄'84 n"Db.yC<K d},{*h -ڸh>wMv^ c8Iƻ(~j? -eoyl/Dl5Żרpy1ܣܵ^004{ .%CA22dWuQ>okL<5.ſȠiffh7S-|^TjX[wCY*sG^1Ve֗+˃L3 /2y{+.;CtJ } ->٫y6q< WxA_PZ? Q y1>yK\.!OqM -0Cl];Sk)=RZ@[ɷ5JBeǐ$Ni"0 -úR4H~9.☫|Dϸah-)r~"eoMK%4 _7"‘e -QD~0T.>"x*O>酧.Ey+HVy55RWsEk*PxEGB;(J X(8hiqmh^ 0`}_APWDLZ‹]<4zG֦`oyZR|u^gCF#nr)Va5ƪw9njyIt -xI1bIy>}-AگOShKFx6xqqQ -3SU\ka椚̩Di~ ?{>J3mtߐZt]YNju]ɒQYlZZsNѴѷW>Sݥ0Bj+7q҄fU7m :8^;#eտ+*,_CY3MSU*LX.jQȖg_IWJ5a"9R'C\y׳qH)VU-Z.\+Ѥ/aen/|F[?SPkr" -^Y>VH9 &yaIxQfd}+] -U.o.=q-y][viRgk*`/pLBu+A@[)&PYQ?im/K,Y*gu(i2`؀V"fJSs=RU@7+>dْsmY)w=U?ο3D qjv83׽} 1r@vy:{Eͩԡ.޸,珈~CH{ksv_l毁@"lOR."0Fl]]C˧Mfi nq˶Q{56ef e l[IuY_(i&;to 5kZ/ jjp~Ch⨿䦿iRs!G-֠5 -&wa7WAƫXUr8+}E)oVӃIÌ}qZlh<gw -A?=$6-ޡ|,)!<*ǘ*z!8߀ϸuPpD|Ŝe=sm4'ҢؽYaPOZ(vj?VGgxI=V-̹uMCJH_-C]B~2A\8*E8PTΔTo 9/whaߣby\'F,Ռo%wU/ժnM*T Ƌ{5NJԢT9L;y _fXD\uַA:x")V%V/*]1# )ԋ@X"SVӅ4u.f?Uչk%Nj;c~?]Pۺ˄WҌ=V듍1 -E ֻqd{q׉; -NYHdfttc #&vPtQjd1o ­R)ʽ@}<7 &8wyybH04͂@>o` ~M`Oi#T2"-!NSn\ z$SC%Q%;OzcT)!M.wf.Po1U=Bl1F#F0HD\u̞rڜ*ujQO5u8E$7:"І(UuANgulWYE*Z"cT\kTxlx)$8(YBIY`[}.Bb T$=U8Oŧ yP-x$]0_ -j(sOH|/=wKR` ptl>f*ӡuU<=Ts(&zpKA?sLo`N0Mq+~*m-~F7^5惬H]${|-Ҷ9Y&=X'Vu+^ϖEm -Y/0X cAdPc_X VRx6b|C6^FeC]o-F?f7Q3V>͝yFsy]ݯMF͊k^NնI#FZ.7ƆQfeϫCJn;AjB JFw -mԗ6t(I5beElXQ͌ i,)6QS 1zJezVBf ۹ʹ/ HQ89SnE%o-4NJ``,)~utyQN]vحp+e"xN6y*,7$'x\CQL[8.d@}CɏE)1D?@晹b$?7 - YM N| _Td'wa}0Z<9|3閗3~o=Y>l0Wb=P1jmE XR[louv:.C=;.a.BřS[nWJ3ǟN1='\Xr8۲:KXj6e g΀ap%z"K1.c1ɇzɭGTRiVBe-)K@iͬ!u@_`&2q up%P -SЧ|NWP !o-t_ nyV|ؤ賐e`HʏE=>\Tǀ|cҎkIST!%Gu,%[IR'+#T}m3\/df)`n2#\M(CQd6flqGv첵).Z&wITe{JQܕQE\m`p`Ҵ\z[v7OVo9ݜQ}$SSFMWdnyuя: *o[3 O FRJ0ոl+L+&oE+d- -@?^fEkoo\fyJ8zΰXmi  -Nw}OYpz&@>gݪHc. ]7Mz#fe"g\a@\qyºJc\3ܔ r'WQVE D|PLs\h_h#9Z-TdL>˼!WS/bniA3.1Fx@Ǡ3UNN^nPOZdtvWO&-8ךshveSȉ`wPU_cař=շ}m`<<$+UV66do88{ηzkG}ڻ<<7\jvg!5M!w&GmpfSgO3x? -wZsLRq/~lK]QV:om<Q' R]AMXyu ^ȩ $}! 9LHaH8hʡrTtD-*fY]]wuu[bgg޼ߛ"ȹ I7HR7HBHudt *Ჲ=eJtj| #TI/W?{ΝO^'`v'$^E=7ITF2˵7-^'Z"[x ;[U7,QyWrr9E6cy'I gIRm2ZQ -{0K,^H/>>G@l`T=FZnZH ѳ$m¯鵩KA3D;w7ŏw^J<`i$M_x8wU-,/h!pbP1|*k _U;N45jX_:]$ %ͫX+é Miwzz{7`fOE5FohX}fL}k%Jq_b_A54WK'h?:lTHmm. m&"X7rV7l̨b]r+ OpK[{0EuwrfӵFajCCPktMݻVw[FR(Y-VE8 P?)p>͛5 #TtF%3 qhk ;`LVOpZۓ. j&\Cʡ <*g!r)J;ȁ&xK0N\B&Գ$bԍ7fpt(0H23ӲG1d?ź -bVֆ|\[w+tjj?b7hwJCmm#b.^VBDRb8E]4J 7LGc.Xd/a&ڎ @顢zQuֈ4Tqi˽èb˕ 43~,ymoθ[0 -l} TCuLBt 2ZW>Eh@+[Řy0= -sU"r];û](̏{e E=ma^2'FKv~.Оm0Oj(esߺ Pk*!3IBЦs4{^|{6k\* }XYǠD=A %$hǹWǂORV UBꯪr+Ca6 Kԣe :Zڿu6&?W&k).]%],lb7MX][H"}WL)RIrfr?AƁY&I~_IB${XlZXE&|w#؆`_vߢfu3fm89?9 -̟NՎ`jz1*.@爎܋`oْJ_+-4α6@/DWEjE}HRDl;Y+ z/1Dѓ(z)oι&;.4aZ#gsbZ+XWi;<~n"( M'b6!G lP<^\nM8--aG+dyXP^s:0q \p3bWu.,R&rm#қs)lej(^ ,=/FV6fj;ex%Dk%!FW@ao2QTvs 5h0B{UHiGCOzL'pbIq+'_1Lv -QA%$[H~}{1fKٲ:HmWS -ëd}2w7 j< O7i2G;SWݒ!@YsZ~*PƐ6xQܡ/9i7cGHVf3R>K2jZxH"Z")vHD} @} YJ64T(P_(*C]miSJqOZgA(ny8}wν37;?߇*x"D6HaeZ -5K e -tE=H\ƒW8 72ym]Ly 1N<8͍@:> >6pӹ$.7$C$pA)hJewT*FmKg-lm*{{v\ܲsJa>3_*ݑہ>V5|WG_>RR_YL!RFjz S5fځO2< `}I\:XiZkRH*4[(xX$u|I9̺TkVzl_׼gC%*wXR nY)N.9+wZ[E9ľWJ%wp`Nj[.b|JOsdW,R~#* ĽyFdwCp*L(8OelL˞)A vfFʹ.Knd~A򥾺]Di(i]YʯJߟ?>w[侾7KK6w"!eDp5V* 3VEa{:KoEDcɾJ#oOU44lTjFk,>{S?ýSk>Su=|j}T -SU.nk.mcŮ)RxbT<TV*yÙ<+`RC;S^0-itp<ȗ2IZ_0ȡVVKHWol9=fd jb%}DCy{sI*{ZL1r`n}+D_*Uz3}i779_kjxL+u ;FxL.mmQ`sKzK#>&ޗxiBV^\s3_XX_رC+ҭj|S kϽ|j|[X -ΆBL.?\DCqߢ7nO(M&JOiݖw0IJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z, -     !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, -ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 -R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T - p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~ ׉_LpK-~~,*~&E()D9vyowy=TS3wI!D)J%OBvwN64;>FVWm -S^Di*bPkpة?%"1#!ϼK`L<n-e2*+) X䥂C@v2l Q?(=0q MzǃIz7MEY; Y@K (-\U&>rI^2IMe;Ya"VN,S;o_%sD;fƎ.R?l ;0Dq>8zDKG)3o+&<4@n͗0EO94#ҐnW9 b_7}B2yːv/ąJH삻Ȧp$ȫވy;Æǘfo虔F¨LsI,KhW2!AjHE^τ _wdlXggΩr!jU)[%B\DCfp <_\?k,.wȲirJRݐ=>0+cvZ{HllLVAc۠ ^{6oCҏSمbȏ:sz 7jP@Q;[wg|z30Uq`!P-~|X3+z2lIђ:_p-FOJ*Yr(".O'qäfrCRJ'dc~h!€?`}WzBd;hѲGϲmT SAij9< -ߨ%@`8xLTqė=,Mk $hJdx_r̰gʱhtG,KytomVK0X?R=Џ ]ٛa`sʠ7g&Grŀ?>r&z`b>&z%sxbw&{~څ]"WR%c"zD zA rs!֝=jcf]rmANJl$ے#ؑ >wTfGFF699<׵.'SZ*˺#-Jl.ZZx%m*| o 2ӝ_TWK4eRsu33'jRFBWl| -Fgml0L1, y+Hu2f;[T0BE{:qntoT]okI, - LgV_R:Kϋ0dP?= vE̷փ(M4m\Tk׉o,H=Zw/EI-LQ[ 8F/g֖'$?[u~fghXjݚ- VImKՀ,%ibQ*e97WKMYiHtXTBUDw-49#iԗ/r]hGވ/ - -lD2 h‘%TTT*Fdw">GY?"[f r5ʊ4`TAo4H5rWS8Xy;$Yr'q vUPV&4m/5LJE:S7Hvy.. kPXAl` -,e: E$@BKr.!{A$A,CY[EA;| TJkU>41aƜdcT.Us R&BchR) - Pd;ʟHbl?1;_:i^mMh9Ӝ+,x+(‡j3=P6u>a}&b (0=.À<2&m%u9_~zL!S`(6͟>թVlW䨸m5ypg!2< PR%wC>ubvbF.0UK$K;؂P,!rA5%\v" -[2gwdxJ:_'Eښ_+^Cژ I! v,V72UJLNITUKɎIy/R+=+(֨v6!M @PB%R--3|4-)#ͯ w.ܘ<;b#;*>$eG ->3"و~AZ$xOUx f𜓜x;٥Q h X(Zx=`dš 8b†id, ϐ!enZ -b /޲І2P0~ +1baktT ?g)˧9 С`.ޓ`>'4\DRdPaxԗ?i|9,t Ĵq]"m-9OD'Ex>#Bz6Nk%tm6BDzVQGq,2O: y{iHcy[]vaZT5 ȨR 345N@qG!fYXr{3^M7HX1ey87ҙ;NP9tn/D=}*I:2s̋%G{7abTBm6ۺ4JZmI׶Fהz\FD*rEyք ̣V-8ˉi#7XmZLW:2 -$Iⷱd`U+z3 8"}Y\E^\Qܵ)<&uZ!FM)V"ڟ}&à/ ď 5 O546PW눤0 fGlEbdc 'ƪrӬ[{K("M/y%0=zFBx}{w6{Y50%,40R}ԓvTp>K@fR$7HU( /10f<,1BS>٨RI3#&&pa5j19#yTH9cI[էjU̟~? +7NzM`k|-kqJ}(Ҙ2SaӼGi ; b:`uǤayU}T 2Ftm̔%OpuDU0m~L-_:qWg0~huw-] NVrP =<]x;Y1iw@8,n\(zqb !$zB&5dn61Q& & CuЎy#c%$7]w'z\0Lk{8 ;fGS Fx¬P~Km%t3MccM(bCB$ _ J,@՜ %ӸZ;.6B)PT~~:_tHNITScΤ5_3bO6-[o 7$cn:zNqnE2~7\NT' "[fTT^2F&+c5r~ԕ(jl 48mWDC]X#<n_ T 45 C0 V~ m&AGA7w@w;Q8Q ?d9#1yʕq_eS]y|d*&6Q30J(WG>HN vAg+[o:y1ډGmUV'pJ{"M@3X|*oƙޞ%sfJ<ߔ[-0R'G i++qNPF\&XT~ykPx>–~u2LX'P MOW rة Z?qU\+w>-q}y/sRQQJ@737Ka[t̷E8X,Tp!PVK$`Κ׵bu~*LlBz-f{i8DbMp/ŲF_<`w[Uq. Y!'i7L' Rz$v]c-ީ%HY~ٕ 鞀ws{)Wa˹ԑ`{[z ϡZ& z -- U@uBP.8jz B{GtϤ1ޕq# ^o2N*`DZm錞c@QY@Oy`ŕ^ )H??s %J@f-H%{#}řPKn@u5w:=YX9(5#p 9#Av(~-"]Qb'䠡ya -'£ +vO@%7_*Z-r*~z Ց4!wBpG-q.a+c"wmqk=WfB +k^0>npu5㞃= m]0o-1:ǒ~%ui;pVO/a3;0oKܼL6Ed@ZU%{ ^ ͰyOVNHLmu?uMBEQ1\IُOui@L7Nk\dd[i|lRܰ3"rW^  -19~(VZQjsfb5~Nl, $LAE \Yv3k"*Ie.gj4uDk"*T~~g^ ~<|1cPx7kF84K(/AI\%HG;'6`kK -ZJAFqKq$5GT#.a;1 p't.t-SSUn;QY(sў*M8= -BHZ# GcDS{d',Utl=,}*vcr+](_1rØ@?A[KDlv'”o>=ԏ[?Q ôn!ܘeoiB]u3PzP'ߧ%44Qw L7@?;gSVjgohop7syR\7V%xL| 3n|2Q|-GotuV֘Gk}fd'̐yQ/;^+b#&~ي2(ɚpTֆ)$Dru:5zj,|~0T\~>*,6Y -]7E9!7;au*8Y?Ң#WfiA~\mB\$OwDhE16:_JqBR%*X3 !O:`Iok2+}Y'1%Y GPMJ{rK w_ L&N NyA'ճmﺾo4gz"v;L je %Ɯ{NS6U'*@djNcvo^=Bi 795l€Aⶫ627ICkyV_}B.I=YR2U^c~o\Ƙa3Ƹ2@eU*Tlmcӱ~ xnNU)o`Iχa]PFŚVTC&ϣ࿋Y=d]/..FBXs+$=}buM>RWm6Ŗ6ᢐFX 5x{v*j;zv<_~AVUJϐ^IjQxシuQo=lK_ՑEkZ\4sqU7vOa J?Q)4C^\k[{3y~M|J'g4Ay,$0( jHl:Q"V҉1X&e s)MZ(W |Ϲ\88&tcpҔa͔ CC GU$^fb|8u̸&A֍9ke7;㥦koAvՏ0o5y'M3q"y$[Y@SgÓ=ݎP1)L \!B;U!)/C$N$A³ueuU},3Y'/Jc .8_[ON-<"NawGm_+yj~P]ſ^\y X,r-|㒒ܳ<L^T},^eDR,nkqց%|r,!gJx=~p{"\eeEN;Þ=${q@Q_\?/иLe>u#Mp'Yn_e<q㼅Ra8pLB=(YK[l`BKB#4;c;HS^OA>Ʉx\+0lkOԼ`Fcfup.wlCnKJIi]&fXPAn1کFTKBoI!ӮZ f)~Xhy9 ݨOC5&|T2ӲnSLB5eD0:yP;(w9mΪnWhKu{`wk -kH>*ڲ1 wp5Q݌$;LvvJ1f3n*Tg@oO#9|}?V0M5.ۀz{" NK?C_$ P&B̆e>(qIu`|ob|_0l2WꂝsCܴLTIa?f(/+PIwB WhgšH EiŮ(G6 -"  -"(H2̙dfr $xZEP>ţC~EF:}< \{ -% rH6N$(߫Nᷘ_%1]2:$o-8ȥ I-qt;'kTjJW^}kfQUr\ulNkHn᫂H*Wd6M2 *{`V%VRoJJ`+"yO|s86Vy8 :+;9ɨ=.qqѝ=ɥ^ӏwldG;fH^2`zBȳ ŞO*{M2MoR0i:T~%$9ED~cj<}${.-+P]c=Vzpwz\S;!?C:GFIױqYŞ ݇>;]mS)yrEz_n˕aI"l|sGvmߵ_7e]֭>ГU)i:D΂G}V W5*{f? -($p\)9D$ZYr|(4D܁OHʳ ;ܫv۱jxLr_r ;Wi nV|Rudܦ;@YNl-QnJȲc/14C:'K&̕BOJ{ߴzfsW|F-q2 ?}Y[pXdY<\v+M{ir8~LJޯ vlL: ?@o[g`}>?UrǛI2Lk.}GpI8QRV%܂L0/PUE ?ɹTcۼfHs^QMC!)$ ; ej uIy W6#LMi9ĦͱP*HʘFg]mߝn+|X$Z6K'OQJq m(B~ljSuZ ťbhWP"z@UVJ΂\,<\HA 5Oaf΍C75O Uݮx7F>QL~:ʥ#][eTS2%c Æ~EWg9i%3W4ފ:}޼0_X|-ƣµVu8H{YF"qĔ-F95E!L/3zLw@"FRmOQ&[#ZO/xˤr~9T00bܬ 4Pߋb>_nMFY%MOaN$ʡ˖~ &($~>tBM%^i3ϐEf8UB '`-icIaͨ+ دR=ZȾŁ=5U#5HR>njky/s6H؃E oLyCG/?QE%FvMMz)=ZB.ϡƋ/•3O85&YKլ(ST eҝZVx'xaV4Ë*H]z~h~ i0d,K8CZy{jCF')b|xNJ>V{0e#|SE1b狛*_R"37Boξ(p3_<ݥ%-tɫBetƓpx HuRuɵ)H?mf@Iz͂qrgM_D|Ce -ӯ_wCՄYK/Ԩ 佨/Y0y̸7.]*ѳa !d[m9#{-;W[ U$mb?ci3ؘsq6ĂT t֠} dlv{Fyt/ټt̰KQ8 N"4ʻc'׸Ns6I ][#?wsb,4U_ f)Eď* uä6Go76ɵ{'CGa+RUA=@5_rgs1OUG*ʚO&Q͡4%nlc=%Z vY Zeਝ4? eC` _wvĦ10KB/*Brv4όwM 0r `$CܝGa6;g-N_&ɰ.` `0M/s\PMf`p3 $A7 i c(y jӍ 5!UiMSD-rBFL&^:OF-T4w T3c q]2Rd/3U\;?Up=@b -TYRJ3O)*+sWu.[L6ǼA. 귒hoN_=C|HW Gz}w\2h{?Ur_ס,[<4DmD〷C/Fl Mr_򑹾g"P\TMIiDw$=` IӐ }6.jYx^h}]"]l -8"ӽ΃ǐL"Hڝk:^֖Tm.^@1~qxTlU#U75:LE|4&W25exz*̖̆;M0do^lpmaIS7kD#'͊$"lL?bADINmEh 8Ԍ*"vұE݌5Z5 `z~x[MN&a|b(ǁ$ch |cq)M_Ɔw>bSО$  Dpz!G@o3a]PnN2);K4 U"p+q 7bLay$04iCc9(6>E3a{ R䏡0`?s07y9'`Lq`ScLr&MP.ڽ,_ru/F=܏=1ltŜ 9>1lם -KX_t+ =#ثL -uuWK̹ u)F@jR_$YuBśGbQl+$,o8qlg!) n2QήU>Ytw(^'Y! %GU9, &>YcwU Mj"Zo6VWF9=al mynqA/2AI̐i -qAN?!9NxlbO{eiYQ̶>SZ .&sbj?1_ǡPkٟx`дY!n6fVJ?ffon06l)7BuyMAѢ&m>>Nj#4J%&|E]ۊ:i2g0io*6zXh +҂3;1"2ҍ+O?KjaY|nMHpA/LsI5cu*ΐDx!W {|mpq%qehrYbBt M7uA- -w%5,x+ z!Ί}|%wpȩxeXx|Yy$M}yAz5{+=}5"6~{άq~p^Q~Md~*XŸ~,LU~S@~5 ~+f2T"P{pUIpf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i -9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy -}>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$y gWTaˢĮkTd@D\dPPp-HG&]30;sCg( 1DE*n6ܵaz*&>P3ĸg| ,X񦁓`S$>BG DǕu#i#܌-`xJ!wم:(`[HWeQ2UFD`|:Cd2~TvkdEeUb2̽p ʠ~[@QdF!7H$ #dLt!BOK*G-iCrB.UlmO> ,B2W<+367ߛ@ )۠&KO 0ޏO igm82=D 4FB[!AIb4~Z *fz\OtF&ӝN&3xF[Hjz&3n14bM zB! |+ -/hw{V\lsTjg?қ۟u 깮D}û.5ʺ(wM ұ=Ljeo(u\ yPXƢ8p2232"uh0 ;(3-ybݷ3WdsF@w ,8#!H*9)iF^ -P7Dg3I33D_)JQNdOm2ta':=J.۱ -s`d+uu- ǵiȵ\L -kw/i&G1|91:H^gW@-Eif?QF?/KvřMkz݈uN0:ӎ3BJ]PU@׊VVzDPC9>RTl{=EY^ScyjN96b~mwj[ Zl'd}[YގM:tU9WI-#d=sѣS IKuƷ6i/JO{s{c@6oPU,'9cV~M6IQ1WwoT+mlF0\Od?oi4M4MC%HfM[r0p[p|R’/Ld/_c8]׍ YpFKM(Ewo@jjI0/kad[H>|/ѓL |00SVRׂV2Cæav4x,'L82'7&n&CĿf]9-f]i{Ta4EeNٟή"V_ǔ3tf65ҷ, jP6Ex)ͻUSu@6M6dFVSˬGŦwƠuy@>.TȆVOdj?#驺sycA)w,zl<ـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! -}~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2>@?nC)HKс#Eu$%`^>[ -(?`~^x0_+OËv&"YD>s5x']~-if~>NF" P^OG# ǖ0<7ӆ7 :sXL!kݱrx{6Rt"+@q*7k1U誘Y}(~\H`J䞂\ -52[{F;Onݦ *C{2Hpuw0D(MHOB$vKѻX{'V' 5c - -sh]T4I DGãTD(2BNlz9eB_ ݫ.#JUbGɰ Pc36߅!3?o/˼ 4Ta1l-vKWZApɾ<>\Щހka8Z5$GdW#{{ߢ! e8l&Vlu4ʚ@ԸQWJ"쎛)9(6gf y'1?JL)b쭢l]4LkۘPpuﲹ)nCA Ŷ+2dEH'Hm&Y3uѷkѽӭ1n]_Z<ڮRvӛpjm9G݂#j}dA-uڠ -0\C"dhK>مٸ:IFq\BVhF'$[I&3BtK\ D'`;I ["%#N\I -|?a8+ş3"-Aש_ZZKO%u6`X{cͯw1 $+OM{'E],jz6+~ Qk a=_/E qbVk&S7fg\"&]KOÑ: %ijeB>%j:l=T1e~/ߪg I0^YV)<^ϑ% -զՏQS-WGpaθD8ߠ9D֑ՃXM' -UJ]I"mteuuE)-3`Ҍ SoO6Ju@$ZZǚ;oam>݄92)@m{>-V|WU>r$Ӳ]qّ¸zEYuɔ>GT@蚩\'}њG9mp.d.@L4c&,r;b ӂdlt3ݦ]Q<b-w Nk k bK%H@ j"W4sf|Aa{8c%J@bW\E':Ehsř=}9fǹTW !3ߔ% פԘ]YzĀ&XIkWdPيb]9gbIi $ O1wu_)xS$P)m/UI .mpsf5Uwl}oyh 4;=DUIKSDSjj:?2*w0P4o+G4O6jeu HW)ϛ=ݮȆs51 okaIӽ֒Wo0%>#}?V5N_r}%7 -Լ{!`D}K_4 -!Q\HҽzȔHN>uA-^Ჰbg%+k58W #wi+q0khcuTT[`5Z[`J &-v**cs0:-7o3G(Z!d  z Q}vx'E}aQ#*'viƷ|'in˵Y;eR{E1vikYT24o/;K |O c -Rr_T'UtKyγzaL= zs#k)|OĀ܇:axim&&^cŽoIѓ` -W82K/ױϬ˽^ipuO:JD:WtG<8YJ] - ՄyiZP-|xm4rQe`dZH ;4SX1̚`wpu>7 H2%Cd>zES?+&e{\Q>+) ^T9ZPFV+@l@ A B -r3L2$$x *,^-ڷ[]<**RInpdk ŻΫ :C>KXi<_TTՖqcs.JmZEŒ:^΄hsVIbm8tSX&^ a*Ɋn^m=A2s^mICca|k`K{"Y١:nf,ڱW x_n~ -!f睥# Aɧo(u -gįVg攷E)?n/ؠbdSu3QQIB`\C!d -P,2QC[Pһn`RXYU^',|Y5G4-},V{:T5zGFdx|4Zٲ u'ʦ"Ww[f^'0Xcx2rKJJDJmB|CÁ=55oc/hNL9'0jI. =$!_3s^>pX0]ScԹ`gi9Q?+,O|ekkC)6bf!),MjQZF_Y[-ۈfiv&mH!`5oIxudP#F -P&h_2nnmMsC?wOt[Pk+jnA ǐHځY*zל`L﵋TL01|w:44o(%j̨5YJ_|fyl00DO+/.5T"$8[g)T`MH?Ɠ\fިÕyL/\Zj@Ν(Wڢud>P"Yd'$$ʗVJ+W>pG[^Gڻ2|M 5kci{ZJbILFPCR7<]'wKÍQXb* -$f»~ ^̈́:)]}pA(+RXzE;b1t!9ݠBj` d> !L7gh%7nׅ _Qg1R2Ǽĸ:@n\KX)'WIC0hݤ!XL}4l5 Vh2,?bLb#(sÀytk]:ibP_"2S&F ߆*:/~5l6fݻ Ӡv(l1u;8qi7mL[@Wxlg Y<#nMDyYZOEX;/C<_IfGuROM++c7S -4ƊaZԃu Mߊ]>]o/m^&=Nh̕.g*>d_$ -]koj-]wz`g`@XRSZ^6uV^og~XQ 濮a%{s Tp4{HLydW)YU&R?FD/'gH7yOG -S0᪄g :po)-.XF:e*diG{.㯙nwn.tY<"`7dsSC!x$g:SX9Y%r_']4K . q cYv.㏢Mrm*ADbW냊M1Dqby9mT'buq7Or }yXK8`微.;~1K}wҭrB;ҏޒ &6 Rr*?j䆑lugICkM|vhZYHn8VzQ3N??֫zGP5|No(RGJ[5&Hs)qq}^&2n:zǰkFmP03;7Nsi+ZiӍ ^zs7Tm , zb@p22{96ʄ/= 4)c x -t&83B-(;^SedSy7yG^H@Es7<AQ|h[\jeZҎy1|i-M']|k!3h{&m5&[KiK%}UEk̀u hT[*FkkOZ e ev]G ؼ;GLW[d;oo3xY{OEk[@|l2섐^򒼗F6a 9uUQ[Em'*uWAw:^WfAw:Rc$DZ9-N7~c - -?;A34VfO 5*DvUe_Rqr_pMv]{қ[;f4( c5ڑGdxEjO-n -| g8 KٶŲ]{r3J(?ұqlu;S7qWA}ǰ=o -nxg|GCTpTaH͗O0U`llڤClt0jh~pڱY_,x',IUjn\[M zDBb<Ô]T7S0Co}2%sF͘MQ ś!7fSѕ&.!mFk(+O Oȏ@ W1fG 0JZ-#=qb>@@gIxFz|޴\E=Yg6atҺ*SY5T9vh  %2{}n}I90v zRf8kOʼjVo:*xH3_ 6WWx4\;5juK::i7rʶYAd~X:J1<;e -(;MsrlڪU[y5vw(k --OlHWeG㐣݆L9sŠFp6i&xИp0C2}TxmCH#ѽZyڇm{+EAaWdVSy%ې8bש"SLL14$Bs&Bj&d@Y?O+82}-D^ݒD(PR{Ѭ.s!$4Pڣo\i(#u"D8 -:]C>6ڒ׶*m@1GQm lìOrusg# tk-ۤ^G) yۂ2b+PgDWB;T+4Qv{9輵;!f6~/ė|@r~EM$,<`2+oMҿ$ȵk뤆)<$\nnu|LX+z-]:r"Xꗺ.KW;–YFC :Aǔ+IU u+U>.+͋;SN@] LUXKx6 ͑8=*U4^qݗۥ>S韒+Ż eLsf v?m!'粈Yv0zْ2GwT1e{BHM, &fr(y)% P Ehl% -$EVDĶt o \~6-s//E 2<뤪t :mbpVn(Q7:ziZNl*3miИ` snX -U\Пbi0^Kc=!!{pwpyKH&Ș/UDg#M@1&yf_sIrŔ\ Bc7HexXltbu!hI -&) ֩ršbps;Cu GFq~~c6RbO'l"<͖z [T0}5y V|EWrф\2aAA0 /ɷW&aA -AK]מ q\kPU"Jѻ?W{j#'rG^$U)~VHDTup7eÊ⚊R"I^w0^+mOXiMi-T5ȝ'N]~{e r5Ճ-wA-VYF~UgBOJt8y0.{KO(vlJ uS0փyk^?6Wc+ -Cl]Eko%ݼ脦g}h0[[tVۃw,U^|}X?4:a<X s%هU)<@ZQ/[6 . 0A=fxIҗQl3\PBoJ]Դ\>[3?,ЛMOyIOi> '|2kxo6oy*Zo9XYifNP?1k𾠣 *_BupֲB[ 4Xφ}P73d"dٮ&<ăT>x4Y"GXF%Ngt2S 8.hpq܏#~2HleҢ(j =~n$ Y9PKC‰/q䢘&lrS1|8+ۺp5q Z(QӸAX!\$$$CsrL2$L%,*OQuOłBuUX뵊]xV~n,[|nC --bY@X?(e92"կ)fm6@>_|Xȼ L N+VJ2v&ǂga:y*=>C,꽅zqwΣaVbP$Ԇ3H* -|tc^7CvfCUʆN\A X)MȊQrK{Fۏe"j%hCi24.$ҲɹDӮ?2]HMtaPZ+C9J*_r%QNH4r{W) |em}^e ٻ -.v_.e'T)V4(FoUgzf0=rƣ[(hGjKҢy}%]ʟ%(y쭬0L1sR1w^NJO7 نyoxõO`i0)¿6T@JJL#״C[!)9!w+@,&TQ0GU5a -5\1(-9]s41y3yʍ/ G䇫~IĴ41_35g%@.1N§ N̡Pi'74@rz8Z? i;f -cENOri@Du{A6.ѱ>1_:, Jf?/LCNN*E]٭!mq=p)ݍ -cFMH?b;t% 7r~L&3>ﰞ~6slD'9?6T­ϙ^ 5; -k[}gX0^hq$WKJm3qV/f̔&|}31sO[9"6ε6 9K+|dj8a&kɐ=9wUͩ?|0,lugzeU,}* e-^uGSoy77bC#Qşn[,( l^ 6!ʌ>":jbiq2$V1\$ǕwkGԣQ%[`ѐJ Ή `]+Y)u!*5(HIdaoElw17hYxЈrMyA39ScLYgBل*dlQ P/Džml)IR`i?ĞAY訌:et/ ysn琸M>dSG&HPe*p:vFӫ}9|%*CdڌTm ؍θSVkq~VQ< f -CB'LH? 6ǍZWzjxA|+cshi#a43 KZr?'H:m2AĽ eЭdcM^k^Cj#,@DL2I~tHGǫJ̀e W`_qZb -"pp߄CH I&d2L)xʪ*jXEtJJ]EZ_=@XY#>(UT#tgE UO4E]cDix`Ffw0b(U -Y]sAvjfhw@A,bx#iu+E_Xx˼U-EW'_@ce2b1( h^EN -`V[@-kbn_Pe:60lu-'\j|Dme;tHGD˪&աD!ߪ@M?B=rΕtSwo2Y!;DLž]򮆁˶Rf;˷-r0ۏ첸R}"?5#mk+3((.RxP{K$ ~?uX m(U$C[KIl9vL"F]C2q.OI61Qx 1iQZxle_)O&uZCj7$6} A~8zXmb|n^i>]fQBchJDj^ k]rou#Ih -8ЂTc1)üW+-*kxueI~PE:LR] &t-¬^*$M4-bB c鎳A9ZuKDۄT}pp;dzx0w - 7 ? rlJU/3BK3hf@jm1RזD*p֓2O(Vv -ndmMAO;1S`M-a6)N˛,_ -l[c.Hі%Ŗش+#]lcٶ$ s~&b~In^Y6-쪸ʟ/FRa` Ei|o$Գh:)=kZv6g|V'E;R^t\"ZW -YnN'⢒LiK[!6bjnf$=+ *.ӃKvIchP*%zډ,1-pGsD8DC7x&X8e!j5kL4Y &XqYLA)$]s_g^.[fx́{sHq  o݌ KFaa)1$PoגיDO̐Ńwq?0$װޮxYZN8$8 _ُ$`lcZ6ݐ?ȇY+0H5zቔkQ}Ö!~QQ2&P{BcH|7gz9^sylu^A ;RckU>)vQ 8:oVcsK68#7>^nNk_<w*>mڹ3"ΨŢl` D#ޣ7W-#hD:G"DxA4 >X( 6b-X>*'qkxOOX+{5| fP|~NEzEy?|S-2<3}=`[~#ltGPj_ _߷,cn$kaM=UlMQ"gɆ 5iЉ5M%7R%qvLSG[]]M vKsw>q| -7pL=#.[CjϨ^wUOlTvCe]j20uuFfձʪ:AƆ"E*S'_ -!Z:Qpt47rv윽Ys9{<Fr׃d+G1 F~ /bm1&&x, ^ LtZnDz4g?x7o߽06m3fB|=ksΛ 4|K5~Xp%&(*,.0<664^?|X@`PsB#b$ PX<1A͹O3l.O IrOS#?UBP' -BPT;} *~>22 -EOL_~[ g ,v,cy]zFl(}FVύPq㫪J6A$*H$Ρ`v0;f×9zL2ٞQC|QM5xzAR+Ԕ k*xGjsH%Ť^Vaݼr~Lȡ3h5$؋#2'$ -,FP].V!foDc&2`* _'ǹ{# ݰw%{2>aQ*X SV*5r1V/\2dL9x~dE ]0 -^z[AKmILŤSK``;m\ojc{.]w{]}A][UT5䄚T9"#֑$-QJ֙ -(R;7n^윆a:VVTST@e& -PkLlvw6ԷU8{`>5#8-Eʦhc5Ij ɱUx(EUu=XU=ux}{tjG -4a(=Gr(nËqZTivU肝 F7 :&|ؾĮȬ8CLNlG\nt{Bvx~T2?]ъ?:B': nAS+w."nG%PBRBz^MLpz&*T@ mHh؇Dc΢&ZT_Wj 5yI5LOї5m - һE/`v0;fˡp;ϙ־A}UlK8SQC#kדtYFUVErAF̾!b7E|{e wY쓌E8T@V4U4<7IIiA(R@: j:8vug*tE@EQ*r 럄B; !rIC@V@]_ӇQ5UW/)aY/-Ry%F2"  InK/i"tY{p8d|Q\Đxi'6ĩ/UUi5gԧyebLY(ke&\1q(h-Ev;wΛ6 !5kC(xH@m՝N&וy UFeaf5n\+#$,۾.wAڐ&T%_}ؗY6"s 9G&j ơR9aWLt~-m ANv$&! 2p0t{z$?5Z uTj]Ġ`9t& f,h؈!%gS$&T<6ncK /'z&bp`F*8b(@H3x!}': yo8IP&\P{C@Rt(ɓʌ*rH1𵐗&dx'McČ`$f>m|S~䃱ؕ$x0mq]Pe& i#eF6AWB~8QChiTɞ <|]z[u*nz!bg9Ԓr3lq Xr3" >4SPh=m@A8 {Ͼ+\Ǖ--F3a@4M6;ҩ'Z8JԐpjj6 DzQ0'չ=;Qv(X N#0-z#}2Ң>ƾ#Ahw8Vw5C/[r:mU5fYH7H)N6S PX'>}<5ӽe~y'NNdtOݗdjM Z̓x3YAdECM&-ڀjG ož>ْm\-u ZTS#%xG;Ѣ8]0^`#Hƺb~ںnA-9*ViTR8 -`'yM>aATm#GђZVZ˪ݐETD_l }mϒdo8zPc)VdjGT *:YϪ z*MSqKP}W7K۫Ov*om;Czzqt}JeVl|eryItV2j)kb腳h ?|lIlN^mzQr}\E+ݫl([Xp1ٔZ[m@_Xi䮠pvfy?q)?GZ3=@W =T2lvsdrڰP챢ށzE     q5YTp -yOCŻReb &l[Ghmb9M%>]8!p~{gkl’B42?ȩVnI6 -e%2G-8o QP6ncN/J/FQ&= }-9>#, +>nƙ,Π z,>3'ЏԍI6Mo$GWdosfܐT:jGyhKڻ)k[Leٓ#ceA>Vl oiEǪ2p˪lMe.{J~IT"Cvnc53}-"ÐhI'ِ,kHM"D[YjsUZCM:fD˂+)U -Naa␽Zfk@ 0,"IBLtrAlĐ  N9Vr:#Q1ha x!coDjԀE_dLqi&]8NLSNIS/)WKlƜ5==\[jTv]٨@(WKsm!fwO)iiLڤ?鑓#tɕOL=?ٯ9,o9̳t2UAP@C6-!d!@ BB6BĂQDkop94Mre9*ӍRMd0W:rB5*G1GRBd; ib"P'dh8^`B5yϕJ\ L΄*nW2b߭L)3t*E&' sdr* i@s?/=:Vh,~ߗ;{u15k}6EnA;xobhS$u,N%ɕ8j 'q/qO=`S)г ,Tרs=@o5-z$^˚Fk3(lUA?5(!4v(_uw1ff:w-}hXKvzqAOQ NϜ@:&z$B/ $Gc*8?z0;ߗ]/ZZV#sY]X&qzlKNCd P¶GFޜ=;èj!,z5ϥ+D`C^n"NJf90 2?}ɉ=yΝi*mJnL6M$_e A ($eEU Ȁӏ^9,>IoGs}YEHBWh֯յYTwL3rS1MOeS-)*d`[hh%؝jӣ͓\$|[XRK@-_JoЌ+כŋ8V"]?/&{d_$]B?,kʯ2xF5xun#s -[oyDs?{how1,8 fL?CVAyE% -K.?)-amU [5[ڜȺMtM0o?s}*Ϝ|-.̩ {JZVu (lIneC6%FQnj̍;\M{w 564q@p${{bKXQVx &\^fA{O򒻭m.B0b @ħ/d?4m/o -y0wA6kloz=vVtbd.RC{,DŽ4]@Г zӁ4#L#y,xK|}]XÿC>A𵲇i6pD1|܎,HψP(@c ii@Rq2[eaU^FR6Jz!` {v' fQm)0}^(6Rc$5 (r~P,y9wM:(^։gDHDϡyl"0A4t!5F5bl ”#@ -)ۚ+Ou`;\ mqׂZ4++'8bqu2ǬN Gt$ F7 G,)O '6bgSo/+WuQ.mlc`rj($oQM -0rIF?i#@I_S>8Z7gW-[ܫ J?&[1Ck\B"mф;[ - 7qD -$fØt;Sj͖%qzfg,;-^Q`-}"ҘGHv- 35Sl.J7oÉ@ 5pNgmwٱٙmu*ꊸ/#7H NH  @HB\$77!PxE.ov[O8bD>Π)Q6AY-aWjLGU-oF7k1Fj@3\=ۉ <'#Gޙ?uߎo qxeP IÉh1nzY=Wu Mզgԥ'(e]-gCGi.];^ɹ>~o[?) oOP^M!=aǠtRl69m^rU4\ O%%-,O]TB*s;?Mw+Pmv{ւC)#HܥO)ih\LC.!K'b1 HQs.w{ϟ/2Tp c6#s6"bI)i+˰exVz:;9 sYAnSKG?vOW{$a R*ը1o7l ˯WC^kh+qf7 :B|J+*u}B2#PCѦˋS%e*:g cCh܁li) -`Fm5{kï 5!>s^sUXt9UJ厓7YΆ-P7 $*gz0W]yl`\:XA>s97<5'&cE=ffӕDdyix M8ZH6."4Fm Iz9)d1 ź F+)mju@a7gDfFiUcԝRڊXxi>6|XG/@@+$kaQbќ0/nMҋ]%:c!רZTxY jq4Fּ]Xyw?=5a'v:u]㌵u=,"@n9 $$!+E@AHGBBpEA."(hA P뷙ӗ}Їw -oPEiԑ9qͩ[ q)Q<\Uh.gY}WS(35QEJYj)zS h/Pk<^~'?aS| A :8}F/R+|cha - 4Y^HjZU7 -[C1 ?w<}Aw{_Kyē]Pmp\+ؐ- TźˠRVYĐ[tX;-i(i7[9GPq4zg6@0=4kֈ\c-MANTij *A+7V |ZQ4fmld/ 5@ -ݽ#]w̋Usri07mN wˌ|!WQRQIc fWlerU:Gg&{ q? -n. |f0rg$u͚B869A$Vˊ:bVoi L,EUJ@!Og)Л@v4>4=A[+g $fy4"nv,9r1gJc:5J-AYL -:J匞Y*ϗȭy5Zg!W6@@6,GDOMBӆF`+٘^-+*uj/iuUcnC9K)7hsz 5]Nٰ;Td~>TJ4& *ow} u?zXcΑggS+~P2u.3MV&*1Z,_e%I#\iPpYRg/PphmsY}~'kGs4Tj`ޅX~>3en؈24"y 'ʸq~tZh/5kofصOa8s߸F_$@3q˰>'n9;7^^^=1.5?jD'_X,D,Qn?t/J\p &w!ב0؋gTStZ*j| D„=bCB3WYx{ot}5[,w$ 4LBA#oaQQ\xąʈ}IHNK ȇߠ Ke's}*_};v$p;$p\,1~ ?$ - - ! -9~|?}SRwp^@YH{VDrqQ"Ş'VpoTU$VdDױJtzt -*BM"{i1a=~oضR[ Q!q/eUV.yVH[(`IʪYL 1KWiE2c9rg0]DgQ])ܚd]ѯWiMU}:o@:vN?ćѱ@Fq?.[cT(y1oM70œh~8Jh.#lQDҭWF[3j;E#@O<~.;YKhk&qtd=rT}J+zPUX}Ψ9gTz<#8:<1)y/%O$yevUm:>Cn^!R$,@P18Qr .eFҺs&o|<#AD1@q47剜_NJ5yvAT8a@Â*2 -hc^3~13JEi颸r!:Aj$U^NMrs!&xt~8ۀ>4@sWѴm)9PV-kQŸiP8SYFR4c4Kl] IC4<Q zás!{2 ЅfNxfKH~JμΟuF^4܊prfJ@г:6BRBd -Am-[[ꍏm@Ch[kd+>~r`vS!CkBD+Y]d=a&JD;Dlw؛7c_so` - y툈z6tk4 6֗7Z *-Kآ&%ת#qfB׆cʡ2 GMTC?.X [ZH5:Wt6譥dUEFIҬŋ(ZǗkxZ,z0= >=P~?Y9=1y~4tV$aix%A!jLsLdEԶrV!tZQ<s`i ,{߸?xQ#/Ne`%zyx+UnGz)xVY'iNCV`k"|FyT&`y'_z>#n/F\Lz2Cs/)Tb%Ӌ\8yU B+|Ȫ/: {7Ӟ޸ho;A[,8N(V'O7* xUzjޝ;Wd(aCV%l`PPyp<}捑^gՕBkQG5wa…g7pkŭYlhd˿L^b/IİK(9w} ۿy7S[Zh=(L0~l.}-ZYn@."@P -gSDFd{W5d˸:n8 \o3K>^=ݻ_%%4$&8 j%| A -oմĶ^Ƿî:fԌ& 6-LzH| b?ӑu[}U -^^_b6QYU82Tݘi-434o'iͩZRn -ZoH͟sӹ?}W>ߪm7 -b#1en ?#s"*aQ{u5k ixtJK} -LjH -0}0:[gAM vtv3tљvZuծ]uC;rCDD @ !`BBHHBr;\BZPXnŋu ؇}f~/76ذQ @Bbh\Yuun^R! lQwLs6H-M{#RpRʒKʓ7k׌MrM'?gİkS!" q8@& xw3KsޖG!禼:􊑟 %X~H<齾vmWkaİu~AD -(Dh>F,AC~I)o|J"&xŭԤǮ03bgF}PM}3-z[6|ǓoK@C' 룐A PtD`#c{xʢHjl80bÀ!s'<jc/q/Ӄ@ | -8- QMxFeU>iHR|/1{.K<['-<+AIgPW7 K g - N H]iD/X"IYEMo( -g]Ytd_6]8|pR~ =)L}Uz{@ yf4HsRA:VPRX[CYqDu*ܹr. Y%3XlsZ~=*UN^i\U^,t{gP5y - AEr(ӣAeQq>IY`<<)`?5Y^2]b+0gnϪn]T_\Vc/=˚%>x[@A#I=,-B- g Vm<Ǿ_%߭PfZewJ-۸?{5# %SryUC ݠ>Ф'XʂRlFyCrsTI0%ŭҐǞ݌!Wi KFMvWZfC?]>jqF-VTyl?d^6b#Sl0bYKO̹4KftDuE5spx!DGSvWLv|j'mmcUZգ_E&Ѕmc~0 ֑ܙyWk:nv}þv sv$4y4A֏K磻2nuJUaDG222qwQ؃RpaWPgM/ uLnmXivu:3_0%yN䍡I/ɴQ:8nj %bP,|Tv@^@q;$8ΐBOGhOtP___r:!͆i`=li_(x1ra q#Ь$ $v@mdx8$ F{8 -;("a)^STS 7 -Ә>ɟAdL bc!3쨠bUom`kRS2i@1ȏlr>>^@=͚#K+ڴW+lc4`}_81CQ~u6hxF 0l? y;H !?)|$Y"3?iV徊H!fLSI̝Itx#{vMH!!M@0cr?H+e.%fNMcH͐/dLk V-I9wȫ_G 7^P6P%Ȩea-\`XL)jYFX| ך3"紒jro/&ꀣmjv;!NzA1 -1+d)VasYV.o*X0N?'Tg<'TZs{ZI=yw)=?S4О\ p|*N{?(ы -Q#eMeXqiJѳRSFz9XFRwOMnUzwOqKqOVgKx}E5qcu(:ʢ2 R^P)R @JHC"BE0 A\ gnև}99? ^!HyYz@-F*#1KcH9}b_Rh2/s/gf 97y7 HPa 0WRX3aA *v=A)%(j*5ybf?7 +@\MH@2 P7]APeB<*#q -r|h%x\N/bz|VViè- -5(n@ -^$k -$ub -wkd߁zf0]1>F)\d7KheRUr:[Dx%2Q5I%euaYI+tJ^%(G-il \~NSyU0.FyaM𔋵dCPq d&؜L,QdJ)BJ)dB֋$SC wNyߧ6Ʈ6/> -qJhMIlm"Y+q &WQ%+ŕm -Tbs@@ӞEoܭ-~b0䤶2'rą >UepKyBBc^3XVVIqUz1 >7O;AtzB;~ICțF-LZ,8GK(^4#J]cz9@YA}O_\;nzGPLh%%lƲ.I*\Y(ؼX%mK$ik ^-!Bs@i -?lu?ov9цwD%HS2{31| -n)c!5*!/Q)Hj&I A |sPsp3F>M/Gl|tĺκ>mw3ȭUNӑ98żbt,Bw2IjVs:L&9Z&9&^ MaݕɤvOeq'Ey+_hbh'GDzCȺB(kAzE*f5Ό0"4ӌ)ftPnjXo]+o?سB쨅手e36M$Po(u -v02`Ry=0^G/z*TN k㷩a#3 -sr%ۿ -Ve ˴?si1ߓAԇaqIw3SY*v5(Y51讆to40xQ9rl|Wӆus^Y~mKw|NQ^#Bqsғi1s̈9Zn0/GϷ`{|{cn[:6-2vk-oVZm-FC q4Fcqƴ(c j&Rߕ}L{#}9,Wϼ3 , S!VCfi}ؼþMGNK?z8O.{—`bc?[BD/b>bSPo93){J<#}Yw:W@F4 WAZY۾[hΪ8,v -]#xA7̀}@a zZ`C? O-"ܖ#>65ڷ;2"{+vM%\ -ypI^vq2_gQMg9=ǥ=Gg>(*(Ȏ;Hd%| ,심@EERVOU0l*wo{_;Ci zCg н|_H)Om;ݠ0ʃ]ʬ_Y4("65p`63q' ܭc~3!>G P~؎wr+ ..:rN@uᎅEc *lظ -zHMQ xzAԾDkW pN8t8@`s$@fka;PYln "b HQƺoc.᮳cً9 ܹ11?` v뀍5}wG!Bj/YD}鈿S -+5wqY.棇xcy/q14o(v7kHx AAn8x|A -e=1ı.${5pנq -&+0ȋ9 55l eԄJtJ{UK?Mj>"k>G>EOsE7ڙ+2k1`0)쉑KxP{ -]D#؄t -J2:xՙ&V"_8Cj71RuӲ -6YPsMҹ>jY,BOz;[Rd:MRhg75V]={__Зsbc kAENBv?k|?0j78H89PE --aoPoꤜYB#k 5*a\pP&k, -E|>O<3KbXC㟡m+y~oߛ`b<&Uȥ\59颦lY€VɋTg*uũ 6cdJ3Ft@6cv`^GKq;}^] -h;c;H N]/eS  VUfRe $7eMZYWF0W-3|@oΗ l1a ؜um%]V;B=vB\pW-%\gKERSy*ʐU(E_0}&79 @͟ -S߮\tncuO:>hp{+!Z#9RM2Ǫ* KH)T*mN6M2յ4\DgB9_2?B p%MumwuL@#pBA^ ST::8iQimlY"YY9}^Pd9(R6 D)LI3 %8)|'r2$E9)yW ro?(}Sӑ) ֩ COǥ]%c7M5Y,iY!iFy-_RM-ϻR?{9,Rl|RRF$5tYqE7 )ɏ<ޑ)  Y4PSF5;/xWg-^f72.ԊU!AyW2*R/}8Bfzc%9gʥAgjĥ:NwJCrgECzu6Wzsmsw~a5eJmN qȈԪkRbWH:&*_V/+w_rDgfIkU[4Pe1vGO}MO@ٛK_omϕY' YwFHNM?x=G_sb:Uݔɬyɮ|ɭRAb/+զtU|J -WmR}mNW)6'|cDŽ6%ňw3\Heܩ%w_J{1 GV(d2*uTnVyxիE5.vmyN5ҏ.b< >oDrZc}[-U$rD$j {.TB2/^#.SjПS3gi{ݒ>'Oqb_B]\~gݑ&ft{w t\ ꨎltz9)z68D WoZ?u#ꇗT ,iCzҏNF<,iQL?ЛO`S,W}ueyUL+vS;3$~S' j#*eߩ]o^T,7Y+O;'=#e4@ӑ/rdbO,B&xȏYhuX#wvݗ -C3깢L!rL:{NFN&&%ST˴}P<4Mt -/fVwWkS%*4ҩǡ; Ra:6p`F~ 0cFnuF##G! -E$Ks@9]0D Te8v,`X` N70I>~ r>ę["fȱ2E>ރwf6uw r3W)˕ 0b -WS $x9[LkpXBA{c7$;C#@!MO/ X/AbAh)c52 -E0"Z+l xj=ir$5w« /Urc3\嬃hD1w!av%8?)b|Jؠs~S6$ o=OQ3MAdpm:f2ɷ@Hq$KˡS YeLT~Sz7I}t _(Âh#t! NuM5exuH،x1bCp = Ȣ{v)Ki5)Zޤw=@0A}N7PF,`Ȅݾr<`&OlX+m$9CiFg#Zd= ̠W5o*oQ+~(F{.0F0Lw$sD% lggEw:v/@2ڿ.bϰ=l.R-:{RUp#V$BB Y$9Y$0Baod(PW+^!,E^y>9/yw}qzP!qO( CT=gd W o#oŸ_F M"#Q/IѯȷP(7b5. 0w~B~`9PXT?9; @X\V?, !tǻ4̡Y%ԴjH#uz:~CCoX}:No\{5MU?ͯO+r3nwfB` 9HY}LpuD(09ZMF5M.t+y&A ?,'L2򤨈2% `uM%;Ěsy~QC| %'bzjb72zjRXMI\I-)'Kb mB\@ḨOH8Ww~rCsk 3s63Q64r6[!¶K&~˙F"D]?L 49.5%Y =7pH`1],Y1W|rTMOweC/0m|L"H -Qo\JhKٍU}_6HϵIӹ{n OO?|{e/ʏU{Pu''L٠KT2^fq OhgK ^\RQ?& -lLjwxѬw݂{"YMв֞\;Tw}˄ nʦD֤ctB5YN7)S92 C'NEEC,PGI1YR PJ[rY¹}'}K5Uv Y/Ηg1c|I'SCR(NYd*R!Z2_ɞ*!hTAc2px3H]}=@]_Y0^}gwt# cOU EttAVJNSrY&U+UJJE1HaU@5ikwxN|ҹk5zC'KԘ<^-j3$/K5u&-Qp5 J暒Qr4rn,Am@7dK[>Tluٰ}së otxՕ`ߦ*P'B2p5 (\R' G&w5\gZ׻^<|}WwVPr9꘩{.+a%R!(Pq9g83mRa. $rt >SWV:rk>WX}rKEGK 2؀9ZG@$Ub\TDc+شB-h.YK}6(E[%XӸ$.wBly; -OU+ڼGr꽳ݳҚ7y(n)(A=Ǯ52:ZVf$+̂J]#EOP)=@/q֯/qxpoӡrΟ}=K+3FNȺ :VMi ӒLC5vDS7<]~QmP.rF/Pm`C߽yݏ:6Žў%GVg  uDЏ fB)7^^Lu)6Z2>u䝆c Ъh](VED$ -*d/FI - Œb#ngT-.uGܷ0n -B39+r?%RC]9˻RzU.y;w;l`Wqy-g?cS_iy=*| BKZJO6>b)MSXT*4VUj^cu:ZvctWn`>ӳ~˴[9N;W/9'%j:f8#mϲLviTv:^֚ۖǔ.[Wd1uV#eߴj%?Pbv$k4mv!&2yҶ]7tG۝8 /t)]8IWN0׵^bvWrRsLyc?=*˷ /m $KQ TL eP`F80+c_ĴŦXJU$& U% J>=r25j"#C##KnD]=q=ɑgDGw>ѝW!p|!ݲ7=^Jp|Rq^>(9!Q( HaY1!;BG.;QȞX?2n )~c3:Q/H&à r"d(|!/1B?T`GMG b ֶj+}<Aw#` 'p3nI`ǃѴ(ȦG@=# :d Ry=[9}Ʀ߷ V|aStD}Hp GP''C>i>ԓ}<9S|P6%_z=P5uv1 ġP/r. ܙIH@Z^(%Q| DJ/&8X`a:$I!a xa;{K!Ȉra93aӡ@ -eqqu1Syn-\Hnlf裆XT?go"aHi9C -crY3aaH @FVҖECm<$ 1n&x k&i}V3 #~{Pi کaa5, >.A C+Ĺ!<20DC:oe@Xu QS|pS\(nD{;rPo,'!6@f A c8Lש( _6 hLj] -䛙āh'#NwY3a)X<,a&Fc42Q)mkD,Bg_ ܒZTO.P&6+%_e- / _'E}4pR4Bo`,L\jV[x~IvX%=!+9x-7+__)[T-=YsSn\V/*G5f. 9sPl8PY^X#*EP.r`i^|onI)k-筮EҗvElSecM셦Y֓~G>A^W֯;8"߇UcPwGs-}5bc)pڳS2$kw[4UՇ5wtO7T]Kzuᔦp?VM63rz\?Y Brs9z!p2;ik#|r[a[!g=,Ʈlׂw1XWef ƫVD)tL^Nn?Γ8rFJF7qxg3Pr|UO3& S5`їƽ}/0~_5t<᳷9h[C䙆xO$_TN r0󖻍\g'9YߎAZ-՘MOd%LM59U}v!5J@XĖ1fGyPdвp.O80v9f< smOvcb8fZp(%-$T,,5K34HDuQP"KٗdZN<9\vupdi}{>Q `>7ZNHM$RCÆGda+2ZB'pĂp2SHr] -j yhC_K^hyb5b=lО# pQ,[8XG*cE_ODNCVNš)i8GU;ۈ&_HfPHZ!I!q"EmB"~>"pg#!(Ohg3aNQ4NB8kC{-!v,t5J d @T~|p7c1?#HKAo*V"t@' @ P{}dY7` -b u: Z34b(@,i!֡%`D(0~N} G69?CL  [(B[= q.Ш=4Bqq%xg`]y=;{5x5,k 2)Blp'0\Wx@c2;U ._ QM;#tp[\6scc~pG{ÜʘT e0} 5alZ(~'gYb.cny8=לOO11v -{*D̿D[!އ-L쑾h hśH 1%:K谺8|H!rP6 ca=,(^%~wBx/[bE܋=!9a grܑN6C=ڵQTUnE/?%'bW/wsᓸےRȬCAIɃL;8bXɜ!|n>sZzs~Ē7 ѯ4[؝>sQSYr_?ߓߑǷKWҋayu!CNF -;ڢ0xǡؐ|Ѹ#i{KcmJqkjobMZ:Oo tgw%;y}w,p>zݭB/M6小\!8D߲^7ZՐUPq̸%5:=iszGRUgcefobEf -b,g":z_Jמ 獡#NvF:unrsԱLvSQpxWZy}&6K&w*簩2yCgu9Irr{A"rYLtފ#oserɁ`{&^ɛu6LfJSdSy:qMP\Tee`KBE~Cb2isjrqؤϷ&,%!T ; (]@{:!PRB( R'DD H*" qwPagȇ99ߒs9I$(BVK S%> ~"^=7y^as`&ETSYAʨcGq'y3좂s‚nÔ/.w-XOlDde1%PD _*s:bhqИvN~Vqt`~xv>ǵ6Ç_TSq4Һ"މDnW49z)p}8EGדrlD@`VFExߡ³JdT=bH2`#7>"ak{?~л>;0y&6)!3)l09l:`9e̒ (FPyyX햅#`\/X˜pQ<cr9Ut(PZ=/2*PmC|zu;+lrJ'&I̩ZgTn$VlDt_$ X' ڤEmۓJper7ujRzdYgg穾P3Qֵ]SNA&&t.C#I.^hz-;XO#v>c>N6nkRlrk}xg.+98=7Q; pa``4ݣARP.F}CycJO$ ]ㅾjQPpav:MaC/ao,lfʹ%?wHo, ןDY\$o4(^U5"kUfJglYsVXV^ R x_md-;]:fֳ{l`^`h>jd~rgc" t^hXx@@!`CӘJ*䣃t'w9O~[=>*~fnsK;jZ|[=8t#42B/kd@su:pPQD-JSь6t7t䌞[_Ce!S -"gf(`*`Tݍ=.ne4.OH"Q(D'P\ЈhCFG t}JaFK!k.:7ict5A=Ș0EƬ_lWXi?M12qJ$ވ:&$*eQyPEY+:긺 (# ~| G E 3N:8ͺ;8Oz@5!8&cǴ -|5;Gk :{nq#x9g 8fӸ/<.ou[@1?s!p@3 if o^9-j y;Rf5@nrv' tR/2}e_^S\?zqfLxÞ7$>hp ANAF\2r6hjіI,[t;RZq3~.Ӿg\^3E&$ߑN_%| -, @`iRkCٽV@8y5l 9H:ff -(wĬMқ\?'?z u:Lw~v{ S?xJ;oe;5CB"/oSlKlYk3)Nd;9ut3{ܟ1N|ʸI/WIs >@e@>AngkJXO]%i2Bӟ֯eǤ鎣2Մ!n 1!ktkk:K7J?(}\[0G}Eb=l AdHQ@[!Mڮ{W{zn4yX)(6~;aj<ⵠ*+6EI>9?nj3qf K10$H 0<_^ ꝉh4 ]\ܒ\w,_!5{omwrqqQ{/3=.iH}!徽jϾ&)id`Oˬc6'vMUE]sz=H٤[ ע/Kj{FܕXRgkܴ?ZWLdUE7pQ=’_DőEQoQ3C:~AW= 1%ޙhFIiV V\-[SOxgWVS{zTg*|$1ZpqXqU_-khbOc/scs^r⦅sx!!n꽫QZM}y6Tvnj -Ҁ' ;#=T>)2U>(I*ي.Q$]qWVS4)u߀`_vP@cMjM給`:IkOk[ -lZ -ϗΉ#j3I%iCibVvr/]$8)NIC5Cǝ/: ;/1n&K `ŏX4jFtM@- - aPBzVYaLYㅘk|kObX3ٱ~&6r6ȻOOG6ɠDW9i"ӽQEhƜ ,0b*e9,'aՖS3c3{DQ4H0)ځPqE! -<Q=0i` 4LOt=.a.ʰ"aDCE4TQDU8 cPf([ .Rn(ASxX9xG r09ACڗZ1Jj ֨IGբ8hJ*\'8(>M\'ot b`8dLT;YR6*q~uF.J=QrNި?(KGyR$%zQQţGC1 0Vg်Qf@e;b/CxbQި$D*,,  ]彂w9zЧ[0OE-z c LZ` -c16\0j -#ڭaMzo0|?@uDЧj*[>*/x}P~|ݣ|ݥBY0< }c% \*fS1wM\H tdrtqƽ7jCd n]7{G}^kNtiD/5D/4Dj=|f~Rc5uԙqIDQ⊈ȾCHrsH }; - -#xZʴiZԱuZ>sx9||񐊵n.5YMAJ"KA 5 *#pL6#-pͶz7ӦJWn]Rc&S٥";H+,%p jHVJbe)Qa^b(,D y)|Z)qn3כ X)a zmVoRG,K)kȫvٕɎ|3LV&V%XU?@Uw(1ſ!1Ő(ZeW0Wi x6}=A{a.'M6eKȞ&!>6!$.ݙ[+tOfUUFW#ȑWy{R"wypьÝs8>Zﵡ7"fi-hgMoKKiIuHl7Iz7QCi -n -\+k{'B>p6?7{qevCd]@?ߓv> eЛbw8Gv廝xw{S;|)W[E?r/~V迒g9jfjk`s@=aSN3w1_3"ܑН]QM^i@AH ,!!   aȢ ѶNjkkGfܵ"hE .qj3/s{{sfW/=4rl4:&eUԉU'br(PV_}P#>NW8,9u >K~i]ԅ܋/a坟ÝyDUD^Rj NOD{Z\oO#"V7ЊwXN)iQOͿjr˹jʺZ\25/$7'6}&o 7}״Gm:i=ic l:;wP^Ս Ϳ㌊|QMD[}fpNۊ<zǷ1tmk|cm_blԶݜǸv ?6OvwP;;ye*pALdRԩ3vΰOJuvuO*vt/v^^ٳK޳[s.=͐^cHzak=U>GhùwK[w@9(+JcԾ"_L+)qZ;@U=h̦E;ȇ#J$ëpKi -נZV7n7ˁp;8]~QBi8 c>H7'""zBJ*'T"}kC]dR!EBXd/48pܑ~p֑ ͎,xx5quoC('u"4c )d $L.9t?$\0Q ‚̷C|n Pݠ}f>g#Ѕf!8w - -W(|!g5q ̤+$a.9N )Br=H$$(H-@TPiwgpZwl!_t1 b v{ cbh01dU!$Ą Va8*Ĥ@= >re(>/}K _2AR]`O!tZ -WR`HR~E$bP -ev0CKq'@7' - r\>&@~ aأ+{X>߀8rɀ7(qVH pIj*$&9f̙!vh7z+bMDbGd*FU'9oTת+-Πӧ<S@?IH䓐0)IO0M_=_3[|5略3h5gx/4x57xk}10=c ֟.)~ HEnZ{4:ML5y$҇V'c0l{nj]^An}SwQDMЮ$M|[:A8n@,ҘHB>#/~|qĒ2U<}̷;u 3+ޣ&Op/Bh3Pxtp_t=ᙨ*рK_걺I& (NBQ(e(:\ Ź77ǽ#g={ U[Zm7SH!zʿE-!ƚ+ƛ9ji&"N}} {o7sY Rʳj)s\ΞMoBVkNŲZД!cR֐ȧ̻$VqSmDcYi@~<4VJ' s<0,bK%!dW"fŹbR~]ʀs> *SINf패';Q̨<Ѡs,AeԽ"xBBZuh)MְBXRȶ[ȯ)\.<9q]QMi$((H*"@V,f5@ !LK@(h5x92NGǶsȇ߹~z}c)̓*u96Ϝ e^*3WuZM?YP2r}mob ZfkVPa~RM|%Qz|Ǹ$~(ŵO%n -%ZnUSOPj8=G`ߡ_ҥhܟ)<fA%z)U#%ܫefeE䶉ò3. ҼMBZ P+ڰ¦9$P%+2-%&DqlZ`ߗ+ ks9l3k2"Z*?﯊"you@+a{6 }jKKKbA*huE!j iTo5&#YP>e~L`C&ZSXQr5\k޸qM>ʮSkMmeCJ)׻_V& *W"5QXN< @>Bsoh\!B-"y3$0T`½z5:<̶ɖøPFm[ÉZUGJ>EMʪ|oHY8T*Wy-$W6Ec-sFF*"odRJ,48X`f:` -ؼbt̡Bpק{+y~š@~,6<_ɮdUL2d tt[Z?tBɐ!䭐\oJީr1p {@0uָ]r]Ky뀨1dzX]ksTu -BV&*)LU*CqP|Ce¬Aȿ!mpLp~Wy z{ô1){˻O9w&)HWԖu㕧4K3!i03"Y3JJTϑ+ r|ȭ^:OuW) {hshF}p|f+iZ@՜#H1\%wc홗.:3.f$p㦥NNzj5y˟>?}?Oq$6nfDgpG p =I=@+B;D7xxK>ؼ04+6g|`rŁfڵCk3eO=IW_zFοC#fwv~Qir -os+ k cLV-&۞˲?f`;Dx; ejgA'зhv 7|fkg/] z ٿկ{x`),@ [ߙ@C 8`64f1ƳGm4c5ȵ4W+jv8N Z] _;{ z LpA8"4```"pP, RFC` -l¥zb'&jA'^R -4TxPQ HG</chm6F&Vjr -l&e -#n#D -eSNCCC@:*"=S,kP%;LQRBlt$js_%nsFΐـ޻9sG^xWSo-Tj}'润 MuyVMg/hF5DӠDdEa0$L!g*Si=j0DG3t9G.ߌzFZd-tm%mӅZ!?9rNGؠq;EQ=QGNZ (M4LfΙIJz{zX[3ح ټkqyVcW\YgCSǟ"8(s9~P~Tx>좸6xx!IM8JEo`iǒ7g`Yûl;x -ʩg[at5#}!UgєPp6i 6-)>$VG7yTE_UF?UcP=LxI ds0<Z@{-ΑR.¸j8]ECF.-D -ǣ_:N N&!Ƚ2~"RVws܏^ZqO%(ߓok"!dc@13E4wкXD]c[lظ ]lq|,úՙ3 -\+ֹM.}7מEIRN+g^3?*I1ބS8Ä́!9&1<&_b7r2Wi1_ì͍dIUTfgT6k^QIɷ<^3{{j϶:-畅w_u+7nJG騘=C<R}ZVry^).jpdI*/Wy`vs-q-[ 5gdBV.YMY2O(g6yK.omZ>a"^.#NzK\ g8@U+beV%y:Ewn_Bu.Ϩ<PD H)#LQA,"tІFpF RD *1XQp]f%'nf=G}s=WR*x-^nAIܐ84wQSQQ;aQP_B61xCTT0^,p̕_-]Qךnܔm^`UfWH+v)OmRIޒ)ܤ޹oEDBLH$ oA26.98]pfnt.*[;hQ]&8+e6lDzBY[Q+HouSEg|2R>H{-H#BK&E20\ߖpQ )qXt)*+4W֕V"ҭ &ۖg:J $\IN^vNWFv -h[i Q^R"K0T꺭bQ#U+,-}).$)" -&{d1pq5k7٨&+46r5 j:^q:(X̝),dEK9wkE5/snAph}OQQQF_,Õ2ڃJwfm4Յlț5{V5d7DbRd+>6)uSu墈&ކ.uCq~hН) -Sxgz7.^܃ZZi>5Pt:2e^iRuI*Knm7rKs=M2 JnHC{p OpCpC:=zW? --4 ]@e*{磤ϖ)sg.VY97[pp֮(f):v!;ikw۪n{B.^R=lRMPzA]H-u̕IrbVύ>u4BcuGLBd.XPWvﰢqy7N}7{;s& 9:t}C@HĶQc$:2%@`u#BF6_s*ppqp5~'[-LjL.7h2h1=D[!b܍Y?.b/Qߪr#icؤ#7&s,17]Կ+_6dǁ\DU#c$&3+Y+&lU}'|2爦4SJM&-m):S]{ýqwx+}P2 -d.W)6ncmm,m -ib191 qBG|KV@E1aɂ:3jQ!9N,vP>'Sߨ־XԤN]O}&gI}D]\wa% R)i~=>BO͂82ٙ!.g.CX~خe6JlQ*\iTS@H.!y`b FdA@A 4 aJ"cD'( -(
Pϱ+߱}`:{uI ,c`#ց]{I|OdE?Xc{< -8b¯37*535.ClU4-B 8۰::paQpڱX'v1e| 2F9#a[ lA{̷Sɥ,s0\; -"_ h@ |9 fрW2:pb5 a|'&Gq b{̽D|^'Fa7BMhXt'=o) <_YؗڝW(5ܞdZnQcU!-[j!.z5{%-dp_jI:Pw1 d_hwWеL*D:臕fJ>Y)hץ(Sc +e&Ir2j}S_l_W- TC|)3I]':&ͺ(f^zLd/.XBVJ/)y+nd)˼hYh=w2٬ )vQ,yvi%)YaYYWCoadbτd`Π6AfҊ`u ؋M,hSbE nU/*H,X%%.ls>abAǐSN7=p w -%!9kųx)-vbE8{`u,= -*̃/ŖŔ fL7=[+"|WhW+BwK' ,:}mDss^R(shRX\)wPCTffU*'EL;mV1$bل-mWC_^!S~\[~ uI}q-v P߻`G)@N9@ΡKհSk -km N3<:fjm0ormڹ55K֤Uk|YxWWENѨQ?Jw0%wrf@Rɼe%ǘג3Ly)P@w_wOqץu*N:ڕyw[6~_U%1/;{xb ؅>K= c.Ul&׮VsǭX[-uMu^uY~%U4uyqx"*ʡvlC5ިxxŃJs`Vm\clTf3iwNl׶ݴMnc3w<>]لmqN -`TRiyFxs.q|r۵yyo띭}w8>9|nrolʖҵ-ˤe=UΧ䋜o)`"<#“QZ2\b$D+ mk ݾKvxr~Kqf(/]p6Q43` (; e /r*x> ].K< ^9e>gx:,fٌ M`tWDL+p`_+ǐ5|U"wxP w`EĄ+͸EQ"\!dAל8#P ܆Vk=!㼽ay4gTh֩ȑtG] ;z6& -,}sQD%IV%~pYJFii~Nu?V,'ZBsS` 9}yt{\T_b޼1zDw5Q]_Z|#x~sKn)$U9 48U*婄\C"⁒RX?"ZB =zOᨮFgyfG*˒V{3f{OBlMz 4eεFO >pZ`JUD/y:Ľr y̿_ # C{-4k-CF(^ԽfjppQ0f|7\^a3d{wUҕiM դ 0ь]}QNbWT.ŪUV^+1\"h:еg=Փp>j --b oЫ*CH׵Gh(MAcj1:QLtwxBOg tZf݈kVߙ^b]jP!SXIsGN/l7O3y|-0?a LYB6b>@p-3(.7RFvsնD7ó2?YWyĪw6vXhŽ]ٖ eɳјJgg]ȳfPQ%L^`}a`aQ PD0÷Q )Fal7Ls:q&3sޜ0e \[%%I8ù s>pٴi -]ʞQK @ ?IoUWp㠻6DC{=7ff:47BsP u~ڪ`v? lo>mnVGA '&:n1ߒBӡC U(| YO"$=3!Q2 @ׄBz=HfX0IF)_u@wPlP ( PC2hM? tB"A -kSRsӚEs@a=2`8Ȩl3q}JCHb >$L$)^>8qZt^wK-uD'3Ÿ2q'vABpaRNH^ɛB~ CXHPCnnDOZu T 52^HF"$W셺=W3uЯGnj6{ΆF.f#W'~#{;֫e=֥?:CןdNvå_…VW.D.rah+i 8Jc=a} Xa2bak7lcwݿfwܳmЗH=_2p5YIr4'jqbjQ3o7>xDxG#G퍼y13K~{ԷofÆ_$TT.nTwR7\v43g7p$I42w7y Y<=Aߎ~m1[b~(h-hHh\`%li<?"ﻝAtWΰ)83Aq^aQYpZӀ4ۥWsN)LjK$4%Ygu 煵Dğ |1SPk_yd`ZT[0VFr2zeN -K<׭EhJ3y5YxS}k]|tDP%VHEfuIcQؘo1}c%殺9Us0clƐfӧveٷ͙.J[}FG]z%WPt!A|BT*˗$S^X`EаtP7)r>0Oc m@o6Sm9`ߨIvV8ת\+Urg̬-l/VʣBYNxBKdń3_ ܣگ逋"`~ǸCBGGAӢñG%8XrӜ+wcNg3de7 }|aQ$G}%@~HJQbB'Ry"es8Ba+z|tٰ֠iEU9H.%:!_YW˫mks{H=%Qi/dj )Բb-in({HWFG'5ԗ25e;8a\sI}iqp)2t|b -~VA `T;!V.J亻r'?$ -K߱!u="!{KsH_[p"$bP[*( b ݜB~xmuSv%2MYY^aS̃$0(8qKQ[Q&']%3ZZ:WtCY?֠ȺYwrpnvC}V}^8vw֕z&Vk}j15,(-aW¨/U V]uTz>+C4-(lA~*h7#};jdEqmim2Gi9%5\y볿_x,?:_/aa ճ`>GSʹ -]=m]]@^7^/dٿA0Xnb>/!W[cv 幷%ޮB:B:㦉fz~t.tV.=Q7![@$oGx(3͉OF"Ʋ9u5ctmim##?r>o<Y, Q}hPv ec@¤b=%F:ފ] gBgb=3) ΙmU?nqxkzq 7/ޜS'Xc@ -v>ʵ sH:D&u9_[sc>oχ`|mq2oTh3q6٬܍~Ivl?ᮝn9~Wc2 Ng9ឋ@e.,x p iq6.a]xj_Ǻ%,e%V/YUKʥ#LyFr6#Y,/<爯1E#T{'trcIICm׀759`w -ﮃ^ł_9}PV )x=χ_u1>FH}oM+@ lzx> չle D((`W% 1`A,H@Dņ(< C-O1D!ODQDĂg0;=;{9F 9PY0s C Yҿ#DHNb:D X -ACFr<(g3J,Z=X=OZ8 `] h%+"6!j&;@:5ͣ1n@hm -}k7jGK(]48Zw }0`W.e@~5Gn+jM :kRsG?:=@ON}DoG=b{}`]$7bu)bѽ5t?+f 5(F?C?b>`hUŗ`RwŮ`0o4H%$"H>)k xCxjth(m0k0QLɼLDcOWI%KrW߀|ExNyn@߅BV5ջ ]x)[,<:t6ᑬt7J+&BZ7pC]h2ehTsE9塡|(T7Tj -:U3PŸ@7QMVen)wr{q]yMWՌCkp^øZsƝ{=fKm`f9/c)QDy P+Kz?'\z?#qnU듸c>;sC V}ҮBܾUXfLXD%L3lw`φ1H6G[g\qǜqy,wy"y_sW8-q;-v\#,s:Jvv:;9:wlqfLm|N:h{u A!8bnqm* -[u_epKؐ**2,m7֛l1l5)0.7TJ6 W\:dk\^V2Yg`(vF#9. % }#cwJFscS[ŋ6-X f%YZ=_ڽXU9 ֥t'+mZ#PM88>(cEV~O8qT oDѺk6+Y"ʐ-ʑg{fzmS,maeye//L:}?>4sЬD}>͟Po ;`k@xry`A1Zѓ٣L2eit,ET-RBg}[~=h(1:ӑ (X2 d 3lj2|/N&I I?Wbиlqr1_5׸S3Xejf<.iSGCp" -80(ٯ[u^ȉ̘AȈҢ}QXqR9Ӥ'S E ]|j)ǻMk"-&1sT?pjPEq췍Ҽ3NZ,ҿqBj;(v<.@0wlpvL8!f)xy\ԨLȵ" uyGEuqwgfd`.誈i*e60 URUZb2XYK(nQ@M\)GO-hknQ999s{}b<31=uO\u]D1D[~:s[<ס='ˍykP0e P0I(HҜy2s&3.N#56CiuXShvNޠGGp>36o_kE QY|7jdYc?4bIQ4I\tl-4 6)1D")!ΐc/T+b۵ \z/NFŋ~>\3T`'ٔuy%&G,5E^rR!+ea򗤚a6IѶE -$}LR¤r'Vaܦ 7w 3wY`%Rf5Q|'&`_ԥ;I 2ۭ^8cGbt8Nşi kܭz a5_b[7 W`=.Z -׆]4T[]Mo:`+@. -L p? f' iA̓0 8 ׃S -{t{Ȁ>-fn)Eϖ:4@ro9tXr0y TO&`R3`Q19*hZ]nusp2Nm U{0C{2OAy -vP7A%PJ^uqW}@w&cN7sG80u -p>-*ka{l(H/xArA$upup}DwPA;6yDt3=S-iw8O.ձ]#Zr_`HD)PY^K:_KFn )kp9}5O= G; pKŦ@ ؋+p By:xyDM?} :[KWO21 F.~EG+#ɗK q_po-~#nT]:˪^nb -8K!N>C<O}'iǠd[[k;ϯEf\ wNrgũ!p/394L`""}*/@%Spk6\KÍ8†NQp: -jp2`9Nű yy9t>`:G}vm(/cH?5'Ip?P;2z4.c: 'i8ڍVW0.bfzWt[=h/ - n{h˸_E zyɓTb5 O7?OEOHhq`t Dg)`Cʘ!]Zv{*vkphsѦŭ!CΉׇ7OZ4gI{Y*w}? A/zPg&2S:Qh MP3}:5<@SnT6hZ4uuqUҠ%YVkNq+5WSHOQZ*HyYITꩤމ&8biޡ'H}1 -"'b{d86Gji`6D3-vv]m / %^^%^DR[- & +[v\^'_H {BWG7&3ҿ| )-F{lM16ͱhIbƤ2l}C<@,L\5G$jW3NpZzfyմyQG}*.*D=P̎NQ-xyO |JOi:D'mxZѬSQ7uOg x $>[TujZ*W+F^kSRΌUighUjP yj9n/L]ns!I!X2)!K CmJ,S,HNe'e%9ĕىeܬJiybLR^[(TĻ|~$A& \9 4{IF ǪXnZ㻨1b12h![\npI%\BZ_ +/7+)ەN}?&zAI(^s?dN~7_mSJ<ñ TMAeZ$Sa2s -[jfKS\q7K]*Ӵ'Ԥ1n},)F??2 J/W袙h!kS.s(N9]Q;yIq#IlĦ3Ein8U(1} -$pGn?cUk(b,% J,v-I.. Eu݊#ʘOʘA'GHotE,9g0@X3}9ݓT84ɬOOZqIP/y_,*ʷ8o{PzN-gߑn1>c ӧ#% iJ-,KRĦwIp^4;D!:gk{Re܋$$ӻ0 -Lg6)C8cl7FgaTV?x B\,Il|ଥҨղYeY&rM"<'"*WB[+XIYIoR٢M^s=\wD\C5`0D"83ƹBqfL7JHCvKCviH#iȆe!Ԧ.e.I -^ ̦{~F`8[֘B99c@"u(AxI$ %_2JF_Tf!شzS۴Ne*Kv -PrQ? -_H -\ la d5i!݉tOR r+ZJWޕeE9X 0e,sòb 3КB[m(xuQ!b#IY}XLa[8 l5N /xF6#n7LŖ-lڶ* joAe}u͏Dt##s*g16Jҿ< pnPBUNP6t>2 kgBCfQttR@Z| 01O'06 z? 'Q@86!=Õx-~ 0h兠V>xڸ\[ 9/G0+"<5`#Ha 8iAu#y㼖➼ ŜG;/"WX_B_-'{9ȍN2I{F(;޾^S@y\|N u'^5Mw6'݁t$jV; . ={\\ ry =f -0^-z~I8m|E&w͜>ɤDtح;DM"P2$ydIOK exJVғ;؀DW!-tUU񭸆2Gq?"G@ο\!/"o™89iͦ=zГQ3pkMrpqUFjFgъSm$3‘O"%Cpb.đh8!x ܒNuY"o$[ TY:Sf*/G|6Eр&E :=؝~@JDd j|<\5x]7\uK18 Ψ)ؐ<޷=||E>86pcQgvǡJ? -`>e TNXI(ћ`Pl67HCNI6ܒCHrCEIίx̲\fimc?p}a2lEa$&4lLY(6COBao/}\)A55J .{]8..]n r[ۊ(%*XԱmSӦi3δv!mӴt2M3Mil/2f9ߞ>f&mJ`OfO-'_Ʌɍˍ "ܱj}6p/{Vp\qz܊5)hF+" ӚjLjIMs"fÙ!v43gNsCܠ"\4wYSe}~@DPCܦ+;t/m"hUc*7'sMέdFNfXa젶 i{~0ק=hgnK.UEg_  yyBrpeCmnNSgcDǐނA}ۘ~#ۥ悺\noӝQ ~+BY_٤+Ш>BIN1@QD,60aL@ش æ4g"dGٌt*tUVG5U~B$Zʜ5!M^Z{&Mpݵ6W&dw*&]g] ] -+"\F5uWep2CiJi -zE{RpqbS#uEuSnCw}jwςb_c٘B5Y3xwZ. -וywy_sjJ`&FOy]7Gif-PO՟ -f"1j=d\?_T䴼n"[n~i~-J#0GLQ;;ZPŽ0wn)j2@eE~W9tYV2s܁wyu65WGyu7HJxZ)st~P@1лoA^nhRqp@P>CfdJ U!#:¤zq65qMMKr)=kJu.ӞF D5-ʞ[ -d!st#2ƶc8ia=R|+,a_؉pH0ç] M&)|II74eָLZqhcq=dLO ej=N'$$O`fbI"qH+FB3sH\3oFH28O1p#Mύ!Z-v87 dRLL=e\,'`f< )H\8شhlX|s/#~qxqo n=<9) Ch_$uh -ПfIH^6]p) D"\ށX"vŌu+XEJʕA|-p~I|gėPG@pS%gi9i%ҿL/וP1M}SQQB_CRJSNhHER !|dB29>eȲZfǚ550żmw\]繟њ@ҚCeSeSE؈xxu`E D994|Cݬ`@c\ 0^_o !(`$' NRp>ٜ69mV<Z[9ɭ u;yr)ɘ+ƫf0jRӢ P676 -}@R;Nl_lL:X;:8 u'F7yۀ܋ouQ`= PSy -*_6XAEl<sDw' L7;0x0ZSלV/R"ȭN'w97?=G3sǼBOٌ<݋*%_꺑aуBFqd$$o+%9V)6 *5 Gp-'.o Y]> C+"/NyYG(2ꬢ:lΧq&9[<`_Gz)s 1'#`uQ/Z)ʤN`uSJY1ks4r.f~/Ȣ!ӝ7:WGP3ٌV"uC.b,lN%3_gpqoZ躙Y<8I + ᧾dJQϟ0ԊhI>K\P\͜E140M\ts :k42JC斒e.F` J.$A"gѦV84%^:e^.R/NZ*4؉zzu uawc3vE= 2,wwȍ>6^X㴱;MI(M"pX2 ʏqPze6>WNbOr۱t?63/QmvU揱-xN,+? bIaJ.l?=*q|]?o쵘ݖѨ)nyfQ%*W`U56YQ1 ^GXmnzxj3%Gyg{GFhh:!m3;m}PcjQevlMv`7v9Xgka}9VoE{X^nA+'C %bY(zԿ=}bi}z5 56t38zc?*ð1ӱ#9JYXR<,u*BSPۓ C%(Cg( -<'bg$LCRimE/R. aǜ|+W㬰@=ծL?2ԡHWO,TcNiB:[H+~vHZENһ\b͡\l{Jza|7[ +Θ_!90IB|B\`/.> \/E(TL : <&JAigV29Rz)d>rIv!cv RC⎙!c1# !a ؐHĄ -ѡIBTh0=4W -mSL -'-kzaRYA#[]dK3f H0$h\FFhM04ᘮiBdx0%|09_#M273(Bj+7& -"0#2L*8y2T2E$\Ct2_ۮfFmo^R=|yߔ-}ԋRR-)>Ϝ"3*{$efEim4%wW^zQM ʶ&fPndXVL#1Z[W,2Z2cI>&6j!<@ۖh!Y>q4M`,e,x 9*#fT{RclO8MIE,%eF+amڭku!u -j[5Vm8պʭVU_Z-mߺC[[7䷦A-Vsy\۾HJ1eRl4^kЯBnfs nԢ:D~aj^)K`eổf+]M"ˁ샓4(-wZ^;ir) 㞓nwF[Zi&sMk.:⽏B8jijpkxju-HN~spRb]05g9#э܆AV -xE{M\0pvƎ4Gh 1.::6zIù:bQG, r/ֱ>[#>AVG%h8ٜh[mӝihml҉GccPϡ_ONIt=.9_9%tzuR glf13] &;Jw>%}iBPWf2PWIU̫8rf`Db405nt;xZj~yl ҧp>HKo[ȝkrf>7vߐ@a5쇃L  B,$B&'fѿHi5\Buz}M=żtC:~5V)@C(M44sћ 4棱XׯuSDg-:XsE]>c}X+]`F>/jh   M@'_\h(Ac{)ezO=lK59cnE鄩zj>^TPnBHȅ@B.@!B- !"BAQDTRuκεgzvvnݥ]9o|=y2|k1;nmmW׆p%f.Ōb^pe^wqbpGX}qQ,MB!R}[;q+67Dĕ8.n0np̆vr|'p"~b!MX‘8p1Slӛ+,ejwѽW6\ڔsxiXJ$+܂d'wc.#2-޺[b_77 I}O0vG1QݟP{WH{1jm }=]8c,Pxub'k&j~GIF(}Ls1.è( Qv 0 .E!qbz]BgNtW2)ZXKM於C~ʚ%X$|@5敏)pS=e勔Ǡd#$Jr#K*C@ZԂvenx:) -f$sSk48?&"fE9OO5_{Hcq2Kc^2F9)_<Ay)(ѡ]QVE9*(Mp+Фtl ;|Us^lcQQfU=|ƌsdL3NY)GQF@:,xphRRW€ - WzPW [jƙEsjN1Ǩ}|H@1jO'Pݛz49D&N7@9z_ЦG t|4j JQU*;,:7:?L>fԏ /1*Go6Gg!=GrO4\Q|̒մoѽ =?eiѬ_> Tx -`5\@mj#5uiBuc:NVefZq1^Tr*L#NKT֬`o+&&uh<͔zSy(CC xIe_3LVe(%dtSV@uʹ[hUIѶ -X6# D(ЯvB / ?02xmY/sd?q5iݧg&#?E^`!! rB*d lnFf2SH/!-|H }z+NRi2Bz'6@m W7Dd;灼i06@0{]1K%5edX+aXo/m` ƣP;612@:Xvp {KO"ޣbrϯ.˥*4q~d%dԳճ|$$;G؍=g~Iރs{Ecpnk*>'͓|]%5!qw4V BB%}lN:PBp$aIvg9s~DD$<Ɂ' =Q%_BfjDd{=YpN')|FLN3,19%]`aB.(}INPWʤ8xd8Du:1>J;돟Ч[o pp p&t;1({@}>np/p_b?'v5Q5M+[4[Rjcr}Ǯ{GﱷEsS{^ =9כ `.AFhC+qrCH_i!eWk2[EB ;ɳtUvZ+~~vuGMD]쟀F3A#bÎZ̙m e|??[#(FXI 5hHKS?(4HИ9hb4qR<_Zق5b.@dP+^?jFؤsbguC |h4)ڏ$/{;vk.rrkmOqR-Yۤk#ވ ?;@_e.hza}D Bc>رlÎر;ꔏ<-zUv5ZVJ*T)W x+>hv@Iy _bh4ICgV)B^fUllF-n~TTj{OĎ\봷hh{NC-U'5vk}?UV0īܐe-5LbCfaJh*w\*v:"*p~9.ϔbUnܜoGEچ{hsVDh_wTb-pMD(9IQ&1S9DqpŚjdt/ a44ztc-Mh`yн\g̣:0+*"EPEaeXT7( -.ǚb&Zq_c5֥1xXҨZMD? \{0t^>|߂3s1TG9y%41W1~PŌV1V$ٍ6es[2͔-WJ3-WAMJ`?fr1 6 k`T78bEqgO9+h`U9Kq&(%a,pFIJHc0'+ ?:cx#%S3=|K!1'tTN쉽/[P%5)J)Iq$[d-`.s\ŧ<+SJM2ZbSI Qg[)#Si)ZdQ5DJH5ʜ4LiK+Rm9-QtzƦoԘТKj0;1Ue -v~ۘ7m]Č~2g V|F2-cY1YVEg56@cehKoPxve -G -r+^eti)̇ ߶LUvyWMP*սj4ʳrUS99~nբf@ pWKXN/`^ @8)a3/ffl^˹-~**uv4{Wnuٕ-thFt2K` Py;Nn{7M.v77\ĵ7TN(WRjgpG˽_&h'?mM^!A918P~!0qGBAlp.|7ݾ\Gx`K:9:A$'1 -G f:GMhI ކ* ]{.CvyH8ZZg8 U|J}'|/Fk~Eo#v{n;tk`3?M—Nñ=]|m--M< W8/t?úB9sIm|y=C魇 -ЏF{ok:KkOB<u:=K[Dp\џDlAOЕp@F=+1ɤI *!q|@#q8մNjB)odJOXWGta(V2:h䳣:FGqK]k!*WmWxvjgvBm1<{/H.ΐ}"1++YO䱜LYvNATúuLM&آMG2ӤO<JpW0`6``6` -$&!IsM4I&kf]zd=Uuӎv6դQҺN:mkUv޷dz{>I}R/xW%^սŋ7Zʥc:\G&dQqXtS gb"㙏5;e2|+ -O =.V%?{ewV,Y ,de#l33a*pN79nek4y g((FsP;."7)R.JŎ].%Yˏg m K(dXѢV 2X4Lq턶GIPݦ2=Ke6ҿ7Q׾H_Ny5K/Ib$SCrM6MNJ)&X:@w8]eos[<7C_kҝ6GYyҾLh_Fͱ 3k6Tmqeioi⧣"D{(Uh:D,xlO}fۯ_\DVyFWf/k\2,'XL5v IM[aS4,d +48/QxKEDd'{VwQi> fѩ6n5zqmIޚNuk>VֶJTzx#f(-Q[仗G~C(7_eJ"(YRZ X;TvPљN3eՔ1[(80EQ`#.x O~S -U..HgI*1'k*j;ʃ(`KO>=&z(쭥z MIv Y =DFۤ~&~OF'dDwK렴ĔDPKINA? L!w("d U9@pA҆GI#ydGΈ$ ?KŻ$ }*wJkYEHM%ZcUVQ[cȘ06HD:)y$OyZ'$bcxMćOb_O7xG?#~<Ši1"ѡ5UIJQ٘U!}z I$m8Ms`/68e|/Hu^dD~@cL<0""2 -* 5"(Ȧ(( (8* -+˩₩1n&DQc%i[5ǦMjԨI44>99=Ǚg}T:++Hϖs''- ŏ;q?>Əq)S&ժt"_u~uyzYWz+TXGO~>/~طb-v7R(=zB>C,N)V|^)P+[]G9DFx!Ngu%yab Qh@#`52yi>ZUƏq@Vf*%cDuX;;M,$ǩW5Ġ1 -㱟LVUG$oV*V[rcգ_Ks4g [{/^g A' -hEc)hdc)E -ZV,""[.v._iswr# kG>>wpelwUSVw JhYG%Vu.ZꚢZL-q"|Y܊TVjZ֤y-*s?RwTcxJ1lD%G(1,V aAي /иrF,؈lCuR#~=;iAo m -1 -ǽl09C"J (EӸъQ)5UkTtFF[4b0dǼa1|`!vS\7ya&po -K#.M ̣>0dQvMvD}}GEepcĠ`Ԉ\Ƹ5qiFkUظ/MjzbNs5MSTk7IOsf`f{{K9YeIPfRIIHJWzrҒR%SJMJM]j%7)MG`A,W}́z@y>9JTqd2јTI)& -`ҧ)1ݮEXgޭX`>x7e8نV7m\30*ǔ.SR3(;[9%ʩVdLE(}t jK4l)w)We 7v2l {Emg6k|m~sn0(z8E BװH~Rr_&,K8p.+*.]tqíAaa= Gw1]_5 ͩPFs([\!k\>ZiJɩm*si-䱎jb`;6{[ Vf6SDEVFr{ 6xh$2.c}cc}ǹ}7TGKH1Ia1y5빑oz v^x2 - 3#jrK y36 Y+0;g6~K8N[ u?E\vih2@o!ނ18I59͌# </W/RK ե e_&*F;Djǒ7pjY`\ U -\eN>aFї2gl MVżuؠu <=w'-]U'mu}r uvxa}k}Ӹ_C<ω <74}tWE/JD3|t*Ш-6KANw}eE|y\Y"qyW(29?9<{=;BDzQDJ^Gt<ΐ))y|X5<\i0w|G'X4HG# |4J=ͫ O[;i$Nb''sqbױsqiRM6Z:umU]K+T(L\Mh B6&B Ć m0ډ3??~:w}~{cc/V0]b -|Q_75O op}$1s4WG - :kѡ\i5ϫ~j%?L FX0i*\ъvif/hGɋ*ɒ5Q&>d -eEi׸?-Ye,-5jԪJ-ЬyC =ij׌!ƔiM5a<NjĮ1]ר鞒ה0F,Yڬ^FzЧ}c~,lZsLf1;5mnДEami21˘F-Jn\U c>nzRqU Zju~?>./8l>Xz{f,3qږ)Q)&iU֦-,xwnm~LъksxUa -WާyEit-<3M2s36{f 5dw*nנݧG=9bVr\Ym(TO5wU:koÇgZI"r=I8ce^FːH_mUPY^g8[R&Au׎*X;EuTo͉[=?kh=Rioޡyd,}TckDָTߖۿG.Ljj7T2|[/iW?ճ@su~NB/ ]m|5j RC%w{jc@霑sE՝GT*^eٻހ_p7ά濏YjN~#?yJ -ZUVnTTeOLCS-isCO,| $[[&[=>Vy54ИVA:R#Շ}…rn1*bQe\HnUCe٢CFS]C;'Ḵ{Mb?9WY73hzϣ3N Aۄ%n໣RU_*KT>`RـUA6 j`#e )>s2/]_SIǴ0:tf|0^ B-'F)ՃRuPAED6$dLeHKɘJ 'w([*H^T^r*7C%~(cFgJ D H~hObl3ɘ*QIʤ&*Lժ ըT@aتuL.EL%*Pl܎3% Ce{ˇvLJmϳ?ݿ}" JH%:bv̠RѰ$H@phĈ`ּ>5&ym xyX{g(b5 s/w)1WΣ0JWAJc6ԔG1 #uơK?C"<˚eße.o-q3<{>Mzmx_ShB?ʹ |5[By=g®r'oϳ.0gK2{9 2{2r{ 8|oaׄnZr1xvfK04&{CYi>>椏 ~q>J%?A۹B>zƸ%9j]cF2ur9ACa?/~곟B;i8'U9@mcAg|FW(ćW$ ^~Ea{3ظ!'}q=/XRl $Ip.G&& ҝjKt>oKOlH1ӝS{7$ۘ~S M̫2ґZv>Ϫ@VOS;tF=ğI |ݞpOѩye \0]׹ i"'kL>RXf)'Z:%t,ev+-H|';!.'v5LqTa'&3iB/mt9.hXIdn9L?Ev( ,r5^qOCr1/$v9u&q'-[|c!.yds.3: -On1.̓ي -U2E|$E/"|,||\q7˺LOgTT2CeO8[S6[.R^/i8:4D# <4(GJ31yJ}P\M曓Tp$:`v [6 jV^?!=8-:qHCh(fSwԫMԡAS4>. Y2a ݩЃj -=!vA@{ql5[=0fO53\6;ܠICtgUaɚR{Xi Tkh79|uq 5D,P}JEnGBTaT,5VŶDٜ*e/Hy&)7U9]N%}Ik2*#\gsó֣T= W|$^h)Ub{ -Fʳ'+מle'I.;FY)LTc|Pr:#x>3zhL9eHc_#yVR!: qq)ˑLS,yJO-QZZRL#}R\ z@IGeǕ6|W<h5 ћȅL|}^d+ -W\QhŔX]tȑ_$4(c,J*t=TO\K%7MEF4 gR]AQg]wEЪ(* --, -BmăD3iFUi;1&ͤNkNc̴L56i֣c,d?Y罾}FL+`WJQdv|dȕQ Jv\*C ~;+ιOcqX^8V±`>( *id_+;IFYIJdT'[y*u)ڋ'/ыp| <<_h&q;(@1τ;~$J ~dʼnJ**@0 :3"$ * !yURxP JlL_qÿ~Llu1JXbPt|R.Fz#ìCH Njų#aKgpK-/p -PH9ĜE̓}O?/Q_µEgKO F+k+:w%KF.(\/Qu`;ϰ-DMT\~vPBsy&1O _?f4`9VAZM.?Ppxs{Ez3r [d!m\@̳p}jΫ)$C7XlaX?X6N`LM6s6U|RMySpw+TQ"͡|ի^3uK a·A? XWY -q/O=r, w}qKCM~'q~g<>,O ڙzb/ku?#|agD:a/Caq0&Xku7F4(8!8G䠿&M sA ";`4"hu&x`x?NsfO8)w /:r΄;M6HhD9pɈH#88rpu\,b%% -~O -y.!MwAQj@|ν:+OQ8|H❧I~E?"sphBp;C->Un3o>$}|QX5=:7j ~{=Hj=k? -Ux3z]W]Rt+pk>\P\fFi3[GP'^uz|:z:~CE0-{/J'i : A ƸE+Zd$,%ض㷋\DKè!A6]Tyxscu9/pޏ#N[f|a -Gb]m;V]a;l/nvS<7v#dr EA+|2;17bۊtf.v#ʎ^DZ=B]F yBz}d%,ã%2vb\lQ*'a{:sυ.#U{~=7QBy5df'ީ~.=$8#`; ۓ=beد~ ?:CZEKo -rzSL9q,Ǭ`#vpFHo~:b&'2B". -8p@wtұkuԣj .3HxU32_ Vq G-*3VÑG&ȃceTY 1GT5Ii -De=G(\jycm+U5qr ?'L84^zJKXk'/SIF-6X3k,!K.l-HWMbHQuOzU&.UUfRqJL/tBEp |'6\p-^~w[62UcJӔjTM3Te|S**7WUV㖫hjͳUk}Eso*!=pm`cmzk.|q⛃SbUeMRŢ -MI*NS5[ֹ*ZS;IyW)7urR٩O+fL9p{HC -U |w*_ԖTRST:A575Kslʳ*VDEʞT5#}2.5-cD55,! ¿4`$|e}oJx  b I5AI*;œVYKfnVbUQyUۺuն]ﶹ]n9 d'y^z|*|̍W%Yety-Y*R OGrjU(Ek -&-V_vl4~PVg~”߬8Ki̥*PfYI(/TzT) jhQjE'Uo@ɾA%;Ċs2T\*>W?a;Rԃ|ǤJ pϊ|THپx&')ʨLiԪP*JnRbuDŚXFwlU|^U կ+|DUݬmo W -TP *1Q -<|.HF3ńٴF4P(NiO;JN3X3.kᡖ&lAĵ)0(41{$f[3K7E,^mfv)##ψvl/ dx:4z0^oQ&R1&J ȵ Ny=/亭Mԃ>!g}6blS|s>imd7yp.]6E,`c 5YQ>9fq/r9br9c/[yfg0% .mm,o:HCYk7f-Pl,`'&'ߡOQ!zt~"'(~sbϫ5*]Msv,!{_3hl<&Bh-TlDŽ0 ň2=r?F(8 -a:tPuVr4%-|4.F&1BJg蓳q\E?OAr3!pFpvR#<+;<au:Qx\(.A]6}fJ#+{^8i=syS~}=*:+G /P]Wiԟ%.~J~B.i\:ops0^/c_>Q\f -4G5t̻jL?~ʹy -JCxЙOEh47jvP}hũ߄3,ji0)(' -L5{ #u̼M`pEWhT՟W<~`;۹v0Ŵi%mx} %rǘ as9jj=7{L`e R5:%.Z;}Q`O#6Zm/u؞{݌VlEݥ Te е/iVқbX1\G.t욱k.l{]Z쇰V+#]Lb -Y:1~6ktv 5bׄE g?RX a2)snM?ӳٮ:e05&9(Fd}{\,XH.&=Fڍc~t!셱ۦv,n/f:z43UaKH}$A+oX&fp:9/:jQ6LC8JdRruaĉc;ǗN8NvlDZs:M$m״ K֭bBJAVSV1Dm0؀A h*h6&.ZQPG'e=:3Hì1V*f젗 c%Xz>A4lsGX 㰔gKH ;;Ѩ$:u42to>.& zg=;6%ʯc³x/U|8fwcniL".|5ը\nsL]:Yuv0-WxZ(m٣fA,ǔVr vM{RaG^{jSWKVZliDҸZJJ[;lWʺPɲ1%(n۬mjS" -ۧ:\G8N -6 -CC7]'caVDY]-vJ~%uJأjw)UԱ@ 1E(llVG!~*h<G -W^k[KBzNUy9-粼u7 ;\MZL3v@gi%r1O5m - ջ+rW]'OWT]HU+ީJ.Uq}\Kryr{oj'荓@.pm4$x#FE[תסץjWU DJ[զ~UT㟐ۿA |EFpJ偋rPOtk#Z!kR]'D~vy*婩&.W0#gGڅ2j<4)Gh/òRYcm݆]h44O#"YePP\u9rWɨUy}4t'[d"kdlUidJ%#DN *\d ԿEسA,$!=P ˀ91B4B6Lֺ"og4t@ mM@mݍ>T𚱮ib8d6cLll&qc|-0'3/<~w4\|tzFaɪ{Yנ6t-#Hb3ı8VjXCc1dOT -3oce}~z.hE75L\=5-Ch,I5$so%{sIFMı817v0&;XTVfH3׆A!s++z ))"ö[/:@ndwt/ ıv?~ޗ}S) -kyR{꣯s"!Rt{^sk^nh -Ƃz8K!Lt?I!q8feep#TxplCN.a0UXR|e>oH])a0K$SgX'0ٟq%=y2ղ1@ۏk#VR+{ @^y3xޔT'Y{.o?$ %KE&<{ŋsgW ml}y`}ò{ސ͚:Lm`VKs%O,~ccl:W {ś4썓dŧpO/yC/s /d"oGG,~~ͤyIKLWW^/}_%Կ,jg'ހ Ufyw?6sZ) -:2qӺ{Esxq~&̳gcۼ8m~v|;׉8iM鑶뵵)F=Cݠ$@cL ILHCC􏩈C$PP}~{<$% ݜ73 0(_fѯ=MgP^ O߰y ކ!$=~7V!Rd cse e:#h$>+xyK+Dgt*sB?Lm* у_u]S25t,v#Wȑq?>2S{R#aCdC/6k*< 3ϋJ\;-[Cw6Н@wY4:0 Gt7)T 2d V9-hm[=c0g!X=GG xl'[p3=ѲЄqQϰǦ![[-&v؉c'vة`;fL$GS\VY<:ށ(Na |ayjiȓ*ʝʕ3ݔ=$[愬epf(Hicc{SP2(:x$!(*n?/UK/w6$gGL*)r F%O9s* rg}-ckl@%!4 -AhߌM-]N9K-uma*$MG+],ljj@iCePPo)CН$PnNS!6J@e4U6]?MS'hu>[w4qu:@zJʱ{-hAz<2Lrr®Y~ΚE~A!ah66@A<0ǀfq&m&А ឦ ]` ta/)q ĮQaE{HYaNaV6 3]Qg6{9d7l[ Pb F -*e(P*SS -J/Pʥj-2 ʴ:ڱj 3Hm-ɞt;oel?V~YpYKbr5 c̉ջc,NY{&Μ&38]p~ᣴX,k:gHL6}?ѯ' v ?mI[-~x;gr!q68wsΕΒmQQ]·˨#rs[ 7c?}&{vdVĻH"8sIKi&xA;.Gd##h^e~WN0?HH3(qe3~VpNEj'[ٜ;nG<$H9X< WU~H<^W^ef\. euqDINۿ^p᳹ϏU6K<`,D$+5>>ɿJKb&>f- | -Ol.>IQAaM2z 2zQ{u΢k~8 p ޿z]uq-l$.%~u9Gem~~|?D~bz":'~BiUh -^VXe]SNڟ&hq48Zj%v؝lj~>^n.NC)u}v!~D_v<mv\pǝ;vd`IЈ"v;;eZu&v;#bl/"Vc(p< 4z"%kЙcp_/;muiG:ў؊ @ENA{;ӱ;arXeQÛ rW+b f8S a@䩾";=}ll>B~ *YoaT1v|*8=ط{Lcz\cQlz+۱ݍ>l`o6 ;s:>GNU QuCt~1lEоkپ Tc ~o~;@VdjYdg:YG-e:5c_ ;~σaWuMC,lr2ژT2c^y;u£)TE G7Y.wmkUh9WJ4fy$;B5ur%X| EΊ}ṗs&o/E̻,HK}ܥx#+iժDb񠂉jO˓˝lSMG;lqf܆i I|HbxSGdQh- ϻ|Iy"QX+3SD~ -& y24Xr5 9gϢ)K{caq+X³Yφ$/"\Cedj(fsI>'ݲ=&=#U0?;ӼMvū_nF5#\O&~mXflؒ! ||e6;A+h9/)>O&d\25 -r73D V:HJW xmǶAlcoC%K"K+>|pN+=`hiy׀)ޅ~F5}faX5 ZZ" -nUƱ3h:Z+neJ;=HYB6BIH@P !Ѻ/NT;նK2x:ɇ0p=!?}f^LRpφ`@Vr@G Aw"0<A!\ŜԪX<71 1 '#hGw_C0" 5m ṫ` ",B",BPGbP !BpS/ t3Ϟߧ"$/0` %:BrXa`F6;XApٕVb\r>i:_PK -:G/Ґ9c+.q|h"|X ~5.5uбFl 0a|x=u04.zE4)x C$Hl- yױ;'jn i\ W8tl-бk؎nA pNlEMlaY6{ר` -Y;y80_w97=Ecg@Ҁ= бQR$Ή {P1j` B΃Vݕ Yk`Õ(,7U -U+'F|` - ^EMB@n/+iQ'B/ paT/D;C!XB"0cr>Q88/l0݊M?xy~n07|cǎ0q)SMs^(d^^2l/WYn_zWl۾ܵ{"ވ־o|#G?>3L6ğ=w>1)BY"D-U5ڂ¢CiTSźƦffpvv]|nܼu}ŗ_o~OD%}y1<\'_ gK"0X8d$ D0QPp)#`@L6-F8n#mO@zH(=&c̾dݽz~x FEyy = % G X'$`(,K?W-=C o"[ ;=Qo;p0ȱ4Ï?!Idr -bXwAWM1 0 -z޻}_>xo=z;xɓOkMuDT__ba~CٖsJ:CR Z G#e&\WfHKi h0a@À 4 w|kfdKeUh_ݯAųs94HASe *g)AxӀ n_ToO*HSoTb.W]ޠZA Р%4(ײ3n膆>nE$YL!`*_mԝ/QsР 4y"ySIfuaƹgc,i0,5pCu~S9Ѡriȇ۝+]xWY"Z:ӸdM3^Dv 97V0N6CC4N۝#>1tdBG*@C'ie$5hͥotРUrS!\ʖrz$N:Ҡ#{脆ƒn#Hi КʷkJ -A˱)sNy6K"cwgI=q:E+6 Zg -Uo-/4CTРa;rV(ՕБu9'_4qbf՚ *ʶ̅ڸ|5ǢT۳,8Ȅ#Eƾt^鎗{<6XjwУ-VZzQQYkF}QLVנϋIh4X$&}49߻w?cW{YE˫}?Q -˱lpWDL|rV\`ƉмVmӰi4l6 m{Pdžg0|ǐ0aV]ց灡F!ʺ[Kn۹l{`?)`oh@lǧ"sf\޼-RtɌ)Nm-në= -5e'#1=0htHh#EAg"F Vh•Ibm0;;6 7`2>A :SvIQĢU]1W B% OXoL[n` `Q/c×hޫF'Jcs_+!DtU3(˗vjYy`xN+1™-x[VJf AƻC),ȗfjkۭTkëK/ck$fLGz(6lj;^i<)7m}Uɰw>&t%4aS&Hsĉe!e;l[԰0ݸ/WioƮOW}/>{cI_ᜲks,p!m,g9@Ov.Rgu6A$Ⱥ[5X=ښWǖͯslwrl$&";$&,aqJ'=ʲ[_vwMæaӰi7X?ښc˖9_ 0tJddD'%x:,&rA>'>\0EEh`NӽGWpkz^`x +Wc"R,Bq&<$Lci7_uA[=kV};Ǘ/ b$fǢ* ˱\PW@i.wEfx΁HmjiHW#-]`0(̩ IHL` HwEĴϙqrxsvB@E͌:yn8~ ^I3mfځ6MmҔK IJ qCwI֣yGﻭѾobKl˖%[^ p(t4uU}\?ɩk3Xb?<1{B1 )ʠ)u -e;5+jK״4Œ^S5x{z~q_=a8 ie/ŴxXj(Q@ӨʨVf =[rSPԤtuEhx{~ {/ͩ0/!=k[8P&ڪY V $7yMRULMogn`##4n%ubD@tPf*haTIȚ^ʸ,oe>OUq x -"8g3h.PԗMЬ] U,*WPW2M~K(d+\+x{ڍ^o_=NioYz!pg'ئb -Z(e^ik{dEDUۆa}B{_k_ӜB3sޔJ(6y -%<$iCPMAcqd"mnf:p~0HA\^0K Ì*QJ 82Eg`*)=P3؏6r[h/w`}o羣=\[u᣻nj:|ͶoZp7ȗ|ImKu:mlB%a50as5ޱwDGI^{Ivx\/$ٝh cD,IFIdB#mZ47"TՁ>m3V?1Yiޯ-:B}Ky/eN(^, -юd,A#$9Z6mtoJZmio=aqS5ݾ|OӂSacO0.v8hx'#TQ*LIHLʆt ޜYޖ~0˪a -аm=ć“!A)# xB1B 3QFg2R!@ R`, }owYr6[iì+auc71'R 9#lD}qNܱqZӝNUzuuk@zWEAAP I\Bx $F$@BȅpAEVԺ9;m-ʶ?*9M8bɢv:jh"(VV@ߠTei4EJtLpavwk}n䅜4~1+=n*(NU -<L;sYINiBx6 -_sZfFGܰZ)HB':!TUr_JDot$ H\$\VQ"Fa]|VaG ^j2#(Q6"*r*&!i"$]0 k A]0ݺ4!>DZр/rz[IV-9~`qL45z]ECmdULDD](ՀOICVt^DA$"C V[+{$SL:Q 1hG 5M|CF^kʇZx3UAPi/  n҄di=ۊ~i+zd%C6@>k\OX["d>Еq]iB6gx;iذ% -gd9 $*MM//uxUakfR2ȕ\o`*X( 0,OƤAq.<1*; O[T{j8lQƒ .3&Ba:A8/ W=hS g4IC΢/}ڐ:=kJ]* *8l]Kh-nH6j &_ciS 3Ҁir`xaؚDy]Mݧ 1M&o -Zr-s.j)kjTAAdGO۸7`pHGܤM$Հ!o?f*wm2~\?h2b۩z2lnʯK @1'TYY0FG)2UhӲ4`^2nK֬f{}Vm&pҁ-ZwZܥ5UUz(ԦMjJ m3GrA A%h4 `Z ЭlVy1>g~ |y؟~uG? ӷmHozޯ'|%:WS 8#^87Ѐ`SӏT]=r{L&u~C*gN{i%8 dp?3 x \aheeh jOy`~RMOU!KrUh>Du38lj,J0pzT~ޡ{&`jmյk˦t˸("R(HɼX&QoAqq˓2,ah6EeX=7eNަ ;63e0uOɧ4]jnH"QRĀvߌ帶la,/1 G#Œaܔ>ehi3~1k<ʞ1tȧiPQ'5D^LRMl)l8q(˛G| 0#xeX+)z 9Ys{xJ1?o'ud^H2kq2,9ʄq00|hahe>o옵fϘ+&;jpQNj$ -%h>鵐ifqfb5\Éߊys&``1k{ڦ4vTᢁ/AɩYL"2B5=+ v:̂*;\q`r!=\= ycʚqOZO:ᢉ/),duPbM97Fz\Wjz{Be7&H΋ ( un̬uyP>8Z?]'[E(fjY1)QUoh"^jN^l^$oGs4o-Ҁ28>u9Ƚyhlu^sKO3;(jzIyD. As\5KT1E7w>u>3mu *].NQ!iWcZDX ޲=7B^UtpQ+.hD2-hM;[l'Apd:d;,{OHgpj]<5jT:hCjJ -]QI%d@ [[ߎA;.}߆w[|pRB\G;A-٤}SKUT*K0)!D=eRoh`2xo.cxk{wt#;]ds=c?bv> k6`B:EM{MDZ"VE -Ӽgwo2oM{ ireӇŢ#3PS - }fj;8wym>3tE`uÅzAQlnwG6{xϫkE7]HH ~5_8ɯs뜀gq+>~?>].Lm`=acܜ>"ˑ~RJaiVUXaS/%(\bxa@ @Յ e nH\tzK?Y)ƶX f#fHvuqҨFą^DJ +a]XH:$?y.d_Y«ѶOo~~ZJ^]rrj[Eۛb.A\Ԓwͽ xYbN8ww`{-CplInF'LǬ/F>-/,zTB^O>{.V~1vtnYHI׽{Bc{C: >gώP:}$%_z^US~nˢeϪq%kҔIe?R˒6^L|,Oxri' ޥ^y/ >9}Ǿ+22AnB:@$dPɈğ?Ǐ۠d~u9;3'ܝd}/Ds;d~>O`?T.@WY4v,dG$xPt2\11 ЧO| @<(1>0nN\x??G )eUMuƥ6-k8b#S͢v횮馐J~Ү*`wo2`i(`!8):W@KD|Ъj){g3Wzǫqdq 1>, Ay-"8YhfNS%o_%B)X7oǶ;LyeT;- DA  p[ZT ͷ4zS>KkL7tDa 3fY`l^{j{~8 &x@ ?= -R7 -EUne2^dQDLr9I[M#D%@P؆~?VN8 o @A$o @ (pM@/6,qkًxդfu㍼*d %vk\Cn\ӂ9Xgh ?)lń(9 -R7DkPPqKf9T$Y?. c(w 5A3xی{6gsv` ;llHklԪa *,ђY.I38aOr791fkpoui6ٶ0 ( KJlK-Xo;_*%/K8 P*cK3\iaY< r|^|ǐk2L=>_USI;İ 6mNH OHT$+U=Td웒rl+Z3! 6?9(zI!73`zѯP^e-'ڜ2a@d#LҖ*1:HFמӼ(/J pEHy,pWt:;7 ^)m.3ȷ '=Zs&6qg -6q[ͷOG$$_py"!hgT6! !E f_+Rl.[buũ@36.}"~'>]W6SL - 1f񌒢Su<*qOhfuqi6gAm8%h?w=Oe4Ĕ=1a$P[k匭sH_g7)hv!oFVϷ0&96gtdul`5( _YT8PG]s߉5{4;~elH&{aL0Ejm<,P2|sszl e1- -?N٭s׏oPʝ~w8 JW14Gu'C0VЮ#ԫ%JFWV]R-fE`%la*2 -& 7Ym((C U5XB~dgr[7h~ }hč87w*A?:Lڞ64^or]҆Xѝ&jL/RiYvCA)Tu6Ae} -{48=?pkbPVg(3]BGiK{hnzicgXeTCP T!١} փNt[>59w#;vމ)/)+F $ev+Ӥ(󻒔.RPtSj]Τ -eGrJc(D 5f&P}j-~&swl&n.Yh)YQtвE~Nkbr[iWra;=VCjRic.TڄjP E &P)46_.K{OkVW<>D:Ewa>r:lHd(qm6r[uKT[|ks+AutpP.0Vhaf' ,լR:!]: sep1"@L)FK%tەYݑ@ 29!kZb.zۖ7.nޭY["B>ߝ1cEGC z)?"WWc{5: DUՄ/ -jDA?iW7lZ7ʷ;[%NJd&Dr'IY\hR60r-ʺ6WC`}UI$P,1oDAÖ/V:eņ-`,oY/ݱ)|! 1iTܽشDιt^73h0!-/]6(֣5~c#턉ӗR05nl:CLy! a1Q_sOq!)%5#03g!0̃T2^6:ע4C_XW L: ip='>sCa@Ci4kP z#T=saTؽ;`fVg  ;`xN@vvG! R\!pJCPy8Otغ.̾߄?m?.N8BpDt=~8+[Z!H[Ck#`X 0- - "dl2.b" >c @gaЫ\BXK&=ה%?}*_Ŗ͐iŢIbhX<" JFA0(&~> C e Cfpc/شLVbJ-?k.A7_"NDˊǣ%cƒ1;;AͲ^bYgT2Cb!,OK= yЫ7DvZC&3O&L%Hq1|4JYqZy->i':OJ|C> 1d#LĐ3ѫorٔTÛcM'M$cؚr]0IU=uf# ȮZT!΢<0ZOsjӞqkuQj-"eA` @XB$d%!@VI %$lj@AA VG;ߙuzݼ٦$DbRfw9WiQ^cUT-U3f5URmJ*0P 5ṗƝK@ޱ C? - ;61|3$-!xUF1x&(bJfX,tf(FނOg5p}o1(f|Sv/%V})$;͚F.MeםuEmvC'hQCݢYаsh],^trx77n97Lw@,Ddu,B %k{=eե:uS.uܥʐt*ڿB۷/7&V,tOmx} o*<^DAxbyލ0>P,8OkĸDT6.HO:{9F#OV{xAW~%=3ϭ/?ulmWۂ%/=J=:U|?HdeP2дpy7g3w{jd8⇃ȀX <&(Gdl1?Ƞʨ13?3vjjqBn8J:j`G'`21| ;7`&oPh1G a}C )ȁedD#O/6 P{]䈪F (䠀Kc.#KqgKhpu?ŀ׊@ؿtAC}"c_zAW;(v@ہ;\BPn  :w#-ya~ C'z6 UC_ - B 9t ;{p?*NN& n -nlw p?8_QC< -Lq;FVk)+>eRƜ%Y8ωgz4Q0kMa?M47q1콌!} Xu;1pC:b`!7Ey!%x„LiRK33oT-"֋2$+Ill2_;$'I$ʻ厐7Fz, \ GN-M"EǚT`R%~BL&6.dN(&pG~H988l' +]mE P7ȌE2&GrpI/9iγ"Szx2*}L|DjP'^81Nh~ʾ}8K ii1U vp9l Z$N0gy4x2L6AT'f=$7< Kl#&s)' /S՗@ A -N*1hb d| Q&O%xΗL(Ɠ+jU) QS4w75}M{Ҁ6D6%h'h ĈADA pm|("F-lTže 'Z88kaVmFwII7 -i~~~}FY;A2 Πq@PB ^WfΔT! sF.JsѯzJrИk8W\+e^_4 1b ,oB! APw}A"NUqSJxBrR9aC۴s%Ime]+nnYfSV)) !cHɽ_oCP% I/ ֔J zP*5aniԚ>Z*|a98fkz.7q{ʹ=O@dA (F0aDY0H R'uJP - ;-ִWSXmzNf+2~D]nt1k%~fo2 0~Py]܊?K -ՉLMeQkj\rU[kתKmVHaыLzqWb1CO@s0 -&߷uasQOԑLe-ZyUqR+ -Ygԕ[j2ZkkU6NQt.bA&b#VgL{BPz7CF7}V3GvHwVeU+mŲ.5[4my6kR-4UN#rH|jx>A2 91PRo<݂x.NW@Ʋ5΅ʃvz!0$lŜ KHH"N_Ԥy=Hzg04Ay,Ey٬,G} "}bg}OXeeK'!vD _0Yǩo"ȋąs^kJ86׍z99`t2~@2ȓCByvK߿靐E?)ԯ&X׺5\L^sv:F"ed? ƿK \⇻)t{]ue5yn4nq2ueI 1@&d tGeɍRR؞Z`nvb, S!O" -Hu rK}*e:.װ~vxcOѥ$Z"oieLMoʲ@[ F{^ ؙΜ.zD{@,D۵rZ ?8rD݁A bfL6lL0V;f`Kdp3% d 7 l+Gq@#[8ko G-x -,=j] bOrT!H4dT2-pSbj'tC>ZMISs?Ç k -LDFr$j@#H$C!ױAU&46Aw'(vGUNkp+o5SB!JbD}ӃP*CD}qIE3 aQ*qGt7Z#`&gV[VpV0wEJz@٦ }}/DІ.ݐr%`U 0j(6 -pUa/S 1f-u%o/&|E@j R|iA -~9_y" -c>CzϐBT0Bh2@EjpB e(;`uzP/R e@SWI-A+vw>o/e<{g@|˚]b={ǖ lMi24kp/70D'^' RʚBka~mg}#|%#3a&ϰ&5==-:+ZQԣuTD+ʅuBf! H,'$!Ҡ("e(U(Lx@e(λO}s7i /l>BG/`X/Ш[ DՄ.3#6'=0] 3ĉjқ:kci!i{JFӚ0#NI@Z -݀xr 9{"=qH{\v[laSBzYF -Hz1|`D>e1̦X 5Q5P7y7@?H @O< qzܻ,\>5F})b_d < y`ۣpnapE?tݦ,p89 ٹi$,~'<=E3ch/qǘcӬ*h䥄gx=?1x~M\!_;_[ 8> yȷ/5 Yt Ac|bIo#e\=;0 cÑ͢GV\_͘>؇:Cɹ>q%y?h] zjPo4L A f~ 'J8=leC5Q QI^M|or=񁬊@vܛ|ܛ,`:jp!ul,Ap#@䐏bv/f<#|`l \QރR܎V^N9OJtQ'i= -G,`Ow& iנ8 `ڹ} 3 ѻkJ&DD0 GMIT: wc;rjޑnct3:S ])lG en G `2w, oo~g1Ag[$KiPyRT'5kkCWlǷiYjl|(9Uѱrfr% 503o':M,s&[W8nR)UK]^6a֖ 6X~%dgEl|AWIg)E - b K1F|q B̳(V=1mxCY0;̂c&εk\,č `rlLjxcWʴ|Yu6NQaK:|a6.ݮX:ҝbMf*7CIC<\:W{}w/<صSS~ՍuquDPQT(bIl$$,D*0:ŒZ;NZ:nǵZP*2)UdK9}m^|^K.7VzaZjBK5}F_\c<\mzGiafӛ0ܻ=|j|4쳨Ǟ$MW?l{I]voqf"k[եm+UnzZh|:^Eh[m[?QIT"bŋxFR.p\T*m?;1te!WrΉDyjx,k#]!ԳQ>ňX&gk *Y>cȎcd%rQ)#5Ңq+QhG3bwF-!?&H#!EjZQq_qY_iRH #ܰ8΋ŊhM\ sp1nq9fG!~%d͠3Y /RLtFkӡ\Ob ICo2 : Ʃ:KayU4c&ϜBp,4? #G2_%dBR+>a.| sxF=qs@ ݄Y0)։AXISQ-~bOqp?;"s;TR4HH6•%t0 `Hp\"b4GvnM-13Vw_,Q1_@? `g]!gCzztPh -á.r=3'CM*${yCBEXtY m Rw26MV/z/钼vH?i3 lhS`¨DFf(Ь\_ܜvCrH1D%3O ;r,jߥh@aEvy7;S0 A1lz, -8HA6 MPnK|bH- z9DWUB𘂠z'~٨]BfoU A %@ǰlr2p`^cI<BW(w8 V)%$uWT5!zJ _6+_(ltrH e&f|U7h2}`t06 -cP2A J$7?OCj!L0lSAG~DuAYgV\7?QtR6?I:?K 94d0 \`Qr$TOCl6Vh%o eLpq__ӫڣI7?k~"-ցjWuDd !I 2 hQP(ThI ǭ{{̋yy~y$A'b*37EmJO%\OŚx4C  b'iݑ/f F}KF-%:v22vfAi:Oǡs=_H`0Z:*J?,m: 20% qqChmݨ6foT?'j݆49u NU<*А^ _b`406YAP24]f2e\w|D x~j&TxXp%=6s@4j rѐǓ -) [`bc1` i,p<f;/_ -|A;sT!5஘I 7X- eI$->CX?\Ij(cO3 4#76N0 Zd{߽\ml׷m#šC.9 !ƶ˜LV]Q[j6,KeDŽ =<Àd0 x9h@ZjKf{p?pjw˓S?+<ڕߡcSX8Z-PKj~!Bl0{R2Y:=,VGr=/mDP\s`z[k sBfjv,t^<{ j]7wZu@E מVET$xb%Rν)S $"B˸D5ŕhڷxHGz,߾ோ;^5YovYcS%]7+Îj~jrXUPPl,S.)Du2qrgH\&餢aH8, DO7"@@*,XSiy}-z.h umǟѨ1yHJ%e+f% b~jږʑ!K餈tXHFy1_d 9i9%FWa`FN֏oU6>\w1ҧ"6TU"Oe!<32%Q*f<%Ii#b|TȖ 8)GjD́dtm-,_tmkŃ]_t_w]|`eDAmLpfV"tnKR%q)yI㲇%dՈznLHK -B@ -6X֬6c7WG0}wv]:֋5-a9AZRNV -T#$Jđ%"\hrLǟ7J#rn<[%/sڥY-xg ~5=?Xt,S~gZxB/sI$4IŎ gj/C5z*4 F.!gCȚ0 -Em-xlۀl@З}pƁ}U7ܭ>"Ϳ{IŒ81k5Rji`MK vXQdbF0 v<[_o7l@陣UeEmz]~?hn/$%8vC2]$ow/4WԀWKկh!Ab;,å` -tYk24cGfMcݬ?Q }#ف!'Gz6⼆pq^o 7}:Y0y!`XNKg j,eUL9or^!p]/?4$BQ.X=㴞0&+Am;2]>0GzbL;Z hk ,A}kPdk-[me{Vg]1f=Ϝt{jx&{9:jo|}{׉ϾGt~;߁pF:0Yc>:̓|ޖy9ӡ7Fy:-p.]gQMy? q -.,* l!!!{ I 7kKGwKU#-X+:uA=zL[8 -B|潚|w]=hil*5{.]0wp3GN RqU"֘[>asbOn"){>G6bڸ-Gx}HY|HC4ЄaX(AQ> a@TNq Gq2͓$ߡ(2)*%`8z dE!; qL.}6D3e|4|Es262'aqh/Ȣhf3 2* (\GAi,; <As -Ru t:3ALd> 1y -J ' JCʀÄF KTaP-!DXK/ldAV'ɺ.g Ivg|[xbd=xM4d'ѡ`1IgB'^9pGCI<ے!ٟ -tNf@x&v.Ywg!>Y/yB t&xCȀ. &E [D(@/8nBܖ>BE<C!ρ ُQx /(#hPy#o1&BPPCUꓠ4 ʝ =GBH#3 KGR9 &'}HNJ1&QOn=[}KAݝ <Ϡ#4>(:qLT}å -A1(Iy -|v{8TgP^RWhʟk4Owyw:?.)4½a#*}P23L}*QhAd$?ҵj}jzoW ˦QӅQ9g0"7x&XśU@|e渱jGʰs)wtuV+neEc88ᑾx_~aKyrpf.l=tГ|{]Ċ:&N'ؐ=ա#1+mWU]GF&K_ -n[nZd(0[mmECSC-_zl/yAo"ؔ-Y#zY[|%+p2\+9TcqK?gK:-;,J/Y_8Z4h 8NJ),9yL~#d+ȷ.ͱLlK2ȟ9( vmpo]_JSMk{As_%Q{k7%γfGpYeM>'( dȾWOz4̣a[4;Yp؛=n[m .ѕ++ۗn)ztAGd9׉+eU|Yy+׾ʾݮ~.'0FfQC5&2%?1Ad袻[~mC?h9|{ɉǪ]]mK:j\]Etm_Wly8yƟ8H%CESf_˖889v!5dl!ҴeFiK4L^XYA@3AZ6]MDj+.;fw9&G7%ƞgTF.8M$, -%tIIlb樒I^֥N{:+vxof:4 kRe i"anH^lYXVt/#\Ԉ 5=/%z*"9z&,9j649j>$)j%=֓0{"_B4{YS.uEp@ -k%Y5_qOfKf|Pw .F -&BWLxYN\;.v% -#<{+UͤHߴzrLNM~jK -ODdg%222YI„)x䇑 ~d7*a:<:~7ǎ.DDaDrxY~nSћjᮽ&ʷmZ_s2P"wZ~ܙ *d 8ᇧOq#Rgy)~[& `A O_B'=q/n&yd,@؆%`mY`Yn`ug=w4{@7|I:H5 ?BHI t`{R"n>|bf/s/m!?삐OV"xF`'!,ɹ 0z}OX ҂Ag,7{Ɇ_g"D.ǃ -QvGlYMtBt"s+]*W5Fh+ !:i__#;?=G+b `>7ҁO=3@$fAb"h%[WWGmtp:f}6aי D @+5zq$X?r'j"Du"֕ -S g8@> JdHJ[Q+<: D3q,]bk,d;2{!8?Ds3듀UHXAPAK -},N&-*unH2 _x+lƴEwÆ؃Q7Q9/9}pŀw3Wq>&!?{ԯZ{d>@V#֊ArArUU=,7J$6^Z^%s^[%*7!q+C;Q 8/DN&A-d_Ɠ|Ň-֑{@w. …lٲt[R["WQT;KRgIO{[7c! qe#C1$WLhb- -#G4g _4egy?YH_κs[+▲%kҞ+o.J{IEeW@ܩj$>đ|)֑6UTN-g7G8/yZ\ИNn}%7,ܫQ=V!Jy27ңv[V-@g_Bidg'=6M%sz_e_- ~6K]nt^7 -r 9戞;O?O9$w&8|[ٮ]ٖ2h[ͩ㲦ԷƴwI dgQ@zlZhRjwZOkCf>VEuv$ٳ!}*$\KlWv#Ir8}`ZjMk귚}#ꆵVE}Ƹ|{[)!yDmH@6o<l&} ԭmݣFyN$,P}U.+*wWdS6g4e6d\Kٙ٫NQdsqYUDH$[G dΥ‘2VrG6O]m5n6;^.{vW6g?h䷙6 -[ -+eyU; jks?լ}0RiN0-1VU0.{$mJ l޲T͡ p<߽Vԫ{58xthWflYWf6nIY\#-lTWO0vZn|Z^03 iMqTU?(˷y{)L|28k݃(7x_h {YGՌF6Z -Ě*yeNfSkʦԒ4Sb:ST41L a&.&{S͠|>rǔmݭ%"J};uʍbBf\.1M),,ոLZ^ُĀ>ӐX:)(UƔLV&Bٜ3(CU沧iFuh:'ʿ۝j[W[Ģx=rzSS -nW&./fkIiViqUX٬5X9SY׺-CuyTe4\ѪuMBXEAaIXE@0qWzZD -REAPAܵEܗ#n=3v -cNUԞ,gg|~zy}?ѐf͂1=ŧoA4ӵV+ok2?mW{$QRYk+;.b}˶S"{qIyy%w,>{I@m˶\6E~у*!ݮ3FtmuM原Tյh'ly}OqOj# Ǭ;&a)*>K_X?+w᜜}md}=@V^`O2w  Y٧DN6 u1ֳ.3&sՒ"/jT6慮;TnuÛf=,=sӪo2/ UYeCswFRևD"_IUǧ M%S,\RU\,=㰽CQ>wݩy'G,iY5-yc\vSѬc{SkRNo / Æ/?R>*FGRGCo#zTFtb=tG_]ҡkT%^ 1MmDd+/d/>08g6;>'^:1U>>f6#9(TѰ臝Dw]۽j/qTyÈM{\]ۑފ_q3m,k |VS\1s6zڌ1יӣ vyŴ#>3D]!h`?Utr뮈ӖO}[8:>˼&<ت};hVFByCx]DFvAu:yDgD7#jnfʯӖ"kNkzżr =ZkCO]JOxVcz>Fȵ=U͊t2T8w(C@u752ω.4>/N͈V/y/eTFWfɯfOxdחa3/N׷!oc.܂M |{FD7$/!5Z!Dul+Xvv'_=7-)_3{p~jZxY4C -UClw~d5IJAlbY?hGXaD|K#Q;#JÎ7n:Z(3 -BHc?d`l.ATVK\_0l_Lj*P5˿C)EpVCԿ.4YEjE( "A% #@#r A("HM׫XVG+VWZ]gߝ/g|g]ך$i VcjD0!D -hzG[Cq n@=_\r}As}F} -ns[x -ϫAy9*Φ9|f9DY@DB(KD*׌F!.mz?2a4;Na1vk -ZC狰oR # ~H{/px*ٽ_ -LJjٰb׻ͷ=o:~y_#!|\qw| $|ÃQ>P@)wusW`Qn2#5hyR/ף5n3Q-߇/5uM  -N :!x\$hB6&P(APo8.S3)mOEHd`\iXf6iK'Ed Rtv阽';' :>|$l*@zg!U 4S V, =vS^jR -\g [ͨ.Ǭ="w99)xOHKU|%i t D0^y(ewE&:bh F 0$@@)=Į%Ωs?A şS~+[ovlLqɥgr"2.GRIZYEࡄc|;+#vl6Knsc$SA -j)0@7b-ǮȳCcSSfz3%쥓a㹱.#->J ;,3*o&e=d}06ߐp]PW%n 8r r`d0q-=-@Ѝ}M>*g./.qL'꒮O+IX") ]E7!=*nFgfONTF*=ERώ\>fP陕}z;D/*'Dˡ9a~5i(akRe --D}/ -=˷Duz|o.5-Bg7߿f6x@ wqo]GSI:mu~nG߶a6޲z1hQoge!̩R^[.*KחkUM/+(L U~P^^Z6j`0pXWwT hu:yMt52-&bEKh}]m[UM6]e_Q*P+K+njQ@ɵgCe"y;B;9S w!!tC}fh@nj ՔUOguUMbW]CVm7ϐNԱu/ D{X[~|pL[V)DBwNc=fh rͲ]5gm[Gn˞YʆܠRzBNQH~T -Ș -Ht@ĖZYpـp{C |i/CC._-+aNn݉[S;mŴݭՌV"0G)js23^;B|3$toL>,u'{RFj+E^O?dr7 N07]X!@*Bw]Ad Bc _ݤt{+k/7ZT_ks76mDna-r[;~cx|D_|J>KˎEћԂEG->v8T)Nв@]n|;)T{s%35q0Ͷm@yW5;dd&GyS-<D6zvc_֍Yco,dYbjmt"\8\ۅHMkD Ds;^ ,4㹼~ocd 8= TxV{ .\;vhH5mL¯.CwC׏ma3>^gsX~G[BQ(e>*  MCraxayFc xGaw$xKp' l`3vog&_$*BM# |Ʉ@CBZ(( *.\,\ xH` X&c ࠇW!fpU3+l?D"\" Hų: Ix -C =q?/8T 籎簝'c??g5|M˾Erb(xS(b -DZDhĒT /j!8K"f5SdZm$=m2] -{ --HEbfy"z} ];ҏ|!iү 9ꏨbD2wa1xd] ԠkyXzLVG'zB9 q h( F|?b2 ?ɜgfn3~_r -B,#dX,TzGPA}1a4{W#"f2ς友#; @vȨAKH?0q}5HpvE,UO ɯ)cI -n e@t 1W͈1Ҵʀ﫧4OmbEۄ?+[+M:VHiPv}>dj3q]3r57`g0o/iK9XߎM9#sdkQ5nBN y\8 <; ?QB+ y#p!uNxʶ [Ÿ] X&wg<%ݫ:0/<8S6|n:9@틼H뉸Axh|KD~F!ZS4.y} - -|&t3I l}#fr+Ȧ0k4f,9nD$s& J{jUwQ1k n$o<.x:rVȖQF"vIv$5 -Jst0k울 NeNEOU{JX( Z0D] -(ަi0E&pJהFߍyǷ ʣl2v2&%ݵI ť3ɵD K%)^U - -/ -Es -!Bh`/ {o. -c2{WTKEV}9{[I rU:]M/6 %}_7[͖7[|ĒC_dD[ :U7JHu!ܪ5*5LNe莖˜=jС&K<\YH)ʨ+d nQnz 1!Y*bRSv10x{J.7[$5; לvU< uSTbt<%7GEϒ׳dYa$8̯~Lđd"412D -Xp;O눠kXMaщԭq-5ǷUWFRW%TVzeRkYE;')O'̝{/!s[Y)(J"j& pk0hkZ1i8f .ZU*+{H˔Ԥj<|/_|b +.1]$[=gp{W#vVvYB{>bc'ٸQ9jU#'!@jYR.:S%񫚙'+|*'88|"*;R%S"h5[KLqf`34&w3T1Lz-#6-.Y(l5+ȼ&WdC#- n -Va#FpV#ZX+*_ͿE{Wp ``#6ფ!ly +@N{Ss\»JC:՞A=q;mAԣ͈zL(Auy{oq`w0@-vвuq1Q -q/xl#GN *v:s9>Վiq\r@ o/"s;ٿ}52GpsgN kdӻ iWRX0o39jUmW;'2w(tێLݒc} 9. ra ut 4|$@MH3v;b=IQ>as7[MΦ[sf -fjvg:`Kږ:duȎ1{\E+WwA'@?@ίXΟH m!f[Bਞ_l쫏^'1)i}g6Ky+wVn|8x8]Mh_ο-3'pC"HvY(9yѡY&/J9hZru3W/~,=A}ny;P gD.~gЗL{(m# a!: 5px7?ՙSa20 f`FP"JQ,X"q%Uc jtE=.Y{uƵG"%( -!;O}}'~$~0Ofh#v^R+uBW e{; F;m_ x(6Q}اD֍"j)]5GPps`|(|H?-"")bϏ߈5X/v~nH>6J-߳* .C4'DD8?( - - А:H>0ZArCOY -yJLX R`Ev%,M4/q-T{cDAD 38Ӆ㡽.Cw&]mqm{w'♯E^d֬QSzɫly]jyh'P=9]}GK4wV{Ju#qg|&xBSFӉПHD1v( Cjxm#TFtfNLPɮ+( }߆}fDTDDYaVePYM*X&FM0.59Ѵ1ihKs޼[ą3r { ʏ2hnڒ۪1Sb_ǯ*Ҫ=RDna_Y9sMF"",MB0R߯iPQt &VX) wj+\ټwIl徼Tʜl~Yv)(NBQj& -S(Xlaᮔ^;4>#80Pk=uL{Ӽ/xE}ZhBg./c$18%#p0U$MK]O=O>d(NGQb. -w`1JD}P:}'ih`A=hcZU4u kbMeՉV9iҊ~-FX_r'N>++D8E; -QB`4ԃs5ԃz{vH[Cje-ZEM+c-$u))Y$TzU7 Uxm];xs6pk -bJsS 5PH3@/*Ʌ.3rev.+k_ٶ0Ӥ{,wdh9(w辩KpBr_:lEX z.,^.Vô6T~GK5=Z)GvMw[n̳>\Q缮kD{xv;a="zNϤB 4MC rfh a]';m$gxF[bFl6_7 o7䴺)AU輺ɡQA5h8AzvV,Ns!eL83 Gx*NgLбB㐱Um -kpooȱ>^AwP~1?OH1Łi=3LL{յ3OǨޥzZtnT!ACӷyFsh"D3\p-Ds8I?DMy`%6U" lBgE b eJ2L^U++fMOe?Y-k7g]ew+bG)F)O+a5Xs\3 )ς@x+܊f֟btRk(j/˔? 'ODT up~ `$lF򙔱xV2eы,?xO{*PuAo_t?_#?%7j`X~|0^@0WANx絔Ahieޞ`og?hΓ|9g|Ht7B|{`'  zh%hp440ppX%B0H1Bo FʗRQ>= X=Q[LɅCy+)hEˉH #[!`|E~\BAYpS8RB7(ˉ -ro }bL x`B/Hb͇C<hƠ3̕A#z jAM,H`Z&)&5t>2L$U)}~D^ KK0hȠ ]̝ACo l`rI$! 2A%r|INeJvv :2hOZ1[•XB\RJj٨B: Bw,\'u}GEugqSFA"3u -DPAd230 ",BK5ZWcM=hbY-b'su߻}9(zy'V&q_ Nq%]ev^Hihde-r8hQA:'hE"[|}mqBLb?ǖ( zŨ-,rw( e}ow?$kxo%7WCgҋ_w?=߷{'+E;oKQܒ(['e8s21E3fNPxpz]8oW.Z ?Y̬ Y 0/2]7\ -g'\e -/p@w$@/#@oZP/^z~>+]}A&ݙ;U'Eb;w>3_q)0JƧ(:@38]z~@Iw}҆<4{~ެ>;ܛs\Z&Uٳg7'dY>=x5qχ&G<ޚ~f

    #z}b!\ C a ZdC_E yN68=qh~y&sL?ݢ?`xOn>A]gwd-MwN6]V@A`Wal-pM9G2p:ҋ},b>H.p ,ݨ?$Ev/6߹r{Z6A[K:K7]`'QkԱO/&f~e%<疈JGT؃q=ѱ{#4=]7nmtۯ6lM%YK#٪w͡hOPc8O7cq>_'d$8,d_۝P=>Ұ;.AԵ$lSlEGtmMֈ6eY˩1sC9z:N(#5hWұ0e7gRYp" S'g67c{g7'upKJFu=1Ŭ-![ܪYĕ6/Yn"UVѩ6̥2+yy]7Li :Ƣ8н}I ڍ0۔)oS1ņ,؛m ;s䬞l/^g\Pu1$U)&uMCR.־:acE|sejkQ)Wjvţ3q$2 -ÍxAe Z!3|gVglnG^[΢ DY f itMuZ<ʾ$ɱHѩII'ܴI7r/Z52ĉȴI0.x82LcTe} -AO)tX6eiʟPj=VٵuZaIBC]U(ReS*,˶I+-K5;w01E]#.BdSc -PFF 9Pg?\Nay4;ʛfq+ Fuj,ĚqҘFYdNʊmLXŠKhLX9:RXU[<^H}ݍkW J8 -(8g6NZ`jNmzN?f`afnMPEESkٺn]6eyZ(*X -)JYYػہΞ;0}'MZB׋ǽ2-c$)nJjG%W?ō'=vpUB`J56<ցYki3d^S`gꪉ~E+߷bz + |NXc.tsȥձK,i)X,1$f=baoy-~KU^)5cFi(ޔmJצJGxiqoMnx$p̆; .X$lhIix^IUDnIcDܵZ"sVIdގ5^u+7r~v'l3`Jy*qEX[Qsl$S}Fna)kֹ9[V̭3ʮ؇-%$}0=5P-gťʁi\&TwWQXJ(W wݣwy2df3]/ӪKR\;-] lI6h )wHp8_\ɞ:P;`yVCNdQ7F׍j)3u{&կro7$1T(c1f`6ɝ.`2Wûùf6hXt$ G<gSFcwAUQ˴2-Z-~ˣQ;"ijro`R?PTY@Ƈ& cO!g|&_$#%;`?;}MCO"h-ݰ} `;+BgDi#3~n`k/b݅ F I'3@9=.ak[,m03Lv^NOй^6Am?tuނvU*3N5?evSO Hflo|oa1:w4;pPA7 -`s̟ɹ2;ك?e[V`'` x@7BdNqL9ćᇡ7\.,P.W/{rg̎ X>̽o,v$'ehB| CG{"$(C iJ0~OzJclr}jO][B 9 <9Sb(T/yf(ў:-TDA@'/R'yN[ߛ3?;nD$_}š-&¸P9U^x<~4^.0#;ߟi%G\ )PaI6Re١Ԫ֏ k괶MM6ѮAbN} :F9UrꧠǕiE`_PKufT :kA+i_ !7!q6Tt-? A$b@k"q$>ǫPZ%vٱDX}ب]ti;֨ڹS+D7Lj:##ݢ{-T3$88t%|t$ˉWӵ ki-Η=>wqڹ\wYsssy6%6{6&]jH`T$>5@| q4Ay@+#Wӝt[ZF⋴dډS5?gcb)+ )yLeKgMi4Hm5M'UvSUX*iIXgk{YjveVc5 Sհ|w cemyUWo5+ o" JbZE( K!@k@E(޸junkn۱vvt;ad?=s9s߰NJbMH k) ^ ك{x s%' 0!n%&,%^JR/5|ϹR3qS։ةPG2{4!xW!s΀e$ kg|¾Ct+J\V卵WI*9}V8=0MTL$[ƒۘI=!CCY=2/.H]r³ זDظTuYc繥ΕAt_fMMtfv<gTF0즎Їyj^]w!S[lϩ mn6gu4Caͤ&s>*Ie#YBCDHYCB>9Ήװ{^.p!g 0e b GP5&0z -ޝ,}`k~ I_Zȭusf털\;')Yh?P[xJ$  |s×jߢ7 A R7 -`LRʢܺKeM - "]`Ȭ3VVs͆v~YQaIH?+)/n(|+)1"4#Ucpу. {F[UQyнŜX[W]_]j6BJj9%m|cqP4*Ht+rޠ5~#0t`aB 8Y0O0{Ͳny\VQS -(2UXEj/-唞ה^dޗd3MD1AJ^W%fA=X4By#45Zѫ ޥ~E@C]S_kͭif!azSz;\Yu:\YHUITf"P _]AxkC?4 -`Cz'f,@w -;kW j0\Ž-nؾ$mˉuY [uMeW/ة)ZxM* u]xpNA{&q38;p;@57h~D@t[ۛ NDn^>pW BCȃz`uP y2cc}8ܻy3itu` cOx>>ޏ;x}~lFຕ@Cq \֥)bJr:ɣP-g< <ܗ\;JܖᦼUp8^E' 霽:'8^vMm -,U)Q٬jifM~/-߿-4˩ŸS۟*p-lQ犓|P:Ma(UOUϰfRn1MPm6MWf7 -l0Ԭ7m\keYb׭Vh %? Z+jslgXgzj~:J[EJ,6PnLW . )lڜk\]n^bԼfy\d\h,7W9aSs\ Nq+H -eu-??;w -WtX1QcJejtȴ* -OY4KTh;7h.?~vP}^P}n#~zБ]N-:3.mKvʺ{:+=TFiXCEqYZX, -SvfU6zY_L.4W:~Frǜ !{vziBЏdO%⹷7ubM7gjHwP,,ΏL떢u͌lsdvq);|a\NwYo _G=97Y#Y.{{3~,K`E=^&W{^VocvJ4yRp }بR=9$A_ٍCf =s c;eH~kZLtNr"}zpppc-4CJbe6%%ppj\&#}YI %)֘ꌉ!;_3T#R4b JIOde7 1P,,.V:,UHA@*`-k1Xb]QQD#UѱrԊ:k+ڙs@wŤ,F/(GFWύ8;jSxTQWc(a>_# }xk+$|dm8IZ%BN(If4-yYrR"!1ba\eLBUt|M,9"V6:p kv - A>0^舶Kgųf] ޹>-)9;r=$eѹ~Ȝ9aّʰ4$Khz: w=}lIV|(fYb.sFx <%!e3˦˂KQ~-'-Vy[M(Yc^IWؒSڎ]*lH!)6=g;ؖm^!I.I}*$BP# `hKWjlҪP3yU UeXxUYRzVnQyTWW+>j -a^c{s2|s@鎭WU[` |7q8P3kH̐ Y I{6+1n2w55w1lmxk:VXX\s;}FZ:K+* <moԪYG]׏[\?Mx,i+q1K6HVȆjdCLN2T+䃶^7τ={tW -MDofm]2 kPO  3CwǀPosc6.C}$NKE%q\[Hv l#z,za ˞u?0 &5M:0h`<c=F`ӒrXBz\U3X>"$d382;s `. 00(лв]:!e -mv0o E2 -N?!kvN}'5) i{M'܋HDrA..iT5/Z\/_\JyC2h/`pB/뭐yO33OW:赦;X_*8kx!v7\[cی@77,]N)KOgͣp4x0mځ=jz/ȏI~"r~T<</qC.נ(++7&F,(,ȲܖEvvrY˂+  ".!xCEh&Fmc6If:i:MSM[vڴ}z<_9y>|e >X6e7pmŕOK\@$ dXqu,xFVe -*U-])[kkݵMp={aj1drrr_w~ko7CfC $r"CkKGmoWkqKp/4 nRZ.GRZpP9E;}VC)g~֬(b}Bq}Lq==WΑHH둄CHW ׇG17r}G͛`!:)3aNi(-)>)wfi^Qg2z{88w}Hca kl!Mw07ߟWЧ>(U Qϊ귙.=CӞOQ[2 $<%b޿{?@ωlsc9ʅ49Lføv33 @fkזs5ތF~OF-L/jOJ[>})iNؕND"BWO_zp}b0L -&tRݱp@Gt>ի/`wg[]6^g@ێ֬@wV?Ӓt3Fݼ^wKZVw#ơ#"$9p7\G߷`=` -ci`@J0C1)Q0󊸞<+ߝ[ВrE 9{NÈaޒWޕ m'2H1D>O1wW9K(D}7 -A) iN3X&{m.,5V4 -ZE5=!8)Ae_HSGD瘃[xqz~\__z_ΒhlViI]lvcI>Yb9Jl5N-,+̃RaYLPZIXn6iH; \>b';(}-ügyQۼxQ}z ?jXxc^.=.vv)jdҐ0@+w(RV, Ư\2ZBm6^V{Nr1糨{{i'҈ߕ>j@k<ɃȣP]S!> kjX?7vy@E}eaOp}P, -(q]ՠƂADET,NPXh{,G$1qu]{Xۏ{@xgygΑڛ%_>`Q2l]f(2C/)멷4y赌A.| b38~Z9P rxë;<+"Q1ír\\p4éUp,2!9V3yLYǻH?RO VF*gS݀cju#`WDak261ZCcIڲ*K%\@]+!=bԝC݉Eݸr6ԯ_ȠAVh6#GdeYPV: S^ jO-Pwm.߃k=?CIl3Yw8ߕF6eل\dikbR5љ&+"CV!V`zmDQ7+|; R@.Wtll]> 7 Lb|II}g'&w!h!y6N(F{;Q׋]# DuOrLhv/C?[7lO 1yI#_ҐWhv<xռmּExD3=桍i<,`!Pqk6@kA? $#dYM6RDJvRK!u/+~xI!쨭PpW;H32$t䐍dur -.2i.'WG ƙ5H?2|B>N"u9RkC:k%2SVo>~CG7A8RWm! -GzjXjMf|tX@Tjds"@# ~I p'4q7F \hK_hZG9&ۇGx}Lԙ0&He%rM8O_ŠS 8tZ%#R9SThgG8A'5qU˲h%|:bN+qJ'98̃UYê -4jpHՀ&|W2cjAxQeNW^/'7~}6}pV7lGX3`?`8nsWu2:AC=84aT9F@YBz7ˈn.yJ\C;N;tQwðԹGT{$aL敃*|Tx{JHfKi -IA3!!Z=k, `;孁Pg} lʎcPR(bdl HVJ TX)Iy'e~LY֐՝FRK03Ov@ol=P4[Gas8OgHy!s!) !!9!5!U!쐣eOKC"#TțY?]8iG,=c~3XP7la(<`G`q8AZc"[eLeʳƕLFEq2ݸS^~EX(\(I< ԝn_>|r8nU =+LXcFie%-7e&2Lt\E)EjZL1S-0FlSϏ8gj1=6 ,Pe s :W|j -{Kھ>XX? -#e&5E\F3+Pydvf>6#hE ()Tm(O|ǧJx bca@OdFwƒ0XiQGdcNR̎LNNγ]mMV71.!Fh*a`+"}ccbuX2qH &̏(͍͎)K#"q4!SR4VhuGEyafav .D&葨((("0 ̌ (qh]\Q0.cMh4rZ=&Ic\kmm&A;8}}yIirjIjI4j{'JxU?3~F[6a>(ѠԦ*CPnH t$=WV^PVOW5MߡYgMYHc֋*^TZRES.qaQؑlZVudD9TfCi*LiPlJN]Y(_Yeƕjq&˸KΘqZqC&#CT ҏ}mf`69x%RuԘTfbK0ʬcQbBA>dbJxyhI%){rs~0AZy(R+‘R9HLT I\E4L6-U]ު^WY>J"r,JB2`y)PK8]LWA߳H^FB@̯}a瞂hĺ0ǝ"ĸ3ndX宖Ns/nO}M><<P{ - ~u@7hYGo ڥŠ$;Fc@G8;#\<өG] - <M hw=n];G;65+P`0^ہN``~ jCp(C!EAeaqC1}C"? 6je6րv1.Ao8]@8B{|a#hB>n~psynu󘈿+27ԝXg&Qs459=@{?0# pZM3lF{p3,?gyٟ!a{(pm>/д.d/`=fC70ԧ'J"H5K\~¿ƍ b^?EnD|B]k4RCIX= -(z%-BR&kOm?rw޸p0>&?62j4hGLAIþxq1GxPR*Ǎ+GsMԝPS20l<@?F-5Aո޸5ZxWXwq+0"<⢤MT8UKƱs qW\ %uW7hZpYӉQ\ňv ¸C8? ΍3n&<ĉIdGoN~:G ӊx0n11W&%atrF&0- _NI~GH) -^?`ST!|:lG0V#ӝ84ߛш3۱j웹 Cv`p>ݳ10v%%U'8V? _LHjȹ{<3&̬)8>'$r&cp{T`: 5cgP'vö~ak?|^ .l ->/څCք|/@܎FcyG92]ұcq6-.Rlw/# û º]bO~qui;X\/=R}F4XLk6c9 b r&G/Ė$W|ٱVW.jձ*]إ[/vI!-;*ޕb$7SjU=c;3Ҙ?ov$/޸ذ, -Xn}+Ra%=W.H Ƅ'NQ?RjjWr^\ Ekp4riӊ 2)I~<'yNGWJVRn0͐/BBl4ԉC6 rUe8T.j* w4eߓ(N*;STu˯lU' j^,^h71nFȘyP"\ֹ-B-΂d,NJ`/( -bAAdHyղ֯dۆ4fi,5L}2dZU%3_S11׫=W̽H;Xx:O#c㳪EpFIB81(rБ-6!Q"ګ{dwY>ey&& MCMZMZr4;ej\A+XEq 挄2r˲S/dSYlN)ݹINuVR55I4)I%)RCm|GiJ%i"ߋk$UNjr!ۥɕ,]]EBLHuW ]򲪣r|ը纯UUT -U+Wg`/*!mMVXE] k#ݳFz}IEDŽdAyZ8Z1~SIOrYSZU!ϸ\R㻤Ž@H55 IFJd$LEb<[ðu ⽉f`ׂX.omBw{P ޻bh'bh*6FU {'Za'|/^@,%#k& jU8"W-EĪdĢn+ºKuG|qXYĖ,$&niTUk_p -"$DԒPJ2UcLUjj:Jϕ:Gr#y<꒕Ȭ g*]FhI#tM#44B3`i M7-a *tfpY Sa*gC~mw@^dQbOE*<7Ps#)7Fay -믐 - -̟j_v;\y)`jcmAv3yf.fN5`={e!/b򥈥Rpq/R?- T@iڔʿ4A~kS>jmVҾU^#_WOjYQx?Vv&gR\)"K/ʥk%O<Xp1Pom$5qQ cXFTޕe) -SM4PIYhx>]B IϕR)51JjIb۶21 ocR P RCk(b Wovm7) - ĚzrjE oTK;$]++>v۽ c~ǏZZ}-ͥbbjW#0Gi%oFɺUh$/5?(G ~ŏc0$~b9EQ:_|F^}I;l 5wKa MchJV0E:\:Ǣt%B{ KuL/gds2y4]!T=AOI.?H+XMXPܥq>gA*KczM#c/v?>>~_zNo:ptp0JSjc &C0&51II1/gה_q0ބ10fXP+` -6ПPOls&\wV6= 0a&~j [Z=W^u_:Rtzme.4+k4xƠF -)O ίu/`@hȉ+f7r}!>w7%,gҹYn!Kktv> KP_ ٤4*3ZzCǪljjm3S/`R _Z- -N!Mhon6\[b6R\wϑc*=Vc=?jCZyF+n{>@NZ5/bF*#r#7i{YQǍԨ+ƌG(HyNd7xg{=Ê6Wvg"7*l.an ZЭ跔=Js'jvLbR53fg̈YaT2c?5b/ScSbM#I̯\%gˌ\}2|))enE1>=*U)@=Da)fn$[IcuhuX&L;by7q3qFzWhD{o͌ qڽ]iVK4+>B =5#>4`%ۆ)6ZSmD{d[1ѶИ`+UXj,m\Fλݳ 1g$b>ã0{ KHe K"I&L2IfLB&$$C!"ITBR, @!(}cVVc] -B_Hg3s9|/>X$E ҐcU8E5IsT@U-wdґ -G@2#Xa:Ŏ;BGYn;[ycq9.YK$_mqg.j]L,kc acSUU -TE<',ݩӣgFsQ3Lw[,q+'+yN+fNj?g8IK+MuJ,Ty]̈Qif3ȝ;KnEFk\mǽvo[Vr_\GF9ƱlMԀxꉧ,'r`fE8;J9SU3GK= qɔϛ\o@^o1Mfg<`9={4cVy+󱕒c}fCV?8+/n-xBRgT7\c_-or}'w*Q?_n0#b&w[I^+Z\xm&}$=o%PF0 7f|>xhA,BeVVQ2#*RzTVj|&)ԥ`- -V(!x lc 4o2cؒbی-͸"ۈ+c/bO~o&j`C5o(]k(FӜUʥWj֪"ͬFnԴnM=ɵ(zۚ\16&gJm<h|Pu<شZՃ4>\3 i7ѴxMmthJcuC2Mjӄ6ii|qkzCz[Qk`mD#hl#Yy&-)tS4s!&E:TKXܗ.S p8.jkaR3нAWe4ހRbc‡/L>e~>g|A`fNmh5@8 -q P`%:X>qBx_]}%~1%ޅ&V#7B%B70vޯեh>g^}~$%zEs`@}xËWbCaADA z,EL -Fe;{v0-[nrt#Lqjh8Чm>GulꖀiEP0'oeX׈?L0?gpjJU^lbPx;w@x#F7b;&"awQ\r㑗#G~-QXM7gQ;O-SQp2"G#q$*q`i9-2 v/kΘV#cak6X.#/a86`Cj~c>11_Cqy,$Ȱ31;VcJlYi$+6%90HAOPKL=PISA&ze?Z#tI %UoW9R2yWP~XaJy;RU496*pz9֧1ڌv d?}ѓݙCM7!Y'KG=2%|'>KL!rl/碗͙s1  ec [Do=9 V8PxWtS9ڕ{QNUy^ g#?¡3m>K,;&Ygɸl`\*cїyŸ_΂j -([ -OaZ p6¥jJ4 ꚰ>ªzB$a-@Sf4(cCO# 1.aV-EWQ|řh/΃D*.m^4aS$E0 u3J$a"?JE>Nśi^t!:Q%,r\pVhЬEv6VZk`n&AaԾ& EQH5咸Oͫz4KI='=駛qfܚ%piQ)CSU6UhԕêӣAgF&}F F@NZOIB[%*%qX'{j}񻋿UZLXj`-P:FC#j -1tBo Ag}Bcr:#w#K V5HA 5Їf$&"p|wHdꓰb | .&7P[M`븪oR#$32R$uHYjA\, iD"*cDAtH8MENLm]'{LwXǿ *pʐ%DqEׁ /BEyjMl`֓&8֪16Mn?H}~~=~_Y⦎%( )Dn(/WS:`ʖ@Φ%r2mKʡ|2LhLcx, W<$Rk3`\r2#s͡jgQ[ ٙek,3ƛvsZ+*Pb[嵅OΗg -S3`VjeSˌ[ۑCh(u:.:.Xn0g<̙+[F_sa -SyH1g`^.@Us$z 4fp'Eg  -m=E'{xK4bX94s퉮j#MCd;srÎ]ر;ر;h(|Ful]pwr߇ {)5՜ ݌>4Ap&B4hΏ{Hc_N`G#I#ůKuX4`;1'-cٮqux-tɞ%CR[1Y~ւ}8694.HbU(Mm™&>v ~fتnc8!;ݪu.4@W 9| -Mywt{>Sӆ#I? {YrU -nGL_M%݁{ց 0=&&OVۃAcYp drXw@0C̄9P eP`~aY̍;ټ' K==⭇܁uޔ_8 l4r9 scxƎi )>s]u ~˯| | \K68ش +/cHgi? ؂.c*Zkl7ң49Y}]ZZ9flAMOŢ:#WϚdDeo{g)Q~hAN^Z0UiEUUnE&herU|w+Wrm]w?<5nk0I!vßWÕ_n/*}cJ;U *4X;<1*J,{T\,POfӌov?)E]C)!*mU2a.mTAE5k)7Vy~7L9ɚ?^3kz7P2VkJ6Ҥ3J &=UjE7%gaz<+Ŗ7fn^ jzM9X=G(eJSF,BW(5x&k\A yOcB+%FXZ(.EQ6XU<+Ė|l%69i!]552{+w >4)l&MPjX&и /SJ -ج%E҈ CE#\ 06C9,{rhaVᮚɑJ쭉}5 5D㢒46jR'ktQ@#bjxFOCcNjH, Q-נ\ZZ#mPGjRRc<5>_b5&.R)qo%jd%ŧix|4,ޤ5^JأNh`'P-?<*?we1 $n "" 2,0QNHAA(MqZ5q4զM6mzĸ&ƚXa9}"ΡlX?m _fK1SU@Y(/ir'+; ,E&C2 2UZJRSdHPR>%RBNJO %$HrT#,g= 3 -boeȜ6RpeE+#=ItsjLJ26(\MG'qA;Nw(4bS:F @QU5IVcwU^56=VS5Y!r>><ekzP -)iluOy-P0yڇ>+7{4>]5o_pS$l7SO7=ϡ~z&j"9Ff3A(h ܚ4K}i~i<[dZ8ZL-P kygຈmlyh*^/|3Xs"kĚC 7IÚ%%m,1ϵxXE# C N01ҾCP"p8iFjz͚ 5Jc{Jj}?@?6f p뤰;YT':ppzybFcI7xZZ+ow^BmxBP\wFzw>{pbGs֏ ŜC9VM(gU8@xuq?Nx;AEquO/Nj[9WuqN ?%wŗ̺75f/NLN>V 1,vb{%Ө;[|;xR>prWJU}s_DщTMNΨ@Ə7𣋼:~ŏZu[8}D|E Bm'|.85go-/(t"шZ:s_lخ|l6bsll29=قldsۮ"G'#$:D b]Pr\l.`w,$ -ϓTVWUD̮r]9 ];A1B9 (hr4*Ѩf,Ry ZDd+G#r"pvrԾѿ+`ܵ^ Gk4:ıT-TiL\Yn0˰/2,3,31 $vcxKʭk7V괪*RRU~V.Q*Jc;R{;G: rq+YȦcn:JFd)ﱰG}VuWj폴~UeZr6f_T=/F|Tg"S8%S[K8]ͱlsrx[}嘽,Lr fÄce.vLg2=&> 1,wvi9Tk%?k5t2Y$Dq"nG9orj8`!E8\IL&1B(iK{SH9#3jJCq'_vDSyʝi%SK,'r %pj6iLU1݌2ьQfL4-0`tݙ2y_ d2LG_d}>'.zi{XdU˜jɌf*3Y&w/4i'p y-0ws_c=om)]Ɲo6t=&ezX✖.kߜ,ȔjٯZ͛ٗs J*fwa=V|En+x O=ūt?*%o^ΒVGaֺ"tQޓDY3%R=V -=xz1{GN]a92k=c`~53tRLrH[(m $`H#Ϸ\_!9 -}ue1ӿH4)$(~I$ =5XE_Z#_t ^}Wt,RT$k$S @:;I Th$9")Obp/ yvOL\Mb&&+#rrC|ǥĠp!ҮZjBVCq$Y!6BLaCSl aTdo1'"lgqHLݢէ9(Ji+"J_1uBp:ع DSbsMa}aܰnBywx fkf?T#VJ٭aH=Aa+\89JI_4)ҟMDZYXI׃(ORS_US[Ƕ\[U\=%=@vP5,O8"Y=%]6mzI0H_)K0l>.wR )ZL-vj5!/Cp'V54Xք,(z۩g C|D' z "9&5xZpT% -vz'57` BcㆎS}&Tyi0(:5 : HtRwKc)j<)^xrS긭Mz[95YiGcݲ9S OkI7e.5ӍB 2{2ceey(Kk]XXXv]`9DPEEE-}3Ѫ68ƨǚ&5UcըʹMG϶&iLL9l?qg~e}yG㣍 Y&FaV[O?r&4ݑ Cƹߢԩ~?pҪ 'Ki.g]l穋 LhݷS c)+C7`?vj $ur.{gxhV.37kznP7I7M;*D2f;y6U+6S|}.UXzM|;]jsrE5zH]< t9}" v@ Z3a,tS|=t}M>|\sOzO BVȆB}24FQG@Ǘ9 3ЕbA\Ru!u>}p?^0zݣ׽C.RC('~n>_~fb/%||% -x6Otk?Sn)qG>H^WBԟqsϨسu8Mhl6uF*ާVc%>V2e e摍ϯilJfSQM49αͷhf x%{Z1p"ơ4-6o,P -4jИTmnq_x y-5+8{wn}W0zh%KdhVWfvWc!޽LӺR8MI~Tc&X[Us<1=/gjjb(Gˋla5øph?YCif5iJ_&U}M (Q]HѸ8C5 TFU[UWo<=ߏ2pFqZ#-93#gjҔ>(BlQmp֘~+~e_UC,dlְڪ!T~q >O ИUEktI"2¡9*PJ4@);҃i Vgd(͑TG9du(9YgdrF wAF2:)SB}ځγ$:P^ ,g3_Yٲ5(ۢt%ggWk̮*\Jp5fuoQeEຬ(]EgS WgђL1P%PR]e`Yr#+sY<9Sg<);S2Ez7+;y*sIaSDn[X,4&rP ^pV,o4 P!2WdU薡PE#Q4NE --ZE'̃>8dY]p9dj FEvǮ"!fRzD1j56$HӚ1ZsL5Gڴ4uSv~LLJ=}}}J,}Zҗe-=/kMي\!iZP[OhgJ(~ԏ0h.CM& lXoӈ`]~񣇋5顸{ ٽ ]k4N>brK $B])f:[`ki8`ogg~rr9H};¥{Ev$9P,z)YJ\BcU?t-=7L0cQq-)8ť|?ct$`]9sMxB@w~DŽ q` -a2B5XXQfezE|^&WT_?xNDH x&@QGՠoLNי1]e -?>Ǐ?Y>c2D|oI9d 88>//w@<)3̤NL ?>ď0՝?{wgROyN9%x%cd5^ \{%e3)/&.lخlln应wEVوvϓ:^<@G!.b(?hDcy2ĶuDڄ]?Sm+_qх*?J&v%} (nC -D:\fkmt*t3zs7]/Rk3ɰZ嶥jm\Lʤ"iʒUTZM8K[T`T}wj9ME$QnrvJˤ3i ƗR-gE)v8T:Lũ#5-u&0PiєA^MԬI_ ەO_ kx -G҂Ҋ. `+ܔ9"T0k#Qi*7eyG(AuY`w]`e]]6xM0xD⠉hhԦ:M4=$ΤvI۴;^37{y{wiJ>SMM,)O"t]-)n~]6pDo}=׿%؃ -M|!.oNP9M1#U3&_,UVSSE嶶i] u.XwzHb=xpgيlAS!|(^UEUY\QYM29m^a,-<ٗоY.e|9)-0pvӍ*-M0 &]*pĪ̑,Wi*-5,TRŮ:&5UW27j{/h*u]9rFc3e.KFB|P e;GYli*.RQyVe(S^&OF{f)ӡQ]FV>L+y>FG*^3T͑[|oF׸[SQ5SӨ|3kWo2|ەۯ4 \UZ FoTQ=Fh.& B -}/P06Fk[yoHCY2uLRz` XmJ-ocB2)f(= &rkxȧPPɡf%*!BCC݊S\bo+6znڌ5]0Pp]W>mĤX6&*%p¹J[4,p(.ܨ0/6&|f,4b96Dx5ƌ@=|mA{D'Rb45AC[R@pDT#EMaP<0iBSBca<}P{{$7eh6ugrј?v6ʜMncښ 0mx9c8GXfH⽓1[s)V)m)nql( ".ɣ=åM$wc:<_O&(ӧ &⩒iX tSK(kRˆpp [eg%yt2'9drcN/8&s-[ֳji'7UjCm^0}ƛnr ]"W4y&걙ztG7B=V6,Ԣ\1ovaM]QD:Ro ig3tt:~͍[`+<(f"$#I̯e'{5N1bhof=Cc@~ Wad 0*r޸ΞqM&:$fϼɀ$`8dA>ؠAd,-=qB~#M][}wuO|ʯ~g ryAXzEa N -n2.SY4yy]C4b9eh'{̻Ja,#tZ\S Z!}5}L>U3 xG;h^ms{V3]8 -Je|INS4hTO[}?#ĞIybZg)W*7eƻjArz}}Fwㄧ ShGV4\ԭ~b&Tb n_}ث ѫmM-v,ϵ'`| />g,ƒ8B-^T*G_L|7{٢mӉ9:w [iɨ Fܤ`< W;k,ExNT2yg?fۈ_FtA7 -Z9#9NZ֓I:Y' -\9yv2È?#KBh&t0UjgBF5׏p6XfƱZtR'e]o;v.p8qNlp9&MNv-mvJWrT+[v h5[@QZXA\1& -  -!:'}<_+Qˌ7ъFQ4$M,c]OxaYEVW^eN{{J;Q>!ctM:^FݏNtf6R;Iha:fmMEQڣ^C")RQXs< -uM!}*FjT tj"W5=dƲ7k 7,jpV7PE,+s_ܴb%4J{JCvJ.Ym\)Weʘ&+W*ߩd~ -Z4ZHAD˜*@#S4hтk"6P:MAZ]ƴwRIJfa X<1ٔ0974dnҀ9~sb}kIieF˜, WrFAeY*]YzJ9ZM `<ĉeȖ" X-V(b ֣.:c -7(hߡ} -Skj.7-}G\ܓ<:B %CYXc)O/;Qb-SOYrʫYVI6+^UrD~ǤZ[ث&xFNjr;^Ɋphƒ8$:j0.kQmRD5jq*P mZjj9Ffy|Bu|A5WU| qOPٍQ4` z=^0>Eü^P.Z\jvW]/ۧv5GT_?(g\.&9=A6Á23|43 #7964U_.4&ab1۸zsVW6t-ribAL"c+ǶDObIcN9TYPs46LJs;0c`w^@nwUf 5V1!a5&9f6Ԍn&لnތc+Z$_-xIL|1yyuz8c}:`?GgisyǼO& ٷ=0ۃ>9g4OdNi8)<|.[O+q8O^aX\ūÚRZ#u}g\"ӿ30+FHaW MqM7-:uqSu_qp?a`ә>^h^; s͌I.1_^ }C~w=ue|>r,!݆!ytVLX1K/W[e2c̦Z^ً@'~yy_=ͫ O8v?;NDZ%n;7zImvݺ6[E֪] Bҁ( ʠ*kT.T`@`m2sQS>w{y+8!hn X_8wp@7)82}]c^e?̫ -<߅o79|NFb-COoc\#Wp9/|^u¹|<~KhM^#80lO1|e.c_ރw&2؉_3/^P'=C%i/pZO~|1!} -"zARBLy,|>Osyx4c$csyy0;G{ W=hϳ<*wnY6e6NY]adZyN8K΋eT/·df }?edNaA{)tg"֣=Sqy9 ܯ3 -OTnawj~ m+'`6@;vahO0y$>f{;{n2ŵSϰހa<_֜B~c7EE]TK2/{]B?J5hgI8Zrs̜y)u&x"<参 ǃ-hQt1"Eo2KnB>@6X=GRff}6CKc@ ZbKI~hyYE6VhF~ , )Y}E SQiT]ILkiS;,>Dj+>V%%9ib"6N&!ˀXf2ez˪cU99Ty:;QޣeJZV2V˼jQAE-\RrU!u9Eqs mohn0*]7t ԵTiU)CjꔴXSҤZnicƄYEyj0*h|JTgX>E:'?'n݅=XK۳|ý49u_;-s)(WaQV+TѦhEJgάkpnr*[yZsrW^Ru pSngN5pwoc-u@[>C )VB.1WljtU(r+RW:긂 -ܫuonkUsJ5_#9ϫ}*s:Ļv|OA?tbqo&FxL -y,j+P[ZޠMyu7)6U>(g9|'e="|Ruޜp-ĺV|e:^$Z"s~|KwF@܁rҪ d%"#O Y_%xQgTxSJ}NBw3h&hڡ{Pa\a.UF|rFBt-:'kt,=2GWY!D.5Wi8{ 5سly Cc~;7zUSr cN1d5OQy|Lj78SEc*hct U -9?ހڣس^V>7CPǵIrag+Z -eʖʚpȒp1xiE%ɔL%I$1ILY( IpB'Po+h{$qh~\r߅uc H^"sʢ!Sʩ%) -S jV `V4NaRRRl֝Iّ]hϠņd6h3//LH/S/9t5Hu i࿏{vw #A<0sqsc,1|rl7mF1f#+>i<>]s 4y%lH*P_rsN0+8t&ܧH()^b)e`.ɐц?:񣛜M'х.;q+\̎ ')'/aS} 0Pc7!g y?QK9d% .5u!}0klVO)^ތ6)`{`5=0XI}ƏuaK}u\kWr@nzcyGY<D^%-ći 5M7a&X90Os6&j>괟d+V곟Xl!y}K؟6Sϟ!s=U|R</hr뭁H(!0 XBqaC*5?+8plI>| L}_cuM;9`ͅ9x7Z}k -Ǹ(dD\,FN?#'')3q˥|xCulb3׻Z>W]yD&Qp$ U\0!Vs%q@ϓs ,QTg~)!ĻeW9IнFsƺFA}pC&k@&0@>r0u-ys% kTmr YWIe{1܏-S׀CX5ȵG6(пјwUH}r:~\eM! s?ΣijOZ{$U1#1J ]v[>_mpmu })'hЗQ* 8fy ->=w$) t9Ïa|$љY;6f_)b 5خǶ&b{gbx O)5dt;mG/Q'*;)p XUf{&wѺИPn.NVjd ~E=Kx:\?דDtO`X >-`U2K@ +\gQQH/5?z ORz^Nl߰Ǩc~g;h$i= lYnl WP:l7`{'!n-n_%sŃtAzDwm_P|ت]>`tdJa7#u:IDQR-4,MGZYmbÛV͵ǐy,G1C,E'9 'F;5:KQL䥅L>f2H6lq~+93=\ssAOǾٚ5E^8BpDJ8jnV_D*P#ĸc7|8V3pw1wG6Q)pd‘GnRx੅M؟Ld4HR1è:g(UW^1DwAýxK#>6s13:mԐ`ˀ)𔰓U W\ᚈxC v~nw]Al}`hi`, Y̹ßI)&;U^U'4$yRTRLPij݊.V8uS_T(u)G9%RQ}_ι_m>@xV˻JP=Eՙa2åL2TYrEm5WEA{kߢ^y䶝UrF8Xʸ HjFJޗO4:Vđ,Y**U" 3X|WF\~96>>`b:ɧ20ہZyVJ)7WJI*vf*RRY N@9U*!k]S˵HNZe^+쮳9ALk=YHI;cQ5WR> BK?/M< -*ϗ'';A׃AA?L pew^g;n ,$$\ T -D8V^Bq2ZN6#2Ң >q;9oyn'[鐫%g+{ ]Il% -e VP!d"Z "8<<]LpUq-@ԉhܛ_! -c> ) $Uc֥ &Sa -(Hw#)<as29C>q-JFP .~1͵~L{ MHi 4 -JG ll+@5c`*o >40E70cۭ +W/pdK,1!a7fF3bll m B&xjG؄;@ |Ro.<)> ?:cm9&'4^6O/3JκsܺbCg\o3@jiy\g6^g8 9@/}o1DNQCbwD&AzkN# -:Ncnx_`='d62!'#FW?r&eRR;㚅ͬU[uv ~&v6IZFPI`%XEnE㮥>yl>7 ,f=F5\3KTh\5!%>擤!s`1kD- ^[csX|0>CMlFY} s$A n–Z5d||X`5?b ߝ%b&&ϰo_`aM<~H{xy71RX:8{WYIň%@#_&A%WL$u8xWXQ>8B>0uUJ &^pKd|G|FwUV3]6KD_PLpoFp*%U~/N )ڇGNvSO8jQv85mjd+~Ɵ9D!Mǧ);Lr+jOU,U*.V_ZUbRmP*Q!y7^'q~&>@^gUcS;Y))*wzT0TjĞb{*tT(Ѭj-JsHOU/Zl( "Tr O%*HV^SSSI++5W0*7BMJ3:eK1VmlxRS4Na\ɑJb1ǐ' A9J@!%7=A9$e(ϗP&#}cr?8ʫ -o6$,fwI6l~vIHBH&@J$ -$AkJJJRZjŢXZdZQt:0VvږaV;0/۽=s}o -|ӷCyd}Ke+{y3݌slP⼫`M2|ey*(!Uh+ت`>9ò7RN-F 6`|KZi -|A|lr :)wr(4KP -Q~RpBpNˆ/B׏܆hDѲ!|PNc%|a#hpJF0ߕKżbxLq㤸Sn~ǐ Ѐ (%]%\a8g|JHlHOq4di X65|ՆoexhE0W!Д./n{y೎Y|< scZlŏv0 :rEE0&u٦0k@3nIk%e o!ya|HsvB!'KA#KYd>`]*Y Ճr\tuL-1GlkKx_ o8I/9kA!h.\c 2ꄯMS~w9Xeqrđ&fNjn q/X6,ao=puV?&kyGC&g3dL(9!Qjgky?ۇG>-})wžk) -!#6ko,c\ɊA(fC~yCv&ړ{OK߹F*JyW=烀% qe#3pH\΀j<9y{@&/|N:gT "bc|'ku4Jg-_-__߃?[mrrz{ҿrGQ --@t%"}v̨N|StLF8$P3\PEM/3y^b}"3ɹ#LV92l+C -3l3ԑ)eX%x?<>j* - --tL4&qXsh^x_xONjqJtR{L(P&˽v+p^Z!3Ne8qY Squ sa(C2M~] -{mf{Lm5:'`6?)=|w|_APŎL籟.Li$_y=Bz?"kzDZ}p_!B%}'] J)(<5kn tb#BŅ9!:NwpCȎn$|_)nSV"xfO*xlyxH%k7xxSspd;I쯇o9r8+[@ -ԁ8cҕhC|E\ -;{Tn6ٻ4wX܍*ɝyyrgEo/(3?do%3$$`BH@ Ud(Q"EED -TPM(Ȗ-Z""Kw;=4s3_sg}ߖ6(M@rAk&Ь%vJ^ ; KgM@ úZ|u9I<9v,}l+팸 O8:C_ mk<b$J.!)A-A&.~OHtOHZsѴѪŭ$NVi%M["VxsRܢx:{u>4 gqYBzt}N}.ѽzDEģgq%+ġ~ŢNy}d8/aKbrg*bNE} -A3A "M~K[4[<~M [[%VA[rNj?]༆ey|1G@(h`*]S@K!M>b Gs)4 N_(| SC,u%7$ђ4ų `6уv-dwCaآļb1a11NSaȤϋ8!5F -ESw':{U!<\>y0?*>⎤3&C̙",\&57K?GӚ -4JC96g! -dSCI23!rm3A{Z"%I cfqdZ$-*<|6xcw!^"0Å("qkNƤ5!96"M%3 Cso#:24s4/%RLZJkM[f -ESjhrٓ\gRGB %xPEWjI],-VI^T0 GFZќ^IRkA#VN,c.'ZϕW:g/\hL1$iRUkkuRG[bNڱEAΚh˺نTIn}Rɻ@S3$( 4[f\" h /\4DSGwΆ݊+yލCF3gDv6gTT a[>u 4UFhF4B@?hI| baX_MbHДt%0>BS .z$f*|ըj@8:FF0'YPyH`pΪ4M LH9:KFf T{|jHh#OS4puddq'qm*i~RRB7 ೛%ljۛ ZoIq@>CRM}jP~D&%x8(D笚|9*Ŭvh֘Ws/wQqN2,AI5F(SB)RV$M׍luxUyd./(ǘn+ДЬB݆j>׍l[ {T38؂r99<cBvOUdN[`(Y9y -6izEqe-Z^Yqխ暶U_WݱSv7٫w8vC 1r17~¤Snco5{gκos~?.x?.|EO<䩥˖xz3ϮZ k^Z~Ɨ7ymn߱s[{o{>Og𑯎~}Ϝ=ϟ.\JJ]IYWQdg+/RKrR+kAݔ7) nƃe-ʅpa2b"NLUV܉w+3~ܘP~< y G+K<Ô+/b:&e+8fMy[sP>| T}<:I?().^J>\ͻ%~__b2lvǣaO G8#1<\|LҚ7?3' t뮶;f[mq&O6}ƽfϝ7 [xe+.j[ȤƟILiLT*Nhj~o'G~83gϞ;w?]pƶehbm֮-;zW_5a3Жj꩛sӲZdOG. 54PCC 54PCC w +u%^]/9 _ԏ-~kwe ܝVOѢ'~HPG VFծ=Ͽ1}C&|ww>/n{y /Mٵzo.Ѳ{_d'װ6Rk]/޳̾{ttp|gvzffgi;fiNд2/AoF)TLP. E["-)'-߶g/yޘᎀN"_ -)Uka"a>W~ՓĢ ?J!&vezzc-̣>$CkSFkCe\ )j3J-)|ʉ鱶d(;nZs>w'C71}fDmX4 >J6 3O;F.^hW}F]υ -{E"f(/c`4Ѭ7h^!}w>85KhʙHAΡ 5.-F\ |{Gq{im=/ZtUppdK*8+#KD0 -3{717@AoPa.57d0~DK2qH9yBCOmHLU1tՔl2"8dX2, K%e( %6@du= -םj^A\ˎ*$,!2.KGv[=ZP -$A=]+#zw^ XaF*bZ*SRD &^\4h`C͏@v~'x<\վAGi]8^@(WI<}IXA-edYÍDVa( e Zg:8QCHz,I^PQ%xI-02,탡2Ad jk.s[g-HQ$Xi}yJ&E|Ne2@ZFO AF# zw/؄9Ќވ0RYeJ($9J;C`M􂜇}0 P/69&Il됼:y*LYT~?W@lͥt%SYBfaC*Pn;ӑW_ހ}]M*'(bN)%O2qbzȅ)}^KgX $'mo N_u_q y[r=P"fUdVp=!:qܴ.K``ZJ s^9z5-&i *ઑ9u(I#ObDQHnƖP VKE2jVwn '\G&ǼԲ֠m0NJ\ɰuUH Z %4Y@" 5Pog1ip`䉳ߦq/g(MEɱZ,T"V $KM2TjA})Ï9;g/(Ė>Ȝf+Z5b m @92v~ jl̆q'G%7B#~̇ސt& n磛#XB. xю?S]1a^‹w>LpP8:H"Ol@H4@D E> Eߧh x 3{ =p~@bIb)y`o%65~) -}OztGr( yĆ_ x {L|@mT+5s7*Nȁ3GR]xڅ)|9x^d\ \dyb.pPdmkkm_"8'q*)c{&B?P|5 -b} \hXL35j1|%/h`?b!4У( ^@9 Sa6r%'Pb 5A(=)|FIS|F!'AcIn#V4jBkn    {C.bE aԞ=ag*"tVP*GhHLf)sUQ͚H%PY~5[y6V!zgkhpwK -Ly}\DM3 3]WdkijJ$#d=U$yA -7B-P%P_6`ׅ3$}N+5AIL62U`#%yWFSE E[V\Ks2[nh`ԱCbx. 蕽|Đ -Cű-NV>ߊ=jVy& ޠe=ή0ۯk@G -*h\̰O^LA m(U42fwO'pxa0|YPa47(t%1 Ο;\0^vwvgԟg oB l;e^cdUd ~Pb07(PfG?^;87rzĸ~_|)8Wх5SSrITdC!b@ As/=s߼tD[gnyQAA$LN'3 c8FBm}.)u#=g4b4~noUc[Q8ܾMYBy͇fBHOI8t8:K - |H{ȠLdT}ūoݸ\7gMӫ[e`Gp=ϡnO"@EdYs@\4yjlflV/o.=ٴBj:*n%}lNmg[SeJKn/T^P@QQQ@@PA/],YinmyRؽ -e[ -C>yE@)H;a#ssEfKϖ?,?_V3|~lEfAx8䌃XH?Br_({Jh3[^^0_S 3`p^AkOot7$磐dmÐА -P+6/ -f^ Gp1~)$T1|RB.玦TMI千.YoA777SCkCɦC ?#4wPO?Nfo0qZbNYLn~(VbOKmkZeu8MB ̵Օ??#Ȏ,kNDs:#:'>V\9Oe t̚R2'L掞8Nhmנ镡1!?mb#~GPqEfV 7UO$K.R+ \f9\cLu%uMXyߪoNhkGWF 5Ak(9ԁZ$)93Ε4RfiNb]6*MZInAӉW2v -&Ġڷ6[ɐiuL Ye>3YK@e6rU/"4 SjbMCb"5b@ ЇIUBEI*w:SW.+Է[i>9Eߔ+UKr7Se@p^*6A3x!Y!,!*y-vANEM&ACӫ cuԆnvC$e^X_/.bm[rĠyb g \)ƴ&} IQRVmz;hgyn46,bhغ ;WB;b>tv/KWt:A`jNmg\}CEŴ6NΠ7Ҥ}4E111t"/,1AaO\4FٴC AJd2ȫ(8Um3R HaD ذ$[n+A? - cSΙ# ͺvUD֜Zא )F/ -(F;Lj! -14! -rfס^w Y]1|6QHUU5gvŹ=utsԚSͳe׈2xRKFEMP81H|ZOgk15zq4`.dzXFPV(3Kd&Z/asbP+KVPBCǎOf{~4]=|RPIZ-` I-|M)z圾ЂxME os?߻IocA?c)ґ]쉗RtIZbAe򺣕EHE)B)2*AW8/1/o\#=s#ǒF#l{t%/NՓ % ʸtM~aB4|}MG 5 qtl^44ra8((>' ) 1tIDIz*5+ @};XpgӻG\^km'#!_ٴ_DTXrR,-s4A8K`qqY9UX[~M6®QUA۠]tw \ԮUGg<6`**9{".#u 7 '8́j');m{k&h ho''DX_A!NW1K)LY[FfZy on: L㆚ P 5ۗ@+@t =  򆶤YIVS~AƷST*e\W;^^'cF:/n΢wt@s[\d FPEt$H3>eOsJ0)/(kh@>Ӭn fvhN1{vgo'h9_ >u6EgZcin=aqWu7h4(N~ ="l'h0SFI721MGMl/ 4d`B mȠ84'<@sgV;5Q9Ts ny*rQ(FRiھ,&#{ZsJgK|ݶ ۷6@|ftgB&'=TeH[H}U{˚6˪Zs}I/S9K 'h߷ -T7P1!O I=;scPcƪQm%WY.(IM7ـ Ad|LgGX"nJVx+9J%rS}Zd5LV%THdHm/6%^AfdP] ={}-*[[|SJј*9(#6a"[R)|Υt9Xe*\of{{8 o@eЅ փos{Ȑ選 WtEi2ȕMe*icAfa<&ZOki*QCP:gZd`"/zn߽ʯ'mytSqф̚t^s4{g%wQ5g,lmEڬJgd୛ m?gz݋NP*|3I;! RʼnC䖸 5mkey_goMi#֊NǺ_ъbZԊ"( D K! ـ!!@BB "ua(nXQHU^h?ܿʪ@-g{~o٦w7iaݯ'^ EQG TŶȟEa|1Hx]&]-E"͚`^?eܡaWtLmqu~)~?;I _)OԄi_hY=A.3+ݑq+rnW-n/^2禰gl}'=$qϛ2 &[ftC2.L?+N -z*)ShSes s -)[+,vU%8Zyps T z;v6ُ.3 -#0l&. . x D ꞏ|ces`"5^Y{JOD'"E5 2p!8 ;Bq(7n\v{>F+,Uyv.5ก -.I- -vA@Dl 8p}!:.uXb,15(`ռbYȅK2Uw ׇ _ yC7^R@qX;o;w]8|6s\FV[a4,/Aqp[k=;\ȯ f+7@!H26:C6 pm mlO +8{q\ׁD!P@rԣag -BdIR&ԉqMYϢhc.ƓޜG{a87Nso5dX݋`J#o;A ccx⇿LNHVvL7(I sU g F3LcL.SITS󞞹's1{.bXܛ|mz^y3-9D^鮒d L4T ~m8d{嘳@_h[;V'(PJIki)%F'\WTonuwWIeU'z+fjol/c}I6K m+ΨU\f\VnFeoÅwE*I> fh:֥ݰ˧֚.n&(袔[1Z(>D$h $k+{*%KGuS[o{d<5mq|셽qj??gpzB9(RF/oeV[׃ZE-M]5rI@.i' 7crk]:_Szp؜q봋sd 2hD Ӌ>n_ҧʫW\[1(\Ax*P& e~Qaўw5rr,` )||dh2e"1!>LpW1CBzmM><\( WyPzѿdf--hxomP1^R#g¦iIIVD6)/D~R:.rЬ,N/TV ֭],[y -)u߃'/RBHoƒHgyQ0 -L=ED] -DI(>݂]+Q[W_M[f1-cC\ÿDa)5:6`5\,+E$Eq$rV7z߂jZ'W ۄpN%4X`E3@D߅P Y &( Nv /Wm FI,ˣF9"/*J~ ?*\8 'C| X d}51RL܁i k|s'Z8B$1"۳ uod8:;r8 8DC+D8CN@;)/S~l ZCDݑA5"*{&#Ud8p@>3Nl ]80 {`ma CVsX@s`5Qd3c&?.n)TC*בֿ$\)/]N`,w[V6/SW1F@g JUTC4$"1 Bg $*AHP ' `jAj9H7Z $d;A, Q^jC>Ak6*8$l(|g<59jCo_j@nEDioK 0W, `{kX3_*yBJZJEZ n $/F.D>y;5?5HoCIH>,1Sd{jC<, 5ujS h5<:y)!j@Ky4@ݿ4$ig>3MM$" q:y;*CaӇ,.1ҽ?'qL.\|Q&$NzEseP ONM%O_P@<Ґֻ<eh@!Z jYu&o5C\D.S^GU$ͅ`̐n1p=pS4\:9x Va dYˤ~Hg/$'gK'd= iN%  t=n?e5&S74!i HCJ9@ї^\Z;=z4C1O# - FI%>aOЀ~9x,&i<4А͛lG68`H7K -ANmtaLs)JM - - -.QY2%Y")u"bb] -q@$8@50Eڿp0̿bv9YCu7DrV,8dI6Rr<ĵH i(ߴ׵G>trÛV/,أO[C0L]5SI =V E fKt XBkUSjOL~Wi_  鶅 ^9k>=퓝#ۃ͑QqMzZA(VIXb>Yʙ,uIr- RzV]@j -齒B  dW'`#g! ƽßo=UǹC;|{Z#"[o]MIjRE6') oTWV(VX5֝U[++h(\Aj|l>m/^7K>fs,ؐ'NYJdXʮK2_f dzh F<ߪ!zA=P4;A%r@Esw]kЙM? _p8#,-:Ym+jQYņ<YK G*hez}I$jp^ixo\GJ9t[ivO=W{y{7QUmqYd -݄/4s -b)R$Ī8V}pKsةUu_8t#Tov4t_6=sꋈw]`X ҊsdU4a|S$$E#LMaT! LdN)σM~kcK_o}vvo8~,x8<⻘4j̒byƉ_Qy"Z4`k0mz{i4hހ&ǁqܵy 9O"n|@F 'gR> ݈6fYM\d2m&Vp73pp,gnWA8vx2 5c/OOp>D962{"1>m"S^gEYQϸĐ҂z6 -v|yl@jGr j`bCo+ o=]ޜ3a93WgC3"㧉1ԸkxI!/)uJTm sE7Cj?EXzf?l^s_);xًٳa'fKf`cfKʂCgy!$a~W}g{e(]P;# Q7la -8 -` xd( yBr&gp>;~`}juBR*G!lu))6<קix A;/CԞPH i =H1= bPz\Qoh<-^(eCUM-tZ':-"%,X8.λی-~^m灴\qJw֮ udO~q|2PG( ac>lpNj2[Ke8vGEłH "BH)$${$!H*(( X.l"(3{9W?p.Y{ofF0  dI_}Rb/Wx"xW]^ <|s8ųq0}<Nb8!cVx} sw[1,b]YHLelQuҬ`ZdY-IVQ¾guDY@< ␋ -_x:[9pˣ!5Q-e'& -㤞-Pq$FDk -(ܚ|9ǻenkxn1P` #|"Ȝ̍j]w{MEP[[L('1F:רgKjJPER+.4ŧ3M7XN-Kt_>kDP"ga^c'qqK>˞^=SgsוGŜ*OJ)*JS9ZSXW -tr]:ǐ,ȣ+*,4EC>UuӜХKe"[q`/j, -IgMk@76޺|tŦڳ1ѥ|~y -M_La˭LQM-àͥXL$}9UBȹn&;t$=)Y-0epD`anj{9vZkgoaGQudC g Kv1[F?!RS -zdH4%Y0aN8u)H d9s8g[lIJŴ\u]I㚚G1hhjsP+]ռ\}xn~sDr^G{TAPI =uz:ڬ5>tk7ͤ﾿Mw/uk zDs7u#)y)6YAO9e;푷T֦P{@!AsSwZCRs?U O>Rj&;ߨ}M[Z -W}^w76MUK,Ց=8RAbyڰsԁ ֫ uTqZV"D '(`A^Iyݿ20duQ琯UPi5w["I^OjfƵ<ɕawY9*y;zZ]k^wiT4لݔxwg 10dBVI۰ՙ!NG|=xa~iw\p7?W^)m,m*m+w4XƋk/ TA!GRpn .q.qst [q3c>VFn=RRL{ e"Ibw:C/8hΎCBh$3b\PpJx֮CyK2c~q_vdrT]ptInpF"Sp},t66!l"FMl I3Ff9X!AN{H+RƍQgSwy*wlHڨTG= cpsdX"[,G\Z $7@t6KH  -/im>MKH{ -D6XkBA2]d (["O@~bN{@i 9Z F?x9 ϙaciǩF9ݬۜ{1HH@?!i&Ri#g.Qi@sTnBz!<y1v> eJ ?Vެ#Cbhw/e=(}z,~L:%|HŞcdA@6}GnRŨj=˱j*n_J2}rcf32gҎ$MIٔqQ~7לG᜻ vfOJsE]Y*HPkPNaZnZweCI~T~%c"7*kHNT$Kc͢ܧEw/ sGxvt'g@B6$7ϰ&5oT#G:i)E edY$oH I؄ld)C@+R>}/Ç}07H^0iƟRO~O$,i,K0)QN|BȢ`z@`/A\$%%!5v_k]7t 7S.lt9nF f=ް|܁Uǵ6[B!ڐgiznT[$߮sڀxoʐ8dgWos0f3iApZ@bڢ2Mq? n.a~DX+"UP"  "d&R0 w~T]sJ/)h -k0x QbF-&*E jQQDkbaĠ8?R9Q_3kỵ@` ܦO_,Z_t86]aɿe?'#a dëcV[L:@?}b#o$`W{tC -5@; A_m@%kPkj~CfeK0Jjn@A((g4:I?|kXyI*x $%Rtfffjj3Q*jS$bZ\uab'q(\} Tp0zSs( 2A hBmT‰c4탱!]~^qD:M"!#M)Xag -'d&n,D#fa$ȋO0K!G>(B'j m6s+.\I9MD*9N` (7Fx!$fツ^kx]2_K,GT-t@B{,Z_]$$)\Na8XE= Ìzs\2Nl숄^ RMVBd2ePڠfV*`u}P\\cB瀿<JmQۂG0ց~Ӯ^ 7Pz<^O$B°7yi}>Ǎhc'|>B':8<WC𼍑2M0,؀oNXׂ䣮wvkʯHH|;čWH^: 4.x#=h1, -GrR:" `q'yq~=@$= &j ڐw c!o& 0 *r4bY0CFsȒ,!M[t=NU")3`^D`0~폰I𱤡-YI|89H  #D:#eDN3afȎ\E%+!_q U7xw܎ pN}!kH) -'c-uh&W؁/1("B`p7Yke9⬐˶ETxATGLroc?KO~K RSS?{i_c#:u6ᐼJUOjoSp -'r"Rqΐ1QcM#)'XkF/%mG{~B?d%KD.vX5u3Qi`slBE|q볢0H+z/}+K~?Hcd`v1n O ?dh=L-6kq=NƙLR -=d,GJfb *`[%ƶh>U^ذl`=>ԧٝG0odg>$nޤ__I\2s)pFn[lu4v?5c5vwֿ) eG+ ˙%5oDH:2p~LξɹΧ}⏰O2t.KC 7:y, TzdVG[ʾ=VF9Pis.)/w"`8P#~}bC:1J"n!ȼ=sSbMsF])c~.SPnrn(W%3ʓNcžQ[=T ,BBxyɮht9e5hp[Ԋ˓vja̭J9jsT}vi.|oC#$ -$Z-2dAC.q {'i:&C D,{ږ^;2(+r9gJ' -*GUYs[eu-FvAdOse}N6V i(&A;}_;c䰛p­s}Vt*YIVe˯W6嵨~[TsdJiujejekq@H[2YD,%!iAGF>s:jh[i~W#J:Q#gW *J-eٍŻuMj*UgirYB?uz@Q5B];sk:~#-4)A)ԡZ I - -*HDP]@?8*~Yѳ}ssv: {:,{~'ŠBzjZƲԨ3Y i%9ՙp0W(D/D)췉y@4!M?a{g6-—KR.~4qj4h^\:Y]_^+(.*N/gd)ŒԌ 񟱒@:mCySn~c+ǯx`q_8ΩZAd -ёTaiEfFajŜ¾#E%/KiG $I;8-88 w>\/~e*=3rpAO^?۶[cK8!)LjFU^Y\Q/?//[>_LRZbٛ$8I rԫ⾶oý؁{q{nvh䘽a^k]gOhV0qјĴdL^M0TWõO5Ki1oxU+q@6\ET)I}QFˣ{*޴!ݖ17ݶa LjiO$3#>$Mr,ȅ#q)MU2Cu6d7m\N ;~8I jTDfl\o,jo: {FeDzS{“zbb#; WקjHjNgv̦_ -8$t%diF4;$ݑFSh䑎T^Ŗ86_p& ׄ!q쁊D$߁!c`V761=/{5JqP)^^ >;JBf6gdtmB᱃F՜ACƾ,ǴPOhޝ6wBš(whñԉ9mb%~cPI _}8-ۤН /οQKrk{5.T@%uR=w1щXE_R^K>KC  />/iE%FoZgaAլ HkU-ɫV"WCW9FHՔ}B[Z~Z/9})gOrveNfB82GuRbE| |#5lYwT [`wi} ӣ}x={ɏPcMeC0cy^a[I2ކP_B-7:=P&\hΆ80dWPh' bpN't/}hc{6m@]Ĭ Pet7||ϔA$י T%OX黀 >]4.#`\5ƨ LϬ_9,P-R ,?S@5"Ib-adVp'EBP>0O]QM^[TzYuQ Ɛ9! I@ @ A@(rUZPE -*Ȱw;9]笇ظm@X  o#D/a$vla,|Fk~`We0;xۜ{!p .B i+n hkrx[6?nǹQ'q-[FÖ8āh=н0 D Aq1O#pR=%~h@m 3@ ҵ@ez$|e[IZ؀ ws*CfV=zG%v?&W0e 'waO"w6x   Æ9~/ϸnl$;C8 T7[ځ|فa䮛 N!F#{4i!U!_ٔ>oA%W;9-<þ$`ODfhl<%n|TQG wN::>r~u.;Zm`.W&<AȍԄȾD WA3JJb;D|IoKIyO%^H>J3*dS -4p1:?,y7s_pyP]yW~1GyFԦЎ'XGE6&Z,L( %;Hi{I 2+F,,jB&)&:Wn*J.eW{;i4IsȒVIT|(0g-$Z.UíN2 +TU% iC -nE>rSiT՟՟y z ߾C7u27ۉZ5/[|ٲ[WjʙN[QM*jmU-M-4cR<7U>42_%di> -35LA,ty ]lrxOgwۂ_;CO=aCAֶ2fS<֨ThX%B}0/D=$קUR:U)?RHӎ1thkuNf Gkf,ںkyWS:s-=hUR*S Y#0deIU+*"0$N%ǘq5@:g6t1f_Km^t?p#`:Ἇ7R4ԲwVW e2raS(hr+F$!ˬeHP<3Sd[X15@ cbfq݉Ř]K0W4t QrFVXY_aS֗pRK qb\&-O+=JA]4_8̗-,qi O -1P= f<^g̍Kv;φڻp;iSe #ݓ &ZJMr`:/2O_^*yNi7.*a^\W<ƴH=;af~.al̽s0W0}Wu8/l_t.ҳWl:j~IH (" ;BBB@aG(Vԩ#.uSw -,0EtVEq=c= bʎϼO;~|}&GPnj'Stbo~~́ՍҴ껥? eUe>6 S9Gg?2ɃVEnvK7rk. ^H -/usYq[[ 7sbMFuaӶ9Y k -U E┆u9&NMit tIn3 .3^9w^SǰVՑ|פЭ37\X%XQ"L{~:ܮԶʬymdmC9TeZl7$chI-if+ qA3$MScCV{n Э _}#/zq|εIJŕJ*-A#HOr{kJxBrA7좑ܭt~NZn2I##rߒwYQ۞7<{7ú{cDfknNS2KR2LH.$ &zrX艨Y? -^3C \?bY>.Ԉd#hݐky˰qooLlqd)jMlp-:2{-O)zIH8!J"HX>--t?x9g#0 ee:@i5 !e96̰p\C8hՇ" `Bʂ,R)!*Bk ;[s@\#/x7){4<ǃ.fqq!cBE1"ST,B%W"=U^jo3v+w)n࿡) ->HmW] f{!և‡ T\cMPCj1de6C!>Q DHhu«)5QʤL @JM 0&jTًH CָCR6 Qrq Zلq鄏 gLQغ|AACil2} fl)2HϠY_8!e+<8!vCKľāIp1\h"G$wH -.HpAFڕLw8(XahS-^dltf',rw6&`FQ4%oL::!Az;׈Qɛo%Cҹ7I{-GK+ D4ȝP*yLa5%B )mP1oL6Ɍ=~iޫԆ&7rGQo1IyCWW/dclLg)BCBt!ő,:飔c}!"LPƷ:̚ bϱMr6s_`kcN8MEqkKXܪ {H @ b B-@"D@D -A^VPֶ^u9ߞ3)1 ŌyD>$ < {>p}n0 1[ n32+$lw} b:XۯQ)GrU`0kq&LxO1 Q f#@O[ a#O}kTm=0}ډ}Bs"oףX}i$6hWѰV0+ -s~1e9XET2K^Q9A~E6fLH@S@V@((C^ -d!o5n3aNKǪ]/wt9Q~uqXN-Q1J8yj^NB03S?*?g$z$ {s羚P?llew]O~{GI=VkȉŔe&tir:NfQJ8Y9$Q)JRR^y:m<$HX|\^ԯsv-K.O}ݪ7rV>VANfgf1ӋjMOu^>/NPJԷ$?IIeH\@\k X -:G.5yionm>KWg(Kɔ4m#%']ƍϬfeiƴ$:7<-3.#%. lb$ zob0[=\&:7;/j;E W_v_U*є(ɧB-K^P•Djω^H;)ʋ*|˔|J d!"5.7 Eg0ri={vUM-ݥ :gv_cĄr5-4uFxb$[ܒ\A?LQGl2d=iv'poٻǩѕ7w6qiD>YP|]>&Q*4qw mWB-PA;?k#t{h5h0phUw-uHy^/;,1 -0idҌ,M6ɍOhoht#$1a-0 pF;0r]m3`fouw)^lw+{/J#E] J ˒B'Q:*(v#-3>xJ÷!a m̝`,߷A ,hrO-i~%s0ɇv9-t9(ax@!p`9 l ,n0aߌ@v;(ݎ[G%];1MοÞOʾ\O%(wƁfdlfGmrޟ~n^BL Ѿ"4 I\dLCpfbc!Ń5RlOh0P¡Ej9Nh8b#MN dBBgCbrDd9CVI;hdFo۸O@p꣞Sc>k ᳐ENCP@^ᆌE gސlB@|<:S!RԨ/Do/G [1|l hf;U:A=*$(j='os背f2N/d~~C]'^OaM)^Rq|m$ y$ rȋACrr]3CS2.TkyP~@ȏA~6dJ -|:a9z[ gBƄ>c8i80 :W=79>Эvc4ۂnAPAu,lȗQ!ѿ)^E*T'* d#d@G4LX( aaV4D{%1K튢|O"Ə y%~Gnwv?DsdڐT ߳`F5}E=z&L`dcn= -'\y0.+\2lZb憘gMOsN=ɪHӞK{*+y&O\0TAtLi/vNuĂ 7ucżsJ>?.\0s}Իym9,?-wnog\?]}oD|$u0R.`ḁS.͇=/4[/[$ɿ(*n)1wƎKNw=Rv<[7E)F$z".5,uL,Xo?T48˽oҐ17*fhiHRRF酒EMs-3ԧL4'L]c;ڣϳۋd)!J~r}EoY{|_y"űo2ksk._YB|Ʋ.͊c/5K9P|>wϹ%VKedZ n)J{4/#/x -b}_`߻FܽR|~vLU k,WTy|zߜ_);qc2i@Vs%dM}Q ỐOsڷYVp3? c> tF}i1\Ci`mrkU{*7iw<狹_(o3~n9h2m:oHXնf>L0?I8XUA)ғ`B(@( =jjA@P((2눸zQ 3{f{vV|>_NnMF*1&8xxot~ |NΌъXQuTY٭9.}|gWF>UVJoO&51/'&Tſ -NZ 4D#/C -+2TVkrRtLgve뢰%1Gz ;ryr)R~1)ܿ>YƪLa&KEļus->TC"{٘p#W7 ưnA:hO6zIw VzE':J 9U*%IeQ'Nt=h/L@ -TP![ ד`]tk 5]Rwҗ]&ok7BۣKq-IM79'LWBȎr0yL, -M1e?0Y~rD#CdUV&z 0_@]=hxVr⸁pD0`ƿޟ:esZdjJh*dAC1b)VO(P T{kn~x{oeFgC5='ݼios~)wC,D쏹k5t$9ǐ27zO17ml36E|blՋ6<ȕ~WNP0- 7HP5 #(^C}lgIqLO΅sd?8{ &`V`ǘ9f32g̠촋#:JR%n+Wq gC5(~/r!Z Ɯ% Ygf~,"/|&x6dtmGUnߣCnO6p`sY9P@ -HUY.B )RyLR7*71[hP),SOeNwen6sew,~^p\O;Cde.|-{2!aYb3V]5+ꊟJJMWӌV}(>o;6kb6ە/a+~*p<@k:> }Kې_|4kC:(r:k!T -5C^pZ>}w <H[_Hh \~:L:IvMQ" -ְD{P9Jڍrw2Iu|u &9+m8)@ g)kHE vȜ` dYTg;Av5&@ $$$6!)67,E*n8RA[EQ}k=ťӊ֭Uq3_ۙx;}srpig0 bɴA$ -ZH2E1ʴ JYec'6PT9I~(“Fp [83ؘǰ' hiCzu%icj&v&ON߃Ѓ`O B Jπ_.xzǂ6p0~b8A\4uxg3O>C|x\-,@0Yï {M;H3)W;=%wÔ/x0ȃ&|<BDd,H:τ(} Xict `)$- ?&^[?i >Th\H>D,Ku YB !2m@½V"i EknٓWB_ a5W\R'H#ݘZXc!F](#,2S֛CMʆd͔dpG#vg&W߉ڏux!px.S lH`8G!ք`gr{Qv4bgمD)t01&*4 _c3fE;v7{^u~%;4 sI\I>{7s~c -RV$4ePͦ24/-!E: >&ϵ|3So"j9O=w60G=/xߑI;vM +3 " D[1`@*&D3>+ߤL_$~YT|?V.z}nFs#b{=bwUywTyߥ7 Q> v&c a$7d;3,!7#ўL {g c NrPչ_Khȹ&v߅s1D <}Ip"Xˀ|ăs8Ép'4!ιtl2K %dsobɬ&?$3K/w)|*Ι=G :Pui㟈&LUw( dx CIb̀B R2 -{ƛ*WI5GneЌeJѢDNgN˽^w05@rp_Rhhɠj_Ȁ꘴?lww}Kop[b RH~6[EFVQlƯuNV+.Y*Ns:v(@Vo?,r=K%};;RC ˷W$VCؓ/M7&wУ(#Qo̩G06NX'3ZȖgaks&%C>_GT䷫I+&gRVRZfQ6Qmv>-"{9צU[^RZ*^Q$ސA.o9wGxS#VD5\j}\?!m,DPSO;!oQzR[3~:7SohUڻR]\Qo+/]%n.Y'k*ڤXUMYW0Y?U)aDm{gՕAP_&(TLf ֦CnAlMU``|wBmMIs2<;?n-_[])XSY/^],+oWԖ~*鏬(9]VrUQ.rՕT iiQohjl5M]_M:4:-p|澮PѶ[ZT.kzlXпBаliTW}" aQ(B @ؑm( ""PYdY(.Pjg: eLm 8ȢTEgǙ3=a>~s>9 -f?pfތ=!)B3&w7- :íT~!3߷1 ײ~\btqjZVWdx,ҬdX]~at,^}w:}.();x{Br%FeTA:']Hx uE:L8˄M|j2$Z%&EŹ;itK+L)(I:Z㟘75Qp|o~ ^BD&}8jh]π4\nAG byэWYoP|&lmM95qU;U.puVnTUy?? Ȫ=us5:r%j8Of.-lHa^ttz/Z}=b]Zfx;:ƞ͒G7(=:}B|BF:V7^:{Nx -۵W:?yO^T]ׇ^+F5);ǃѽAOﺴ4BU\ۘ{>ȔF|rT^^v=#}#mJ6'jEVH]r.;hHO2pl`)0?cWh-KjэcǚD&Zn*Q<ZG+2[2Q)'9O7^F;uߑ.> g_E̟d+?Āp{߆L3Npp~; ơwRL2,X -kmb>E !T*ք!>8^LI dlT,q*+N׶>~LW4Ӡg3s'|:Dx ꩻDa5`ɿ | 9_!(_SW"y֑vuc8aڽ԰ye=c\\tm2YYpO'-Ba -|P&(Pq%HђBW=iS `0F3 1 -Ә+{XY2kY|uS}.?@O߁2``Aa1 -5ZJTP+Л^4#h=up,08XKt0Ļ75LU$;x #0%uj}4d/K P@領F)AWJ) (t" EƖF;R!"Jh`8 AhyǵHsq'*.Zoω7r,ɖXD8(g?E,A660G \ QJ\ Y ?ψrȝ/j:YB(>\E t1QB0MƲ!Y 2Pͺ(EQK  gijoĨ;Kx,(RfBҜ0SD% ݂5%;_t߸Jkx(i ZG>b9 z }z3u< -qz:O|I~`V=.h` t "7N qQTM ֆAH$2Ī3l5c ~[>`-c5Sfe~ #Ɯ}Ƃٽ0L ƋBF cJjH}1@LIJQz#r߇zVM#ٳn'AF}xiۻnzЂL0X^W6!``U8ߐ4|3-5.!q1GQkG,7[޸VNa{rq&ՐΗB;_ y4F=֧#TX`̿6M{W"H7Bd]沼5_g.}ʎ{fk"f|*k1vWZ~޴b.#" t?>1>Kg O.Qx,ŀ^ `38xػ,|+>Iq峜DKm%8opks=}2f43J>}pIʡ^~3G 4@x{;W`2@_VBkcڝ"_!y٦9zw,;XýȒp>IdY>--\!BEݔjoBWhN(Ԏ}ɂWD+,z*2m;xBa"4hR~/C);ªțfc?]Y뫊]H[@Y1BVaߩSGB:j&Z4y/#g$H;$l61ױTW*H}$B%M\(/, - nOY xb - ;jp:DUʎ0\2ckY,ͦ&k\wUEbʊ:NFQ _r*(VP~[|(B0l5g>BU t]*щvutc%߱0Nkc,l 3R5n^Ԑb]P+uHd|&3e#30x=KvHU=ki;m_0ptn.>'n_Zm}W ->H[4@oƤ`GLspf=1Ze_LRs`6`a(nQ5 S≧3JӾU_zk;qolcoLc9a91 5Rk)C:{PWX\(nvW(hdDzs۵ DQ:8[3.O08ĵ}ݶYٶG1ֻ5]ƶD\"ΡKԼ -*/= 0"&\Bֿl!:!#ԑufq:': ;#;?:kXݵ&$F$W1h|~z=}?o ? n3b{˜XFӛ̊VsBs>)Kk ~ׅBy yV?Kv@x D? ŸBG0qLd0%c Mc{ xgu7v+{u+}u+5=Jp_A_F9\w`l7@0JttTa4F1ned8 Y8ebIeI 52@cs'?25P@` EԔP\ 1l1 l01LF>ba c/jwJRC,Hn!? ۞ Fz0EYf&\TOal>/r* QD('UDE -尢O\\DEM‘0Qn ƹ28_BX=&P3] ^"°O,ߨ[VeJڤRUUG/Tgs⧪+⇪n}Sq[{jVwF@/eP`}\zi=u\Ԏc|p<˘VtS~U*~QV@do}v5uv^ͥQw5y2FkHWɕ(az{tGh.R0#3{g$inuD;nݽov%n=N7coK;bOIǶˮޖ]}$7,5ƣSk<:OQ0-mH8&dհd'dXdYIgs3e]~õ5NW7HL4\rA׭][ަm}^9U3~fݐ{S"6&d2:HF'6Q7t̓МЏyTbq~t[]͙i{iBέ\ΥM8t2&}w }q_GRJEϺ4tKGtfmL,+zwNq›NxLdnG*/ZN~I[rMuG5}qIK@H &8L 5! !!!!B-D~AumγMzvqwHEӒԫ|90;Fzx5OռQQBgC$kP|sKMgZ;> .=w$e@q<;eb6tU!ŕFQ=.Q#U"tGr VMN|D#2fo+) ;i Dokvpa2v\wz`Ys:P{qG2ˬ6d:jH343!ZHXi\:!$;D0ut [8?^|WA ,9ai;d8У;^rji&F7Q*Vnbh -CJdCJ,K!).R.>H_RT -DQ!5({AW ie$J/wwT_ZIqae-Q(w=|kXhރk}twKfWvzoUk%ƜyTe7J| EueTam5-hftd֌W RUXz͏eDL5;hϴ`!@[+{} =L۪_9w^ܧHr+pڸVwU9)ECi6P3&4l6m&lbB&fBdk*=[\?ޅ;`@Iv0ʾd Qџ\ЛvPԓ}-bnV>h0-<m[8u{\r#?Z_#3M/eȐoewbp8S-]YrNaUy,"_M|Tn'UԐZ\&MaSހׯT%=Oz{U z9gIO1!E41C׹z. 銌hԯ-iw {=k aC,CRDNئC -GgsYg./1n_nߘ7wϰ_d8"i46[4X\3 嵄 37%_A_Kn^ ,Pisc ?\tN B`hDSEoOu̐&ʡ'Q <8H1&FTȅ?G|&^(=7ت.Dv6ltvS!{lOVԆ!aP~`*ZpӄqtL:R͠LCsR|I_EuqӱKO,^&?u-Ñ#w6N/►*♺2jw*vEME4ʈhn -ҵПƃL##Z3p'S2'2h,ď,Q ;mu\ݾU{w+igaˣlnsۧ.eqhWD>F` }lAmstl6+Bx4sPzd\yʔŊBb5e Λ]7w+w_cmBKI"KPUvv4 t6L睦y 4,B8,pc7p5aFrD{̔=jG|Ŗ6\!uSiz)kN>*ve]]q+aMLtX*b72):F[\B:qP?Y@PU/bT5?F37Y-gUYv|cVtbYk25X2}ۗiӾ-K;4NҌA^6 ru КHW?w|98/#j8g> ̛fM -KeKr?R|Z9E5.fo/u$F!@n ulJA@5@XYE#.`ǕxZjUlF2Z;sng.8g>>&u)1$~*2~DV]Y$ILLl'bopk9@[D;W"!+H^૫QMmG3ӭ>ȵNSWV:u.NLVH:.K$Mr"91{b7P.8EC`{Jm]inTśXVʳmʲ Y咢LSAFK^z:kQ;kiZ2E]\PUnZV=CU`QJV$YNM.)g')v'(ds8]ٚ&3&I*`Fga4g˨}=@W:Eh[+WV(DVerی"ԒJiRqì5Mh'*o{DZŜb'z|K}jpvAH{WALl:O^UniCan4:vfGɖiY6I55تzv++ETuQOL9DU0DR/i?WS (l BԶ۠rW~>oJn -㬖u1D mRUjNaug}Pw5n|5s U3b7%zCt}v=7[*J5PjfqoEz S:BL6ψiO3ڐk6V*Y%]ֺ)s`7΁-Zòf&^l'~L !߽PvK'^e.=ӑ#Af'OЏl=R-4+Y֕mYdbkufM_Osak%[F~mf6zP(hU((H"y5E/_fm7A|oi=3zj,}{=e{g7>=f>yz LwoTy#@D rH!O.tȇe|5r B<x GhfL{'0yZLA8 c< -0~2$o򏁜a?O@ ([@z0F=7 30z ׋z9cQ- 7ö́1j5򄌑+)?W $ïK(ۍ(0` -2=1 |f Lmo08qLJ8 ƍcGg 0H YG6.Yc \#'+q/?dyTSWK¾!/@ Z*,ʾHHXHԸТH݊8mک^ENw~NrOqw¢)^/  (sHlCbh&M+_<8 xKKO>Nctf' HbGZdAC6=|Gwѽ8}|K ߑgcr?F>c!SMA\=iOcOg#SbH5|'.5ԘhZz%BSE]3QDtNSEWG-M1fO u?Ax}aM>nۓO_)S 'zRC*}I d+d[}̛~?$'7$XW<.z60s;pv*f} τp-#k -,IK`btV`Y.u˻w52U&߽6]n|ѳMF<My~ozIfC޿Ʀ76# uAmaG-Ƽ\%9Zy%FjM0=favo}OOՀ)c>׬>~?l\Ȃ aha߿~}'l_o0'([wb+`50@hlFcYqeF9 3Йۨ(֑p< u}ֽK{BVq -nn -+ogY^G-=w[k [?0^c_t-ě:aqFbe=-V؝՜vkNo o ;(61'ǖg;͑ض9 -|/=7SЅt>LCO!l/5ѓc;)մ31bGں=[n[cm\L_&X'\=* 1X쁭! Bwa0$Ѱѡ 1&T,ҨCh-Mfٚޔ$7'V94%6ҫVovZC,nKCQQ}܈.K]¸c]"0Iiq' AR :Jm(sEM^ğPи(Ƭ Ų\+gjm܂RZW#P BUQVW-Su=#*x!Tc' jLޤQ8' •\CT" RFM.P1ha, 1(6-+Id,[MQPSV -;ej׻ȵe=nRq4ew8],X\iP%28Z2 XNvQSK髂X& Z:\Q-Qg9(J+FuiWIcn(YS üIwypB{a4ܷ 7XFU7(oE42 ÍbrkS,klEV^UM*U.$W4 *\ݢXq04k 3!A4(ADqpU֩Z -X+ -8"8KlUk+.D:Zu}_Z?y}r?hL1+'Ǫ$;LZ_3~Pec^:A?iÖ8g~&h;+Wƒ&^I>7AR9{u{d*`}¬4=f15x/j\jѫ;|v G X{EwϔLmn5l%$ ݓWoy?8lJeҁ529ega:__qڋQq=C89NwnXۚ]2xuj8QgCls4و<+al܃?/ b, q=0DGcr504/"~}Ts{re.r,EvܜGD7H}zQI;q-ri9Ѩ }>mmV ⭱5^tWtSYNq̟Xbߢm_6*m管;k莿+gs' v}8 .B- 8Dz 6PF mmmmdۤ}hͮnyc!xP:շn+9 -d ;H΢l@@ѺEA0[TV%=вdKƠE4++JDuIU>%Kſ+ -T Oﳿ&3{_3[_ wE .R.uCKɗ"ۡrAWY E ] ombj/e?fSXhf? rh^U?mwfpػ>pbP٭P؋!vI/3xG@S` -j'hjXU5@¨#񥤆5kxk ^]zB/Hf,d~Љٖ@ˀO&|P:t^;5o -@] a\:$dwXNR]% -RJ:RpUu~ߜ%Hx]/dϦ{̽j  ~O9^D.Ue纍.O<Otc BTPwk`w%襸MtlVGKf#d<3#Kwa5,Ն!]jr}va2v7Ἰ}[S-.R\ -@!nӀ\!Cu~a/ZlEY`<7"{n\$n q͸Ah?J ŀ2EyuŹf)4S6b*B:Ul| 2ۚ0#Zŭ i4UT$wT9Si̴MuڴWUb*PԅJc~ 2W :b\Qq}nE%󖱢2YQjPYl:e^Ɯ>iNs8ar8.hvO820|aj|tmGF8BF"xY;ը&(n1PO|3Bq"zQt8/ǃKGhE2 jĪ}Eb'{c\jl!B!$K@$6Ibر@ 8X$vl'Y&vL=i&I:Mm433{y9^+b?uUL$L(8/~?b.JϤTJ> FI l -|,Ki #ޖ_LAYB e"dDG_ŞvQe sIZOKB/yȝK3kFJ0}n3уL̽{T -rr\9fW 9eAEEr5 z!֜l=+;ŝ\2S cr0GY)kXP!JEBlkdJ'+RRD.0ԓy 5LG aŸ!5Gh@h@DЯ$a!0\̜/񨻍(#AḦ́˚Ͱy 4iӥr)uQL6WlzUDQs=\,+ {xw/\: >ulG<>G~=<𞍄r98 z1iVIEזƌ3SZPJ\ܞx"Y|RԡZoS'&>Ij){|K !hQ< 0*A-3^d hE0cJ!MaCqG_NU{ʭ.m#۩mv4BfFԤYJh,]KNi~ɦ[ڴ߮%'7؇1wޭF0w]żcX[kN&U&VfG TF4nQZjFn5r]FЮk/'Yt6~5F_EO,g50_.|\}DW1y+Zu/iВFEtUG9*=QYhc5T4sm&Z@bbR&# -ӏJ!@xU&K>zpu6͘79o=Flc 61]ASF4[˩ -ʪnX;恸Jqʟp|&]ՇȗIz"CG/_p3u8mx 8لǚyRHG"^mQlFY]gTֵL}qq:46ZGHX#*qe_k%xa>}g6ּ::1wvw ҠMζm֖Ljn=LnhG; --Zeijg[nAYè>_b9Qe5^Rs|^b;Gxa}x&ּ+?1s [ܮhhw~{I6W*֕IvFVvǘ:˩ -zy{-ns[ -[gDdZ$E,,siJg|XHCBr<(ds r뀯hf'07!_R:WƊ2B_}(VM* 6U M Me0?;ϋgnse@@Ӏs%`-TMP^q7W;AT(ĉff>XxkU@c^_ c?\p/0Qz:Ue@+ n:ԤnZpC͐7݀3!/o)ca؉?DZڏCKswُM>0U﵀&Ѓ)yocܤQ}E.>o9G윸x~Q`:ϞWXx}ͼ{~⦆5i`M󞬉"CFQl`.~ <_ @]Q }Fi -ͦIٴ66*TL';1E;w<;A&W E8>UQ1=H?y,NxdJ<2uQ-R.iOeEBvWjz/+/ x=K{+~rK NX2Z*L-!Kel%]ϒ%#/X -|* -})v\UlSl}Mbc#?4esZ 4tU\q/Q]}IEcdOΔﰦ)[+ZW(7[sUͪ #s5oPtU]*60>kt&T Q?wQ=F*Nm %4N)h"/_WfWdkr6hvج o"nYo̠6ABmАc̿B$Q~<)p0EaWHiCxڰܰъ_({NV ^ -]dLk$d>=H(aAha^S}ZO#=vn4ݛjfWpj/s'Ϡ?FJ׀7GbCdr#H91Pf蛤^'Ygi3lz2 h8;8R}J_#6{܎~f췏l:lvژȉ醕1aRVtYFtbaʅ&-jiّ" )+G7Niq4%CrcG ;ғ=FYcP'pFnXoEF|O v"-6Q͠hfLΈIM=ߐe41zWCR[c@a [5{砚}>)8 -|`BV `)-,5!Z>ʔULM7]?1nݗbWq\>r{c ;ғm|/#Y.h=?goÌX<5/e GAkТ!#@ Az@TBt]OZa]-3umn~L _|?~i扫t$))2k89ǹ0ՒJT2k7gk[=LڃYSL^&3iH$%QS{ Krٻ>5`:d1UKkR$iAzc~97⚣[XVu'4i^ԛ4#uNpK J?sYIjeC?14LӱظP\!?kԜsr2\ VAZwmꔌ5I^Z Iz-Y/(bkی8(bq1;¬Ay¤c> xc&;b|G:1SYQ1#:As9|ҩw X=|}鄓2v q~ x́GO4=ˠ5½ -PBEE(z<(O=޷z]ɸ-w "N! t;< Ji7N}7PHI2$9CԿp;7qBƝIS0"@!tIeKo4pe" WX0/#tpL.#?o05w1cbzx;~~ 3 'MJpT,=/^`Q|9Y0y\t$o>r|O~|F!Dϵg/PdcE]cAnArKĂܑlX Y,?`/G|b‡hEE>{F)[6SDϣ̘.c x6o>&w -C}1<%ă=&YEyCp m49q42,&$ Ud=LZțNr qO?/ -z%qx:)$D-"d% d+APg?u1q -xk%w~AE?4tN"|G҉Xy8&>y;uvQ ?uR8ۃo>?pnA+r7Fx@qnT\9C41$[1jlf4h:Ӆ/u<;HT}Pem:X5$p 1$$"B"QmCToB -~ZC j]FҊ6\lU~\_qQBYOU"1J F* !zR}/&4w|kuWa\QƗ#.hVs|يs=1|Nw'#k"uqb  $?-2zp۸%Wb7;>ŹU8ӽz4Þ8ٳ'z^m8k:CO`kO]"_ǘ٧1-O$.E&꟏Q8ÑEOg`f_BfOr2lav lpxixm71Fd7w_AB> ' ]8\Q|L|4h9'6{6`ٮf:S-ڙLv.Yݤ]nnbkwrܺ!g5CV_>T-ÈG<&w銿6ZY=[|0,Ga_pҍ6 [tyجs0t%zmu:vMl*[/m[bJ,ѝ.ݒ6x,m!J? -O?$[FM|@380J]b^q!ވ,fM\2]WʶUqKiB}YHҤ_%o5OW̸񢔐O%RkL!jy{Io$('ClH&$%IfQmNpM$2BZ -P )Ҟs=n#ڌ2tŪh1hNMaf3sRNaC1,36 -K5e0j*` -G11E٫`Sg~+Ofz^b)K29sG1sӐc 7_k*ԘҐi:A/OL_LoWUPQ*L,Ch>rp:>iBzeE6l r1M4侍>'d[PJYҪ2 ܤW(6uy8ƓuE^W(6ҜN`g!XK- 5?OY=1#?ov` UyvΟ-R%(ZBe“LUQݭqZ>8,;9,?y™'ʝQxɷTd8GڳX@~*P`ڢQ3a6=$fb+ -rٲWZPėX}5 + .ka][׫m]NVM_jUTXE gܤ:![G-^]4:u&rDiי; ^Q%k}j_ooUwj,\ub3^wY Gr`C3}Qye1LȸfnowKlE~F/zGn)\)\*ܮ6,x2Js KtNRS*4~$'j+텒x|Q䋃7q2 t7畖Kr!Yw]Q{;TiޣTďQV"_ <3:S P4vNO~%npUFQ9FXҘlRir* J$?IRF*ErVe*IXPT!*E9!{:;)`Tҝui />aB0H1șldBLf(5\ZO N$I2Cp0]<^PU T$ -QSo&7h"i4L#UOs: {\?a0G!=p:c 066)a ~nL>\yTƟ3, -ʦ0 '-Dk$F5O465"eE 8Hpj%&*.TӨ(1> -&y{E -9^٬IθI&9]hBm^]u KY+ǢVwdX'!-'Y00g#YT:Gaf)r -/lV&TƜҘXe\*T%R=PC_7f1&yeVr dia=H>}BR8Ο,$}oɽX{c?&ؾc~RĬvywR@Դ`5GQk׋WI%0PCi4K+MA/@t Cc4b嘆HG;rX/usRغv)XHk}/q ;z8x@Mi3_pz"©G3*ViDhe -B*"r8*Ǣk$T͆U[U}VRS0\$1θلyY&7Vlc<.=c6$z =08WO] Թԩy$&ߓBwp_F;~v[.vB-ӎxJd"%"SB ԩN 5j{q|˿C?N?D_/b"Od -fRg>u p6Q)\s;SU[whWp}+\D ZBӅ9 H^!M?Ө3m&SǎXC56sjnݸX|8%:Uj- @oX ^zXHo2L77Z3X Ȧ -󸮥F5*phf,Nc'Y@*o1zuAS;hvcGbl ^;CQ T6`sQl -n?Jp!! "',Y<8}hHBmcj"G:rĦ lZDB4zT픊51n(T{GUHOic{WT^o}kd4hg7Pih2X8 PbxņiuBT#'Ib9/a2a"axFq-ENcEv:Y=k=ן@|U߶^pĦXcBIXcզQ74QZek!0}$-3-rPe*S,1mU,65*N*$Pf)盅"JCơqs5>}{`%v,iȵ2j/e[&IK-Ŗ兖 y%[a)-%yjťeyޙ{D K] qDpFf`fD -5.Kq-5zXTkĜ4mz5m<96ij4Iۓd1w= |zemA6G#ulI1kLslJFɄU&3-X,VUZMI[a(wcm<+1Vl y+6"SH"?7wg:xuH?6#<MXmE%4X2EZ -S,7{2 -ۼZ[b~^*6o]BeKa?LK^Ze}%s4kahEI٦*t۲mPj+KlbͫqֵRul:lsm/ԬkCzu]˸9Dq-빮l-#QW -eʔ$#JLHY"8Xr]+~)W$/U~Q)ʅpEy'<[!܃Yż1t7|ۊQBRu&T@j:\L5IRԀXݭRYVxO^YՐLܢߗuJ@o/K} J#Pdc:9pHG#KPX&.q5َ,Gjo2;uq.,q3l>P/^0GO4l^\NGV G3 -w><\$丌X]9bCJLWcqҦ6H&gltҥ^եOuo4gH꣰+y|'{X[rzTB^i$1qO➉ŞdyRaX,|!S$.TFO&ͽNkpoRrFIII>KB^ޠgS@-H zdW BVHX+' ; <)XTeʆUVU(ebNL,n{OKqޫ)ڸʐ6'.S8\>84ʕ] \n ~OFo }HYSs >Ź͚پSX[hbBڟ8tf`5 |?` 4HnX< S1?$0o.f0fi8Ycc 1Qu@fύC PD3I&s[1efƌhLoiqڪ3fL ((@Lс<؈ =x*)`|W ~KwQ{s+=o^[6 Q1LLjۢ0m,&MSX<`*30`1FkZن;aX"FԎG=a֐Qe۩BFT'%`^ v>ۣ0} ڣ1}t'i;w,ǠF ؂ h?[?CAzdݛX'$b_f1G Dqrº+RW,] Lz?]  |d8paD8vs 0CK77[7E. ̹3_oI}^3vi=EWGA a:-Dr:0 3G_l]BG>Z{#=`7ԧ__ DQԾI@!j{r aCя =aOpaȞߓ{G{]E Ybj٬5{#|Dc1=GO>g`|C x/y=dO4 rjbE 20*;o!"\>'ug_KH2kDT} ** EZnnhYDQA@B"2bM01rRV&NRV8ff\*5qܢo~T{=缤O~ld!Hu'3enDٍ^ӉYDdd"d3AvtS"oq?xW?" ~ 1 1tKlF3`'5ڨqssg#>mj O9z<&ȿ?eg7N&qdOT@EꬤF5j8s#5P{8g;V!}i_2:2G;C5ķQĝL%_AԌ3sӨCBjF%5jH-_'QB//} Moq~$7 /DÁc 9}r]*|=c\| urQDUԨF-5>V9wd4o鋫˴wi0Z"6;ٙ0eG'\;kBq5JN&gͣp y]U -Dh9YВSG|kwqlCyeÆo$O^17x Ұ,\p9bu,ǙU85|z6S 9G#qGF^Qߠ1] sh!ȓx吻|!+ȍpy~.)DpM1lt-C[ :jtmD6toO$xm}qoc<6WL7OfRߛ70L.Ot%wW􎝆|=^ }`M.Ůk:-ScJ O9Sylv M=D+4xB y4O3 : -]&s6L*gsf2ϴaR4{bW*UY[Q?kP7S+}]s_\uS^})ZO.;v{{bs%}4h1' >VlDoj|P[*BoηUX3P>G\=X6rޏb|Y,yP<\{-]~tS\ `*aRJ=ʔXLAҎ"eBY$,W ˔br+-]--YtI#e?!,CG߈.10vƲ1-Zָ. Uc6C}PUT:(PLy!E_H^X -1cx@k[Hb[fB+:q#1&.헥{Rh2q<3I+s#kvxa>Y=DlvBP&-~,"d%ĞXVjI 5bԴc1ZiCvZ3\o1\r{y{lb>Kz 4&Vq.]#4"!RhX0&>'dӀ~M}̽5G%]3G%>4G%VhdeT>` - 38E<gTJ&;iHbR48%LSh@jT6Q}Ҧ+:mҲ+3m),)tUShShdArCc#˰ Jsz2gکOzguStV_ٱ -ώS -˙МSPE9kS+c͹,2L/RXݲ|އB}0 f8*]A -, V@a Zƨe|,3mIU7"ue<-\GacFgWA+%r:!-;klql}Q3dcMW2UP -#[yL@^RE7_W?7Hq؃R)`+5okTg/S |!adg,@PՑXuw\ xº2s/)kS -܍>iޖloaHa1~R=Ci}_CP o,^Ç<OXI-A GhFoz<^ÒsdwT2GvNI8Eag0?:Ǚg -hrM@-H| -/:'֣?<ŕldllj֟%hMFg&9GEq\#dG(+t|+e`؛=vEHrsh@:st4CjQNFi-9c֋]DNg:ЙCGaoA:N:K(gJm5b>i-mP՝ U|ǴUl';cWC(NzM=~WO2|u{7W ?w1ԄZY?T}40VEq*  zM f*7h+;8WYEYy!GsC+-)%)a_ڸŵ7+x(0fl#Yik͊P- %,@=# ^+eOiJWZxR#2Q>_ -h- ZE%Hy!@$ $BТmN!Zҭ͵{3nu;֞vNZ!~>Ͻ`͊O= S&',V iw$uLs0^5K>[R)G{Z -6g-=Xaڌ -pŸQ ?|mX -o^:"YDX\f!U<ຒX`d?|lΞH)EkӰ:;9:rLh)GCN9u]Q-\ʰQjIY̡TP/*IT80Tf?گ>8b팣E5yhV-O j Q`e<y [v&*w _4#2]Y&H4cO79rZM;렂Ʊ _39j&c6.N:tpQæ_/'EYQZ' ̆wd%["G+ ?Xu ;i& }60(Ӱ9lT4 -a+,ƕ(5`1h(.z^ɊLC2iTVh#HEc[LyB~'Z$[s8ܦIpf -bLa5eXX0QRBq*[`4(0zOd:yc/"ɴfIJG=L+s3Y&Pa0JR si:K0PTf̊ʽЗ?]yX}"z\loTBe(me-rA/{"z`-]c,Mb{,KQhO|+UA[YJ*WC][:l1pYUD+~g9 ۀ}M.G}\fN*KqC0TGB_]"hj!&y5*P9P:+ZlW3 tu WH=*gDjUO!wIBFs/QwZǀ'Ɇ5y0(Ȑ_{8CAGL V;V߈Vx2oR/#{Z$y HDGqKU(=C$ s[*e^ Oo*2}QHGZ"țRڔM*,o6`YUHj"ѿK['?m$4CB$!s;ڹ'Zg[#cR3 Hi@R$bi,i]G[Xܪ ;u Fl 11man% ¼"EB̺1q}~ux@s `3]9 ;v#%L-[Jpmcr60%&^JI$"|HL8x˥^ȩI @@ \*""^b2T@W=j>gmt]36v[NvݦsT|?D~;K NH#H3i#ϑm%1|I1G,Cy|G3y~g_2)ѐ,O"ƯgFCldbOajWL#>[_0o69aOƒ #5 &$dP/:jTι_72~w1N.~vp:kߤ0ڍ>$%qαRgrragaoj^ԓ24jZ}\ q>)tvpgp//^_ğYopjG708=]O͙xԓ3I<87+]Jjbf@FRcn)C\vV{k4Wy? C~9wyD)B8%3/ DQU^jM]c:ut='ye&I-`SGch"x^Qy1H}^Y:9?"56qj66LubTZGKB<kW)hVub]X1eG;Kf ?6I:E1g ~s7ڧmFeV -5f4`Up>V.X6!QҌ%!X50<_EugxG|Lw -d*g> Iǚl)X>#"BTGP\,SEsajTϭCFTmCyTG@Y̋ Qo -O}؂ձ!|u iKd煕Q~X=u1cQl2jPkDe qN̏,Q⟠Hn (D -•>.SL >{Hh%kS'F$ $Ơ\*C4 z$d(OB܉(L\|2dp:F87`O9Ia0x'29gIigk譞>'B>e`H![BIFlp&9H*F^r%K))w"KyUȢ(S`n:ظv``볎>VG-}+Ǣ$t(#R#O -J٪\Rݰ#+F¤QsDyUd _Ads6x:ْ>(}T"O -:X5)hĄLm6KaLAn6tۑ? HcNAF?V'.w/Zd=F.V}0,9ԋa+`ԧ!Ð -}Bk\q=LH5|Q4@A4 " F'Aj?xK1#MQ2gLdL3a Yt -ZL ԙyH!RU2d"9k^>d{|~y0Bc{?wp$(^ J5ři h!Pۢf"Ֆ UlRHqCSyRHoԾsGBl$va3#{/u+9Tq/𹼜<\z1:EPyCYH΋D# -rGd $:m:!qAEk-b]g|A#% 9i?wQ{">9*VK!G%=B$A ;y @TQ `NQ#"7#xŠO!m9B!H@+9Κ~/;9_ -4s]QQXWeueߑE=-fQ(̸ `T 0q8QU bզAlVMM`L6{bCRc4how{ xmcb-fJM`PW`ŘՔhSE(4\ldZR[_yE`oجloCkiYΧ6B}3UXO|)uF(6VvЫ -dά<Ȇ3D$ͭlJabWS2mzAWڄf_0'xni]' )vba'luPC!d|R[Yp156v)40wIwvjQ:jXG .@Z.Z}-Kbna14,ttN_tb\KK34@ o/uahj!j6pENc$\bq'-%r?= kgY,zA&Z@q.IX4iÁ=9]lix3o'3#MF{- ~FK.wuNĐv>Q@$M1p2 u1(}\4׸7qț|m‘3}ldIƿ>_{[4Ү)yWP(]%| [6]?>FC#c61qF./l~ `0)`(bJzآ~d|isY;}/\pedZ AwH0Ŵ}k1˰_}- :55u]|gu N|OCx̹7T} c ضa{.0.S0I v͏C8 Zנ"ZIJa/`߈"ih~1/Ƕ \M?Ч<~b*-a8k7刦NƠABc")}gcfcߪ^N*ȎSD2P-T+nKK_ϡ1L4ʓIg#?EhXrc;YvO^Ö}51%;JUhi#:cFg1v՜\; keҧ.]:6k 8qW:Dy{+ePvw9] ƧimZqGiV9hsV8s\ -eJ]*TNuA2_T=z6k\FXᷔaw͆SUnZ=̣U9R%3EiI *4,\JhX|~C9>5fSvVfspN_FъpuQ7N :sh@ h;3bʹvK| ]9ʎ UVd21fF ֌=Vi)=MSf)kRb5)\c7+9Zh|qݚy};`sآ#;EXojz\kj|MV*%~&unS5Qr5.at_7W=hTbF&6jdѳm/uT@T@S2 0 ]`H䲨1 `y ^K$Zf*hY)=Zֶɶv:k%ִܓ?>y}}˚ƎL}%q4bb\9\0 -_EUG$+7ª\eGڔYQ5ʌ5EJTjl,5?NܛEra #NJ + q-z -)?zrX͎1*#&U,*-ήԸjYR)JNإ2%Șx~)S'FNm[q88GE9^2LTaJ3D)Ր KB JI,Pr\%ͪiV'4˸Q2ː.;?^b911AaaV٦0QG%#dɔ$cRf%*1D ɏȐRfřE[*| w)<@75؇~gא2jSHdd8̓d4*yS~NC@SKoޖt/*zXlȤ,bI&XP,cR4QE -*(M+NTV) -M-Ճ%4CJɧ䔼K>yC6&35‹JzYQ΅Zz-X҉oya+>J+)5I0=hD{&3SV$_VqOjlyʳ<˳:8e ,\~Zʹ4\SHl2y1!P&JOոJ? HyU%ʳ*UcQe{"n[FVKիUF.wZVmhȠF΅ǩzr@LI1Z(7T:B(GFe遺 : ;лX_mQg?ߎI~%g#=Rb|J cʥUÛйM\\k1>$mIgiໝSQ;vMG'$]0P`C@uQN w+ -}|7[ًO -FwJ]#y‘PRa#> eԥ8 t4v71qzjiW|?-/҃ -܏WO1xNA^SIAN$'gR,Yhmy׵u/`ͅ35b%Ұ>Z ҅\Opn!p8>c"5ec,ýKKf+ų`ߐoO!|z-Kp\uCѫ 7RnWosܦHv;; PeP hfh(MEyEևb7:󺮢gKp>5HCax$q`\,?Yu !yaMZ`{!`{9)E h̏Qh;:.iofp^'Ѻ7/}J3G~1`9U~ YKm@k6Ӣ?ڵzGOѺѩlS$8AQn<r_ w_pYX;|r"𓈏4-"el -ֱc X:V;؎t^*ׅ5h 9$ V,a߆};plՐZ| -]ɳ|kyF;lݘ؀m@an_L b -M&kk^5SWUv6ҤjTiViӤݴnUNC}>}}.Wy%z"Y/_{Ob> -ۻ3>wiJ>EOOUE79𓣛}!\+q~F6e;K 0"WҽMyޑ`HRsxx/Yڱ8]c~9Xze TtOҢQB|c29wxz8-RLSγhqyi'Ooi=lff1s c`4!F?јop4Vc:Wy,=|`oŔ>1 D`1*u`6ƎjLza"ΏnhF0pC LÒ{_CI"%M{MlbdK II%LTc,QcI%:0,APڀ!i H;0 EldcdsI^EwUtmDG{+3wLYfV 37C;1"##) /ՆCГք6tw`z?:GϘ2іyYwz ^ω?9B x6`uKlfiq'L) (R‚@v9NgѦUGޜ!4LE4?-xo s@Ïy uQD\, Nݿ{xmtMc[:oCxhdj2q@FV Z' -ܨ-ZKg1TΡRav+(7~@N<_&-7p%~X Rud h,LGz}jTpp2Ԣ؄ -c;E즣(3@y6uX-/>K%"Y=r`wps:T:&9&*Mp a7Qn.CŅRKlm$iXga]GQ"}opKcm*q-$ RG7u2VP֊&E&.wm  li&IX9㡭BS5uv۠T!ӆ^(Fp -Ho"!R䳈=%.p$[;xuwIE덂99r(ݬ«CׂL:|Hu!7 yI$lBr ҖHlI-_Y̷۴?77s, ijڥZ Qn Y8H!ůܟd2pAф;! !3 OqF_|g|AfY㼓#VA}FK=J} io{eD$ - B - -D !L`0!J{e7#bɽ6ɼ0Xa,L|qzJ] PSSm$;8D'!b8 --,FI> d0 1y7ȹf{5"Iq[\9 N98|_%~ / .) ._\Z!,8 ]u'0B(5wN FO3朜>dPg\Ҥ}jCtrt\\ȯkK8D??8{=<<wrx\O &5y vh}q- t=! P Fj0ؔf/TdV [=v]Ku_}K7펝ץc+ XASZQvg+tB-l7?ckncgX>Ntho+|+{n* ^k踂?t\B{lum29wtt"w71pyG\Vx塿ۏa -]x: k %^i optDoq>!;p(cv;i w|-88,~>^rlWaد@Z=ZAXf8Z_m&:-D`kwp~ >szK?"'f)X~vcN^F[4Eт&tl2!'*,42"^q6Q{rר_\1a#bP Gcᨆc2pӜ.E(>;Fvf|¤n 3a#<H#8 --F"t)rkKwմZ)eZTmjKU}*{lVEσF]W=x2undy>уnOun5W&h{j3T힫qCU1Bc=U9^= y.RJxh~Km**qtS>TgYB*ݨ|V {Sy+0w^s6|;:rT -?Oj_J#5ߤb*ꛪa}sTw+?\Co50hv++2*3䞲B#u jv}L$7TA* 2 (F588CB)7P9!_) t21RJq%ڕP -xwۜC^_IqD7g C"De(#<[JԈ -DNRRl٣Zw}L֘Kp(щCp`<9k6d>FBr<̨~J2(-*F)QJ+):C ׀r%j"ǭٴ]&gzWq2}61dZʧyo":*1CБTCd3F*'k\T%b.TLje΁kJJ%QC|`jK0~a||}XzfXd/,`0oJfJj_5 TE -WQ%+@3T.¤Vބ;@_Kڕ|VKH F7D`aLr_hvȣ<ȣ<iFF6wh es-**12eXI3b3Ism2Q"@zcn^NVN$)I&O/\T ypײ ~ h -x Nw 8 ^o7h:9ϚQL3xm\|pZ+>V4X9np 9 -%pb]79E|Fk.=tqߣp_ ~ @z! 8d -%8b&qO, 7G;[s}F7}#8>oDX׏xobE.!}F'W\G8?#} -y 7{//x8xB/?xxd!]ʥ?8 -Jqq`2ϓ9cʚv鷈uXi<^^G~_['228}@-1/i z]@"b#v91::f)d̲%8 )=`A}`7x#vL*%x[fEA>Nlb=Ӊe2į~xVav];aA-63ڧamFnf:iyZG1cW6!~>gbE,C %F3QVXn8ױwl=>t 3mIB6wh=X)p1b8{V e5YЕ(އq#%Y/>`ݍ.F($ p< -G - 68jȣZӴ<G UJ\ #J7á{6h^b{?v[!{8v -!J$D @2-Dʂ xPW`k,@9GY?[ԟ0G^m8rК.5~a_\0A O:YT W*N.gd m$VM{Mn+rޓ+}GXo|/DA]U9fy;kfTW5-hr,lSNCݚ;d\%X mh#aǕ~Iww[~8:ZڲE7*HFyb=41\ T3f(8NYɲGNWfd2"+Y&YMj:.,/>R+цhkknтҖQ|k9T(ƛm,S/My2̣d3[n\F)%fĬШW#^wh 8ӂ%mhY y>̠NSikTF.+_l# 0 3ΰl -(0.D4Dwq;hc9&٬i&VLlkXSi&=iZcܲUt=}kPqQE! 0ԩ,+7lFSNx1WUJ3nUK)rF7r+%.^nrn-d߂Y?=N#_<&0ҧzs+&OQA1#RVg&),3]Y -*հI2dPp<(0C9?(8/<39AM֪lTi&Sy?;pMgq$*rkPHnȐP`~˿̖qHA>+#C *B ܼg9G0s%\*(EYX'btTP%b_qq-OI,WWҍ1 %gحNՠ:iV4x i|U<}/!㤀A+ Р2|ˌ)h`yr\rYX -0嘵rCƠSW.jB豉4/Ɩd%ӛ BM -0wE=\.BD."c'1!Mdb61;-s8KpG`O+yɇK*a@ȡ3$x \ \5\t5\@5д!`u+-M_M;"88Lum6{&P\ U jbibh[6ҋP@/DG=lyC2D-\X:` -XX G} 35ã9p5XᲈXĢ.$ml||<[\ -nm 5ʡ]ֱ@!H]/Y@ & -VxҏVx£%RZq.|j&UL+q4+ZOX9HfF$|6K[w+(݋ < d۹xvzю(8r965]@:r;zgAK2>Ab{婋t} A===uh $߽V3u"o%9KɓFbvI9V#= u̐ǜc@E?eb(Ea.^zCU>_Z>QA\%!Կ_p55AGy1~ [/ g?>q&8Ǣ%Yzq]9@"g 57<Ǽ=f/΀w9Q|P5Xr*.S 8yP  q-M\׸p@E~_).: x~B>G"QUmpA0ҷx̯5c=U K+<.$;?1?R>@k?eέx -^?ni 53|5ezqA#_L -^.{8 3w𗿂8#=C=:n$2y?t,Y?8VrEr?أ8G:rXD^]M2m~A馲.= ݠ&救GZq+YȑLLV8DDRKX%_"6cvv'iP6Դl_+u:~G-rE.9ϢB1į DWc Ğ2 YNy: ߰Z_j%yWx=19v-{E'{Cf$Ilq1 BjrԑdkL76`0`n&&`CbH'@B(HB[Fi.K@%Ye (mfi6AZN]5mӺ}m6MӦM۪}ؤjڥ4G.S =z?y99『w f 8$7el{W('ߡܿ$xqÖ8 1Ua#f<ߦg3q;cX5#Df= MSw)h5졅p$v1iL.x -8K)gYBDim` $]v>NK<n'2LY%u )tY='e*\v/q~J M5+ɢmIښQ{rڒ˵9%M)aES՜USj61m"Z~D XR(j ?R/1~ -b:m:r"8+GS IږVQQU6`(VBZ7֫޸Qu6Mݪ5Ri3)yNU -VUX>T3SKH'bCطEȓ&K"L3TgU\Z_5ZjUm(hک_Qgͪ,mUb{Sg;>S#{Lo&Yg{(C$;I!Qk,ekͭ*[*m媰W^2GJ[SI39OQsWޜw6 %33IcuKZ~vlF9{IW3SNʜ.*8'"WH>涩 Gyv?ʬQ5` Q)-[J&RVj0vƟ^Dw;X҃][K> 'dMSfI,kr@ ʨVz(PRB=J -)1N0uR;HfbM ~f/w_ዾKax e"'q!a$|:xĞqbMG#a{i{sp mx AY2`͐ѐb: }0q8k]A(nbL4n"LvLavL"&i0bK4A<&?åC){1ǎJw ցJ9>c;cܘɋ9.?7FҳB_Hx| -:;_ U:G;0\|Hv,bb,R(2 $y{8G^~;?oسEi㗩WH*_%p p Ǎ' 67%X,e -2X&8ҫ>_{Ŵna"r܄*_a |n]M>gVcB~PW -Iʊt9c/ggTW6\ۏ_ݛ¸oo=^I/G!R6\{tƟ6%inmzK4IIKKEZ.E\1AAȠ ás)`e2q2&sӝYiOs~/<Yz,GG>ۇ;h -{mf5*c?,ks51#ꋚ b԰>_8?@}^Gnx7u6v̀/b@2(CAw6ڦq-gҿu7g8?R<7{{BGeER?.jK?wvT=:uч踂89,C%tz gz@{཮kz _>/߈M_p귪һܷtɜGG8qyqa6WqR6K'Hz0v]_p|ܟ>ݛ,::)tGsc88#8Zܬ}d/ _R@m!B#_y \b3e'"֯MzGek=:Bt5JR=pt±nѽ(\Sݰt*O.r?b̘C"f'Q~mmIG<4vPAo ɠy#ynsmEo - 8,OUB$P]*,Od_ 2\G{?vX-s^tSsd+\x -)c:h_P -~/k$?fOyF>OqmrѺ!.sSc>;\䱧"p᪇pMdptvZf^w@dG\ȝ --a4uAL&cjHָA9ʂ͞*P}LHuª4Z59_'`K0\RE-U$Fp+mw_ղqlI&&cqjHNQ8:CjU`b+4$JUI -$5ȗ4VH%oUqOxBwU`BSDEOƮGm%#P1i(bPɨ!Ft94y4T*Rjܤbs -*HW5r[)\ʱ\zD $#F#ϯw泥8!7#kȍߚ -YJ-*RBK -UX):Jn[rm3/T}RcxGi3-»[1nŌsJnFS'R*U`cO۞<{r%r9|I );AY㕙>MNgҝ+*{^2^5MlkH=Sl-~@ Fy24+iSө̌\P -93*=+4L={l]< K7#L_O̔zvx75RxeXՅ|vꤖz P#6(e3Ǣ49\#L*Yek.{LddHO*sLIs#>|o #c`;3 mcHrSCn|Ĥ* Y|vY -ke,K)EmJ.+x U\Qy|;rȻ chiCG3#t27^RL%VJe,u) % VRYH 2*ۡXxK^n"/˴2K-pg]9]m jF_-CF2֓b$&@>*-JLx_b}^ SH~gCcc ~cUEp>4q*=NsaXFh11+)`bA MhPi`0MA C?Vj)x6{LzӐأVBV7q7 $K%l\xa0t\x ǸcBHuhcC걓zCON0yy@0"dF\1RkRivHMdM4pġӄ&45GoLLk.Khhh k\ni)![ 9<h#;?;: 6+Xy#tp 30hs1 ; 9tG7&4nrхU]Gy,AUEpܳ:^J<a<2h6ƺ gGI'M/uE賏FG.Y'ṿ; 1pa0p{Lߐ {%W@Ca!WқO c *r1@_RqpfLtLRl`ut^o$6hVӐq -8.sfp>rFqخR+_W.0Y āt0Rοgjs;pH}A#GGs"^@ aG>|Tp!X4T |pƲ~kg88K8G<N]zS'u/ >z:=E;N*ңn<7U#` :._ORܠԍp/h=k!G!^7YJgz\hDt*bn 6^ 489x,؋h2GM>:p6Nv4#ԥY EfUR0we mXu8# teDt2!Ue/Z"\B.j(fmV]O{ jȭ7\~t \χc9)2xYŮC-Z@泳R\ ,F}9(48ĵ5xW:EiU5YJϨ.&j$ -n1 BxS(fYjC(i>'{ogG;k}+l$n9C5rxxK;\p%'/\p k4\5hr#{#PN. -idgqedY1@3zMaL$?r2C&X5>ȡ1A.%jTPFgiD a!w+'tCV:7)5C)O( 1|!OwDt.Xm)1PANO!ǁ紆*dT^Ur .eGxGRZySbdSd{< =ZQ1]!2YQ,jLN\r,rNi 9~LSeLȄ*W*,qB=9  -NUHO]pwL,Xߕ|VLl)f9#'CNPEyLxl2{2yeLJUD0(-U3Ui0v|:ɮL1v -ͥB+tr)D]᥊y -ݸ~0)\*ָɽû{Xfmհ2V|ߵ=růĔTMT۩jEZWj^vqq*B˄ΆKZ[µo5c[_U`8,G bK^2ٓ:hh5i|1/jZVXA>ך_,N7Ѧ _\[=_iu`xD@yy_2%ʹx>r؏{Թr`jf>+Te$9 `cU: I ~%ٱ/袁/h _s)qqlK3[j ML_>7\;ֲc4QkTT((kx[w -ሕKk4U@{.J1P╢4 ŗqE`ƎUn\ɼEi]l'${.yǵ1Ja} !Ϛ:mfG3m4I3]4E35q^'$;i츎[u r@ -1T<ȸѹm a-߉MKvǀz(j-|BL9~3p.Q3 xԭGn߶dN;|ܛ}6'Ѷ$3'qR<%&4S|qJ~DzR>ދx/9f |ʸ'yj= kâٱ ]0!,ڣp~ӳq0rN<Qٗc;ޥ`|<\^\e>PF<?WOcq|xiorM_a{ u| =&RK忚6W$dv}*1?X߶i{#_\Y3Nmc} 6>|d)];__/9Գ -3%OlOI' 3d,mB=E;bW8{; -,g_^U*IltBtl x( $/g :{'iv6l`gv;8hûCQO)͠s'I=. \x)9)#+yJ9ۉxs'5ۆ Tx>)3tSI/ WB)t~-vk~ƻFvNZMsEp]z>Dk;ddI8,ybi|ENbWVf{crVրco5(Xe1/sSG j+GYvꎣ7b%8pTȊ*J3LJY–ٲ_h9 -ukTz.?.7i<%oD,!`R8\)`. .jȥHB@H1%폎@TXb/&f:.cK4#1wsb=8|LfҖxxCCxt $2N(mt 5&j0T?CpmG2aEh9K(U/0q&{@AkX = =Y&zfͺ uЭ>HV^iPfPwމЋlxH9,4ٲ5f` ,x808!qM٠)]I l"10BTI##P$Ccba܍2Sc5#&F&G;Τ-gҖH#D >[3F5b( Ab${izз9&l^}p"F;b2!{asE -D&x#8j$,byb!p,dLY]ّ!1CHlp\q .U%NLH-Rdch -^@D3Hvgxq|Dp*жhcHu}67jʌ -?R#3I3< PS,> ؞Eq\=-R'6;9IAzɆٜI6|XdA,@W־+Y?[ړC iBF-(ӊ -A[(oq@j ȡ^s8j$,AE$h~?Xhڊ>ǁ-•a0|!St+R)5D@*zmahCFnlV7qm͐pnyQњ+{O#Ok R>5y]Nbs0 ;P^84~EJcil)%dtUY#Wq€rFtGz](9dj_8`]భKJ7HKwsؗ1TT..(rۮѵ}4f>z{ϟࣵLAϻsƌzfzkfL(քC ~h?j}CJ3E%/c_TVJ*pT_xEy\_^Hڨ;Wi YA"ҭ[l!Iv^يR9$Vd2nqy>=/<y;s+Nw $ ӟmWy0\*c<0gלuN@B! +G[Yu?R|^rrH/坑,~$K]Kn`l=Z5[7q|gUnr"~F8ߛ-cY đ\ೖ-K1Es)`[>zyH]PF(볫ܤ;dqFV Lk-zPߔJK{wWy~P'C8d,ߴ. :J@7 dzqF@` V" 6X ##  ZeWŔԃN~a~qfu#E".lйy.?Xϊ ;m HK=`(tu4G!gn_:^!B@zhCLZ8l$@ -+ @ e!OAx C8~ⷎNs]=/I֣3ѡM*{q6ljK~!}9Ym!!_7Hlް(Qppj`0GXs,D`+/xGF@ҚSШ -s=t##URuMT?|zq+[:sMnִ䂹33o\P7.B *OEtO1o,N4GO\ٞ~pc݌)GR0XQAl(f4 M)h@<׹L"]NJYsr,'%hݹv - ݆/U)|JnPW -x kFEQ`0|=t[ 1x}fpc3A&ŽpJ ~ 7%1,۰PRND,^HU0uf>7웻ñ]zQZVq6 S d`0XA#GVJ[(9 -RWvHo^0x3 bx -p`+gQ(^1ױ>9ږ騬*^x#qb ,Y2aHwcVMOb/f=-ȁ/} - `=瀾}k) -4`" C!)p3:mu@XoQv ngn3w:s+*qBV- M$NreO{}v R` 83JyMO4)XZGyQj{DM {_πY ̸Ӻ|)weUefᨈ.A]]dciI~\w<8/t Pg+e >*7E`S# 3\GHpχHn aKS[K 5uk;mɶcVރ iEHD_+߾U\'9GVXJ¬9M<~̨փI+qijL9%A0pcF"((`77Q#'q h[:-H,n#*Z_YXO -=Vy!pLYzY*K;x2}{"w7er"Iw:GSy\V[<6'Rչn%:溬'5mDtbZL\&$ -ܾ~vן{}߻<%E&gINDHJ"NƄdD] Q!c@ -d *>7 8PW% \ h`3^l:93cM|;egA :܂8XJ[7XI|0|N7w[{EkvcJȬi%J-Q#u|FBѵ<~ԠVTw|_JvV{J,͓ɯ)l/` R|Vxfm 96pL1c3Y0ߜ,/NP[@Qt+eKTe9ۏ-p -Ȯ|BpW$ %IHO޿y:~0?_(gD,rE}KcШ+)J_*=I,?!4l=Å[Pծ=Ğ [ }g OZO$o!xL=5dbBC) Oմ>RIr\r"#;@V2[kclzi5a#*Xm?;62.#:ĉ֙Li_8L+ endstream endobj 47 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.1.0 %%For: (thatcher) () %%Title: (repository-icons.ai) %%CreationDate: 11/20/13 3:39 PM %%Canvassize: 16383 %%BoundingBox: -115 -1130 917 123 %%HiResBoundingBox: -114.793 -1129.6504 917 122.6416 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 39 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 0.75021 0.679683 0.670222 0.90164 ([Registration]) %AI3_Cropmarks: 344.832 -559.2051 424.832 -479.2051 %AI3_TemplateBox: 250.5 -250.5 250.5 -250.5 %AI3_TileBox: 78.832 -915.2051 690.832 -123.2051 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -935 55 1 1798 872 18 1 0 140 332 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:-150 -550 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 63 0 obj <>stream -%%BoundingBox: -115 -1130 917 123 %%HiResBoundingBox: -114.793 -1129.6504 917 122.6416 %AI7_Thumbnail: 108 128 8 %%BeginData: 6902 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD0DFF7DA8A8CFFFFFA8A8FFFFA8FD60FFA87D7DA87CFFCA7D52FF %A7A8FD61FFA8FDFCFFFDFCFFFDFCFFFDFCFFFDB2FFFD07A8FD13FFA87D52 %A8FD08FFA1A87DA8FD08FFA8A8A8FD0CFFA8A8FD19FFCAFD0FFFFD04A8CA %A8A87DFD05FFA8A87DA8A1FD08FF7D7DA852FD06FFA87DFFFFFFA8A8A8FD %05FFA1A8A1A8A1FD0AFFA87DFD0AFFA8A8FD0DFFA8A8A8FD0EFF7DFFFFFF %7DFFFFA7A8FFFFFFA87D7C7D527D7DFD07FF52A8FF7DA7FD05FF7C767DFF %FFFF527DFD04FFA7A17DA17D527DFD05FFFD04A852FD07FFA8FFFFA87CFD %0DFF7D7D527CA8FD0DFFA8FFFFA8A7A8FFA1FD04FFA8A1A87DA8A8A1A8FD %05FFA87D7DA87DA8FD05FFA7527676A876527DFD04FFA1527D7DA77CA1A8 %FD05FF7D7D7DA8FD07FFA87DA87DFD0EFF7D76A8A1CFFD0DFF7DFFFD04A8 %7DA8FD04FFA8A17D7D7CA87DFD06FFA8A8FFFFFF7DFD05FF7D5252525176 %4B7DFD04FF7D7C52A87D7D7DFD05FF7DA8A1A1A8A87DFD04FFA1517D7D7D %5276A8FD09FFA8A8FFFFA8FFA8A8FD0CFFA87D7D7DA17DA17DFD05FFA8A1 %7D7D7DCAFD06FFA1A8FFFFA8A8FD06FF7D7C5252517DA8FD05FF7DA87DA8 %7DFD06FF7D527D527C527DFD04FF7D52517D525251FD0BFF527D767D527D %7DFD0CFFA1A87DA8A1A8A1A8FD06FFA8FFCFFD08FFA87DA87DA17DFD08FF %7D52A8FD08FFA8A8A8FD07FF76525276525252FD04FFA8527C527D527CA8 %FD09FFA876517652524BA7FDFCFFFDFCFFFDFCFFFDE6FFA8FFA8FFA8FD14 %FFA87DFD23FFA7A8FD2AFFA87DA87DA8A1A87DFD07FFA8FFCAFD08FFA852 %7D7CFD0CFFA77CFD05FFA8CAA8FFA8A8A8FD06FFA8A7FFA8A8A8FD28FF7D %FFFFFFA8FFA8A7A8FD04FFA7767C527D7DFD07FF52A8FF7DA8FD0AFFA852 %FD05FFA7A17DA17DA77DA7FD05FFA152FD04FF7D7DFD27FFA8FFFFA8A1A8 %FF7DFD04FFCF7DA87DA7A7A1A8FD05FFCA7C7DA876A8FD07FFA8A8FF52A8 %FD05FFCF7DA87DA8A1A8A1FD05FF7D7652A8CFA8527DFD27FF7DFFFFFD05 %A8FD04FFA7A87D7D7DA87DFD06FFA8A1FFA8A87DFD05FFA8A87D52527DA8 %A8A8FFFFFFA8A8A1A87DA87DA8FD05FF7D51525276525276FD27FFFD05A8 %7DA7A1FD05FF7D7D7C7D7DA8FD06FFA7FD04FFA8FD06FF7DA87C527DA87D %FD04FFA87DA8A7A8A1A8A7FD05FFA87D5252527651A7FD27FF7D7D76FD04 %7DA7FD06FFA1A87DA8FD07FFA87CA87D7D7DFD05FFA8A17DA87DA87DA7A8 %FFFFFFA8A17DA87DA87DA8FD07FFA8525252A8FD42FFCAA8A8A8FD07FFA8 %CFA8CFA8CFA8FD05FFA8CFA8CAA8CFA8FD09FFA8FDFCFFFDFCFFFDFCFFFD %8AFFA1A8A1A8A7A87DA8FD04FFA8A87DA8A7A87DA8FD04FFA8A8A7A8A8A8 %7DA8FD04FFA8A8A1A8A7A87DA8A8FFFFFFA8A87DA8A1A87D7DA8FFFFFFA8 %A8A7A8A8A8A7A8A8FD27FFA7A8A8A8CFA8A87DFD04FFFD04A8CAA8A87DFF %FFFFFD04A87DA7A8A87DFD04FFA8A8A852767DFF7DCAFFFFFFA8A8FFA8FF %7D767DA8FFFFFFA87DA87DA17DA87DFD28FF7DFD05FFA8A8FD04FF7DFFFF %FF7DFFFFA7A8FFFFFF7DA87676527DA8A8A8FFFFFF7DFFFD047DFFA8A8FF %FFFF7DA87DCFFF767DCF7DFFFFFFA7A8FD047D767DA8FD27FFA8FD06FFA1 %FD04FFA8FFFFA8A8A8FFA1FFFFFFA8A8A1A17DA17DA8A8FD04FFA8A8A7A1 %A87DFFA8FD04FFA8A87D527D7CFFA8A8FD04FF7D7652A87D7D7DFD28FF7D %FD05FFA8A8FD04FF7DFFFD04A87DA8FD04FF7DCF7C7C527DA8A8A8FFFFFF %7DFF7DFFFFFD04A8FFFFFF7DFFFF7D4BFFFFA87DFFFFFFA8A87D7D7DA17D %A8A8FD27FFA1A8CFFD04A8A1FD04FFA87D7D7DA77DA87DFFFFFFCAA7A8A8 %A1A8A8CFA1FD04FFA8A7A77DA77DA8A1A8FFFFFFA8A1FFA8A1A8FFA8A8FF %FFFFA87DA87DA87DA8A1CAFD27FFA1A87DA8A1A87DCAFD04FFA8A87DA8A7 %A87DA8FD04FFA7A8A1A8A8A87DA8FD04FFA8A87DA87DA87DA8A8FFFFFFA8 %A87DA8A8A87DA8A8FFFFFFA8A8A1A87DA87DA8A8FDFCFFFDFCFFFD63FFFD %07A8FD64FFCFA7FD06A8A1FD64FF7DFF7C7C527DA8A8CFFD62FFCFA87DA1 %7DA17DA8A8FD64FFA1A87C7D527DA8A8FD4FFFCAFD0BFFCAFD07FFA8A7A8 %A87C7DA1A87DFD05FFFD07A8FD05FFA8FFA8FFA8CAA8FD09FFCAFD08A8FD %22FF7DA87DA77DA87DA8FD04FF7DA77DA77DA87DA1FD04FF7DFD05A87DA8 %FD04FF7DA8A77651A1A8A1A8FFFFFF7DA87D7D7DA1A1A1A8FD08FFA87DA8 %7C7D7CA77DA8FD22FFA8FD06FFA1FD04FFA8FD06FF7DFD10FFA8FFA87CA8 %7CFFA8CFFFFFA8A8CFA17DA77DA8A1FD09FFA8A87DA77D7D7DA8A8FD22FF %7DFD05FFA8A8FD04FF7DFFFFA876FFFFA7FD10FF7DFF7DA8A17DA8A8A8FF %FFFF7DA7767D527D7DA1A8FD09FF7D5252A17D767DCFFD22FFA8FD06FFA7 %FD04FFA8FFFFA7A8A8CAA1FD10FFA8A8A8FFFFA8FFA8A8FFFFA8A8A17DA1 %A87DA8A8FD09FFA8A87D7D7DA1A1A8A8FD22FF7DFD05FFA8A8FD04FF7DA8 %7DA8A1A77DA8FD0AFFA8FD05FF7DA87CA17D7D7DA8A8FFFFFF7DA87D7D7D %A1A8A1A8FD08FFA87DA87DA17DA87DA8FD22FFA7A1A8A1A8A1A8A7FD04FF %A87D7D7DA17DA87DFD04FFA8A1A8A7A8A17DA8FD05FFA7A8A1A8A7A8A8FD %04FFA8A8CAFD05A8FD09FFCAA8A8A8A7CAA8A8A8FD22FFCFFFA8FFA8FFA8 %FD0BFFA8FD05FF7DFFFFFFA87D7DA8FD63FFFD04A8FFA8A1FFA1FD64FF7D %A87D7D7DFFA8A8FD63FFA8A8FFFF7DA8FFCFA7FD64FF7DA87DA17DA87DA8 %FD65FFCAFFFFFFA8FDFCFFFDFCFFFDE0FFA8FFA8FD07FFAFFFFFFFA8FD07 %FF7DA8A87D7DA87DFD11FFA8FFA8FD39FFA827FD04527DFD05FF7D527D52 %52287DFD05FF7D527D5252527DFD06FF7D7D7DA87DA8A8FFFFFFA87D527D %5284A8FD36FFA8FD067DFD05FF7D7D7DA87D7D7DFD05FFA8A8A8FFFFFFA8 %FD05FF7DFD055227A8FD04FF7DFD04A8FD4FFFA8277D527D207DFD06FFA8 %FD0AFFA8A8A87DA87DFD4EFFA884A8A87D7D7DFD11FF525252277D277DFD %66FFA9FFA8A9A8FD65FFA85252277D2752A8FD64FFAFA87D847EA87DFDFC %FFFDFCFFFDFCFFFDBCFFA8A8A8FD68FFA87D527C7DFD67FFA77CFD047DFD %66FFA87D767D7CFD5CFFA8FFA8FFA8FD07FFA8A8A8FD0BFFA8FD0AFFCAA8 %FD43FFA87DA87DA8A1A87DFD13FF527CA7FD08FFA77DA87DFD42FF7DFFFF %FF7DFFA8A7A8FD11FFFD047DFD07FFA8767D527D7DFD41FFA8FFFFA8A1A8 %FF7DFD12FFA1A1A87DFD07FF7D527C7D7CA8FD41FF7DFFFFA8A8A8A1A8FD %12FF7DFFFFA8A8FD06FFA8767D7D7DA8FD41FFFD05A8A1A8A1FD0AFFA8A8 %FD06FFA8A8A87DFD09FFA8A8A8FD42FF7D7D7C7D7DA17DA7FD09FFA752FD %07FFA8FD61FFCF52FD67FF7D52FF527DFD67FFA876517DFD69FFA8527DFD %FCFFFDFCFFFDFCFFFDC0FFAFFD12FFA87DA87D7D7DA8FD08FFA8FFA8FD42 %FF7D27275252527DFD05FFFD0452275252FD05FF52535252275252FD05FF %A8522827525227A8FFFFFFA8525352527DFD38FF7DA87D7D7DA8FD05FFA8 %7DA8A8A87DA8FD06FFA8FFFFFFA8FD06FFA87DA87DA87DA8A8FD04FFA87D %FFA8A8FD3DFFA8FD11FF7D52527D522752FD11FF7DA87DA87D7DA8FD4DFF %A87DFF7D7E7DA8FD10FFAF53527D277D27A8FD65FFA8FFA8FFA8A8FD65FF %A87D2728525252FD66FF7D7E7DA87D7DA8FD34FFFF %%EndData endstream endobj 64 0 obj <>stream -={?h K4O,* A#OPx$ -]'UcH`[Hoǻri>{tիW?-΍f}9! 6XTPLiW,$N R(f^t0,y r eϑhJIϩ Ӂ{~`6HRUbX9ң%Eͮs1s۰p -X(< - I1]YH}Az'@#~?+o&h8DCȕajnFT/&n~mJ\fg&h,xځ h2fH G ~g^ni0J6`陖khkX lyC[S&5\0՚s4!+L471޳8KLf/ -&3z`P['&#j"[j+SԿNޔ`];dEe&3P|_VzZdmES/aLs%%`3$cX~w m{E2zQXzLIUY00z*Μ \L.U@"UHSDM6A"۠Pi4JLt0!ۂ+9E}b2:`22"Hup9+I ɀat XLdzc2GiU1Y -&s IuRJLaL~_wPcX~u4ᖓQ^;v$- -&R> -Qa G/i{(3 -&R< -%%ΌH^2JG!6e|[8 -y/RM(41ö7226MFE(8njl~wM[Hd(l[ [csvBZMic jBog> -C-M-y}[-pfR(^VABjkli} ,B(x 갈N;5.^'(`23X\ 򸋗GcLPR ;HW?%`(_/']:b-6 $lx܍ˣ`z{GƇBiD 51) N v6ʺ+ya־DŊǠ(k2?5)c'%LڲYu(8TEw$:'-\nC@w-)g` -h5QP]\[NDN!&?ַel,C g=d]@!m^ Lq?6E]΄(x6rt9ie嚟!N$niB|l;]ϋǣ)}hkDf܈-f$̉ K[pNXk8R[ )6a-'-GA=5߰ FX2har˅zqPt,)W6b8Kocʶ;xe;m<ݴMhsvr}Yr2*[f%Иg#RoF:n -QA5&fG$߻p;{EG`C>K PBD c?`u+|*gVfK[d#Ymj[k _UXDGe;lcڔL`iJžV(X>nJDLfcJS'L8 -?#ΛJHnR5U[Hb"iRJX"XXzKr8ݑQ 8 ժ xj{`Mm/S mi/XrrR d -(ONѽ~`@Đt=Y{GΨ^6 IY -b]e/WLyPBxe/8 Vn¬óWYȍ4 )Xr[)6bY3#@5 -Pq/U5֚R% -('=WjBuVd?6g'gVH}9-hLN7#FϨgUDhX(h -Pv{y*b$u% zM -T8өlHz4]r~ųEǰ - HO eYMGדڂ뮑؜V"߀!h;T -8H0ȑa}'гv6 Xj6Y]HXN!bUm7$WZn4p#\p|"E1h۳aCk`N/YNZm?4a/0ĥY.|в:\V5 ξ^\$WfBkyi5)7/#=fMUqr]\ZGBoeRlK 6vviq 0hnx^^#rmtkEkkQ펴w)WkmW^[z}.V\Sj{W3ruaII9`yB<-/ѣm'kf#H,UŸJzV.6zJ"FfZ!8k'Vv85Nx7pmDiucB$&Q_|hDFsXC7^wZGHƛz-pߵ6>;cvpͰi m}Cl80J I꺮h7mIAkdqOnj]%5=tS[N%|igG sJX\o¹&$(#ӻAC -lVV7<^[EoYרFի'k$%֯|' %b_p -}uaMqOm۹1>Ғx)aѺfXAn~ؠqty*#hѮaFفN;v H@$Epˋ# ȋ,Q1}MUZř\ԩ7w&J#Q|92D“|Ô@*穯k zU*+z $8ҏeIUl[r.(W-;rn =2| j~引;ޜ$(XH VzU69}JVKx-ۨfo7QϚmyļQ*ּQk|tH!V^qm+/bneu}bq7CK^\Ig*W^qA+1kd#+NԮHTQ*_WQi^q{lTJPE|EkAE+m ]T5'0`Ţ#(a-}հbizXmTJX>b%7Q:V.X(d#-iJV2:Y}TuF.ybFFN6 ID1+>jf5լA7+W'uuTQ=+\Eld<# Is44'iF6h譶. -:Z%MҜUk5qOE=쑉H7: -ѫtRY;30skؚ/uHoL/Sw'$'SFDw!1̟~-ل"Q>ԕ'{o߾,npwxEytջ{m{tsW{o䑙w+7__9?Kxʻ'ᗮv`[g>uW+Zw:t[D'Ǎ$'YD9 z;frjREw ka_-6MpHracԃ8Lռ * )О5m9{KKC#Lr VE"cj#~e3=p:+Fj ^OB6L-[؝\ۗ:c?FlWbڦV_zIHo -0}69]tHenZ;R"9 -VPN8WH%&}4gOyB3r2-ANe-%>-%A,pZrƇZ;P {Y$#GJu+%+xQ;M3vkEⰗ|_~ ۬x~.1q$ :zqç> kf_LzӐ,VEPb/ 4t/SD@]߬1B>qG/ӳh3zqY×7jf򰗕:\ȅ!YkMd}v H,1Lvhxʏs?^=N>ǦX@Nۆ:)"$Hib"??Vx%%DlPN͑):pT*Vdݯt{ݷ I W$;@4W"Ŕ2}xJᩭP7mWN$_Sgg#Nd_ҏP'ȏĩ<;pĭ[]Xq Hoƒ#3j6XU&v z8#'}2XAC$Cx5Ia"y^Պ_u @靋G u+H@g5$ #w3)!jVHlu D}8aA|C'(d.o;yΨ 5 ī :928T\^Ƣ-֯+N8NB!ҮB4+ -Л{K]POЙC9RDQ;^_Uq:.RPKyP1CD= -,H~ -WηL@Jr]a 9@b8zo"~X@@ ,.oePv L_Wm -HbPUfmޜ9(猴"ejDH8+EGdL#}LA:#Ttm42}.;ShIwFuv"Ge#%_|&AG9l _=5Wkkmm wZȞGg(N@U[WրCk@԰fEk@\⻴˜cJktET.h Ck`S[Ńj%$KjEk@NCWZv1l c1ƀѩfc60`1o15:5qHH`Z @f7a `fh 06KC*k\S+WES[0ϸH?yqV$ !`ޮe)03¬!`h1C aՆ8!ܢh%R P%rCKsזFu$V%Sl 0[J`hh 1,8\WXX~.[(E֔([X}k*KW:(@e,TDC󋡍l jk1J%P>$#%)@γ%%hjK8&[Fkw%R:D%굕%`oe rCKeK@ -e@% 7 -[U7y%hk?%%Ui dy6"FdxVl17"%K!:#,,b+4XtJ#`,<#3db<\ - uwK\} > -](߄++$ol*Q0Pٴx哯Цfh?.jAԦ=G2NdcԊBqCP w -AқXŨ8M\w m(،PI!H#T9$0\ԳN¦Bg'e^;ط&xN`8eT -ءR,@a"74O`"$d2? k[1B}y|2G5"ZCVqWյr3]iP}@69{]'2$z%\3CW> 21qw^ řsVj }h^IT)!:CDi$1U68ֆ$)oxqMuНs8 PT<,M\Mnh^h\R y+9с88ןbPe X0L Xf2O|ZrʵV(;4:+0Q?N9݄x!ywrg,|2|EW -`T j0ۺ8u7b@J@.ݞh j,3Y]`99o#2za˺u`m[\֨7KN2/6\ˣ~CT$# 蛓MBpyRzŋm#D)(| Hϕѡu㹀5VBw]rIJWA5ptu9S^m/ўKA& \|aFY?hGq'(+ʦDp>K\6dcSsK.ǚqHo< &*r%Ҡ۠Uxۈ|=pMo!U\PܬC  o!;.A3hb(rH=-MxQ7?mdub! Y|Ho>v!3p;K5([,} bD˶>2e J[T xykmH+#2mD͊:"iG%coLDΈѡ/fXe#KSKo.?K.7L&Y6 qh:-C9,9V4|<e(ǜ7ǰЊ&xʯG<'j";}鮷]:M+?w"x>.N]^JH)% ^L8oc!%4#h;wv) Rӝ<K3=_:ũK#)TݍAK \jS뱞Z)(%qAB%Cnʺpݳg`wl} $$~^KbpVі>z+'"DZq,9/i `h{ha4Ή -#E3x[‘Jso^J~HF:I}l?%I -Si}⯴rk\o Q٨~O(H^\H轥D&o]1%#-GAxs Ж" :%GTPX{`}TGFSω{Hx64P:#4 `0W:JaPos. "JA22!tH ehbS,Gh͆ -$~X*8+Cѹ-I]OǦF̢MPwB⥶]lO̧$PI*Ǒ~5Rcmp+! 際|9PplG 0vh-adG81-gɻdշt&Qc?I/H)zwYj./M/3QB0%% sYb8&'4A:KlnL9NyrZ56mHb#U8L7r ='RjWhBa`5cB -U,,>~n8Nfx},^/p.%5DNelˣ`~{*3A\Ξ]:{ً@CNy>_Im] |l+5!qonz+4}0"^Wz*=55;dA4*JV>*@gTk,2T#9[C ԩI#92T|5w4ٱiUi4rLor0Ȥ$zwIR7$zsir?FGҔa.MKԄ$ z-!G q.,[P*%xu(>|iLfo_s1N]@b"[AŚmK 98{ &@w ` E}FcY@L~8CQZEkq)K*L}DozAƶ>?Pe܎- lN JwI|hlv(ƀ"RNJgUĝ(GQf9b -(#awDZ-jG#9T m$UCk>Zbo4ّgEqoS1D/A&J$U२\0e) k4-)ȮtdyAꊗ"(3.DP8*-)RQ+AGN6??N8ae_Ŷ]m;^Q(+]m`[※9 Ȑp@\^t r=pȵD5MO|q2N ❦I&3%pu^'>_vi!kmZor ?זd.Sv]pk ؏!]~ڡFoK/6R ._8OBƵp9 tp!]t7Bi˞|( ǁ'9M mV,H9$A ߜhqk#Ժ!1˼D-b~midi#Opj6$ >(oqr5 MTX^L mbiKH~'G3MAíV)õ0Ek#_\ -^Tq)R6C\?&L-g#_EHzWoqݶAqj'&Ŧz5T:g*nQ:ٹ9d%tV Hf(NJd8Ks;(ZNӆ^[,[)S  |aL/=TS#z?60LedIdL `w$"v[{2,ց/{+DǮU+XP( Pط~Lk<)JZ!\CbI߀p 5z$ m@N> -Bƴxؾ]1HbpEAƼUk>~[D W)l%jg cQJ[wǰҡ!c ӊ{9SMoa7<#G 81.%"v+ [hurl2gHvKd[bJHR25V@[i,wyIwGF+_0߿`k圬8'n>.&z3Z`#4L"; >,| 7C|k -(ONѽkd2]Cinp2sƃ ) -Jts1h4"=!{',ۜ]=/'eVɩ1q6"f֨SclvLȼťm=g*aGF@Y {8gxP.حuʹѶnǂZ ؐ~^4~˗4PE8 YthΑNoH[$̧lGw/b!߉@(wrzY-^N%'$/1Z$Tegwv$>uN;gRNo읽@;eD/J";-w".iU`4ϤET2y:gD# G*2yv"|#x~CT-bYj+E"|m$w6TpHb@1B^MrXsY߇+T#H'53Ցr%CZPLK1̎uh #[4)",,]I /J(eXbRE/H,eX2w\tAGe\”TF/LKe`TFF/LO8} !sd4ٔ:de#!Govrrv1y?A?^fc~xy"q'Q.)m%K%|ݹ -Y&\\3b}FYU˯P7V7rIᲀJRvsAjm) utKW$ YWQ I†KʋhQ;}嶗#E4۴- -^a -$%Q܍a$8MIMdk#> SHr|;;b}*+"4 {28t\]5|'r-z )r@9+5F3.:B|ŧ󜝢zǽfFob8m[g,Zkx 4&%@(U BiÂ>A`<(AQOdLizc!Ȕ,e$8= =KF8EY&K¼um-X7 -քCpVlD-zcJgh H/8edm 9+0aIf- NL{ry9G"F,]A‡(uZH2D>m89Wyd"T++fG[aWC!(NG]pcФ[%t.K4k^^zo{w{`e+(o/+O#`?_ _]ݹsm endstream endobj 65 0 obj <>stream -%AI12_CompressedDataxrF0xoHnq"DJ| =l5Ej)vӟT %Pn23Q{^*3++WӫPA|]oPv/j (Lߺ>7k$r~o|$.琼߬oPp1[nGWUl\BDZ ?snuXz0T:ȅ9uMlGI/G:[폛l~{;Y/כۯ;2|\1/ߢ"oYLOww&*|~5Z[b _O0M8ߧ -z|X^}wfsrLUBo!|9VdBȚT -峎,O9@U^Bsb׃׫9OfJ4/B%ä'| },_,4| (^mH\h`u90G7>se@]nG5 2(rX Vj?l¤qU -Ќ F.Ͻo=`wd} -,[7}w7?z;ALӫ|_nON7d2_-tv|2%'%eJLg ϓiOY|N%9GEEW<(Ϣȳꓓ5]suw]]sW8g+&'wEޫwtp>?|n%v>C;ys\η'7 (q=]]Y,mϻ9 hnZooONO~]No'E ׋])0_\ՓFwz;92L!ݷw[rzM? -/Vn_az-x&/np7䔁q9?Y#K'kC SLtNZ@)&*~Lw5(7Qu أ|rA%3/:H/u~}w (F(z>e8/:wS-Eo9釨08/㗸_B -䁓4z: l4Strnn^N@$v2Bs^| G^ĦW5J_^urL>)30㊀jXͼs ETn4Ot"jND.%;Yn?D` AK"@]LWoO`$Y,ΩMTm<\NW"^|)QYw֡RInpE=t=On߃x_紇{5Cyg3on~^EOE>R1a#X j3[YZܻ[\d -2 bY[-ߋ>E,oq{]S#rՆ -[ jكW7ssr**4'!ևh6!{rTUg@*L<5"dG鉐<1腧3Om4SfP@KOQ'#I(-  -PM"2H&*=N٭$mv6tݪMBR%Id;P$i,g$җlZa%ce[8cvlmnlZ5[LI=aLo0yְ-b=aC|< oaSbsY< #@l[6֏4x@R38(P3 Ći^*Mj&()),sy*Ut mU*4VbCR+8>3.5VXe - 3ڰVLBPЎXWb60cRJ+h05XcU>VybK '$lLHl려y4TZZDxx=OXf:(٬rͪxa܎]J@t 4seivk9iELL| Y1b[fcVpz[A/t:kvդǛ öt&i;S0yV 4,.`̡;y} f`>K wI/h&vVUOB+YTq#M*[{c*0|d*M_T$|&g\yN+OXB .ͤiN6ѓ',Ujl]+V֪S]*׊b-b'LVW̵Uml I `*y\$~t=z37>x>yI><<{M^r1BWUds ȤYE:Z\\P:k9=z EdiL\RnҷG᜚W3.fԍH% -p_(k|~/):(whIemmמyMoIp -Hbϰw+UXy4#KJ | >o_v3R&~4'MIJޓŏFhMOݾ4M0GC5UgM[C5 KVYRUt)}mn7>7LÓ+Nံ,\q;Nrss†WZJGi9+(+*l<?M'vGF񅳁#59cY$ݓK@ge89YY;4,$B>@ؿKY2èL;\n3uF)}~]4 {%(]ݼCȅA9顼GVwi'-y -F&u$疔9Scb"uf )E z8+Xb3Э`D ]kcB\Hq -iQRw@U?WݫuVk\uֽra" W`Y78p&BMR\b%`b)&d1MU98NZetNf\K3YݵZO-wTwvGP;vOcڦ)0 + ,clu_cX:ݱufc%5n} ^πK*Zse6Cn_/,3v|uE%V -*!n*4H.μ]M^|IkmR/r'{Q62HܯU6^gc-rv X߉OFIe/6ލθE;57lu.5$J1u7-E9 ?Wb5,I!I^SLuV3 II%Xy嶺7$>x^| lձU6wnXN@grY/ ' 2D;8X' -As=z;T&~ ?bI%p֝WGX},an}oy}xpߒ'qvK#E/qG/qG/qG/q|2_y&WX*vi|ΔsIޓ2(cvP^V[vˋmvծ%Yzb ^lV y-/晖c4i2hci|Ƹ8T-:I;Z=JC.9hu:2U4vסq:0a̵H-pF~(@I 5>[@-/:/1y,cc" -2pdl6}FP@@_*t֠z0zd(6qҌPj0ש5,p}|]!#wYSmt$Q/YJ+H|_U}?SB^~EZoX<f& -SJ(`&K6=^UuGyS%QǺ/UݓGU:gӵ?U*;ޯqxGp'u_$)L"ߒOIÓ~?rI*^#uovXr˘lkK*Qv:UV gv7{gvbjzf}>KU7=)yh8=R<%xmF}]. -B_SNR F Pr|.+:*%]8tUJ_VP֐UʢCarRTP*۵nWIfyF:&Ǭ?'c ޺UVŲV_o_o}2WTҽT%şdv$EՄ-t.zCi/oU.4ÐdW1rH&2W~[tuس7=|;z)ݤaVnj]n;O&xnN3Iܼ\rPn:+Ia^40G_Gu7v{C݁ne(24=dzxdH0#n62Ehޢ[{_4[@htugMTW =֜dM^y@8ֽTl2H%ȢKNѵ[ϊp8laF65OᄖL姄]RZ:֞A`OU97H -;3brbqh 8ǛIH:l!$޻EUXUY8ޱ:!k`\;GN?}f^8'XZKI CXGN|Xlq-iAVtѼ9y;bMjI.gW5jyUիBt}ݗJr,_d;ËX6+GY퟼QmORk1O5-YّwQw|ؾY}U'AD>O0nR#{Ŝ^3.j҅6yjPR ] eddvphh%a3aHI3Tr֎t"js|Bɧ tTV5 cP0 ZpO «eDO ՏjX#0|_qApbz^] &wo !VdwɁ3#*#f/^Q@=nNWOVuk\BRJZ(z٬ V-ůؙv&W7(57Ƞ(6uFb.M V)3j#QlFJlm)GVvN({R_h'3#\؎G9g2Ӏtdz}v|PlK?}Zh'z}|`;"ZC"HHmnJsJ[yWb TuY27xF\>N 8^W Wp5&n^_h'^L;֍N@ڟz}vb -â^_B{l<=-oys -9@0K55 ڙ pWw$1 pue!_Zi-GYte]Y.Vuibw-M1SItՉ֪"rN<bhxףrhdוۗuweXͺ6ViRw-]ő/ЖN]6 3#i՚obW)9ӖA~1F"ToŮaዔԓuse}JiS@DTYwtl2BKOM`T.h1XKu{.*ìF1as*c,fK%fZ&S17v/ DFz7ZU'0ZjQr܇ż=E$1к"yMCx/T2  EY$@EɅ rW|;(d*eBnYɗd4>=b+Q6 .e*g3dQÜw8ԙеxZD1vcA'6K*}rƓ\T٘YI$=4{kQ`Gr 7(^AՒb,hO} -T-j\ ŽUC?;r Tu#luOUxUZA@߁ -}rƓ\T٘FU(Tmrj.c%EɑasBK"E\ґ0NFu_{9I(I*%44\2eH!Y=Dgc&OOQJajBR\\ƒ6ڗH |t=[̶j0 -WWbnx|:]N1WAoaz};. -(?N8WB 9uYEAk@bEb‘""s dE2YE&nHЃΆL:Di{+UESCQNSQ*^RMHVZ|ie~s* -L0 V3Z(Č# ,c|oM4s?. -~P'db]ܐg%$_qĠ$"H<@r(r_WJ -NAh o@Vz%%mSU %@ -Q~!mW(EisZ$mAAL F Ab̙(j/iB" •>$:tȒZ΂npA:M+-B˟ȁnRd_$^irT1«2ԁl!aG2$Bm #["8*4 Qʀxb8ʰ[򧄣 QȪ0{Y7bz'j3lG .!i) )CֶͅO6VdZq dO$Ecd H5lsԐ -^? $q+GzvirA˫R^AJxlx':VQAGd -ZPy9t+^Z)55FOg/C^YQAk dY6O Iܤ^b5 ~r#@ʐ -] ŪTNyڠ7 l*-l -@jOYLHy_TQHV,3TEP3׈4h. gFZ5ixDY:P$,5OCy2`TxJ8B~ș-~j06k R?~XB5I:yw߯|rЭlfNoWgf߾iL/ \Y.8·/!yL,;#::U;Fy>PCg|8qy>8og>ێw+x@oa%VYX)#:6ۼ[Wy%G%fuwl;}q>v=R=X)&]Gfz;;S#D:n]2 ٻp]t}8瘝{3n3}3yuCVX==Կr$f]o:,pдX= T@$j&bۅh>EHxy퓳7wc:2mO^@zm>,LAuY~^ܾ(}3?:zu6^ս^ս_ǘF/_^x[|CRԾ}Fw< dx)b n/Lg'.l2ߧwj<Yz|;tY}{;ߎt՝_=@/W ;"_t^rtM>A/noP:;mNgW>W) ~Gн[N7ެWUw5 ~Q;zu>becMۿe1fyX2ȏj{daz酋#\a]`x2콛pؘwl[l -3x;bz>cb {Cg !9t -o!s@TgHg1D@?Ǿv~5|n3yDBо Kŧ@2e% 24Y|J/ @ۀ۟EzuXN-3f1YB瓆כ݇#RM%8p3gfWl8uܬ;H臽sK=rr;'>pٱsQLOG;86W}2Sw:YVt/_͗>f>PL3ca,lf9ͯwӛ#ZPU筼Ў xkwAЗ09%)g)*?~uיBgt\7q,MgECw>wܡ3L;t?y -;bch r\ES;V ΐZwoPË|~.nbC[;#.sǝ~, Pg߭RYpuwN?`6sR;v (l W}s?J2]-XzgCӇXa]z0 '>p=[ fo< ѻ|pwXT;~4p10w^;¡//F0f/f>wܡw0s<<{0}I`xQhɠ>]x3z?j'xWn}qrzv?Gzs#hqhEv^D{q mp}z~ ? ?峞MyR0y=l+Mdӓ͏?;y8y]LLg6O{E%m뇎W?>ӏK 72Mo7> >g?^`<9h0}=:gbu5X-p81"CfwJc /8<ԿNz__߬oA<v3&aGCg bzN? =u[w0P>⁨о;!=vc_CgQ|?ON/F!Zo'7NvYn(Q y[ro![ȃ#[ȇou9K4 :ۼa~+wOw^NF>rGq.opp;^ptVF4탟孷=f>_}PX/o6o֛]gI%]Vܛz\oMruOsq}}zBώlY1͗'*l)`(?>G+^="Ivۛ 2؋6t7Cai|}GQY,ӟ$mzMo6;t-Ұq|mzMo66KωՇW^;B+#,7nza4^)i7|&t14^} /;ƾNCOcgtȁѯOͷe9G?DztquNk1dz7cNӁgjEĜz~z藏 8u<#@POg/Q8|#Hj&TEW|?-Bːu1Ã#*<3t|$ݥzFoxp,ǢeQ`EިqL^Q@z-Q9yoj@uy;[`^1tcf:N߯ݝpǙ -}q٧sI:0:-#XC\䳏l~]lgXCcsX1J8v~|5J0'eUxy@>c=^Rt~E{o72PL}`4nn 1q\3CnLǨu^{`+|ǯT1zT5zz h|^_L3U(|W_y7ĈU>3^),"¡胒>7{b8[/כ,߾pf:[l?|avas8֗·̱E/n)/_.L+DŽQ:˾A;s}e=p^t=As,Ogۻlj6G"{!dN3֌>xI%!a!$e‘h?9&:Ľ3+sq}Fc*kQg.Vsx @_z&uDKq3r/"ԙCy^W}[lG&/R/.ťWQŦi@@|K.coiKBGOׁ#B0w^|@ݟa}lGdz -Uup }D;tw(zZ~)]M3z] c/Pp YyL?cYclw2]pd?:wҽݯOAKo.C -7a| M9輯Cc`2n5鈸ɋòdzg3Wagr1!envEp1B͡ j/$ȓf` \C^FI~EaT,ԧsXIs4)a6 B\0j(ա+@g|J4!% TZѷMCZ강V&_Y| GFkpH5,bQfrုΡ&e1Rp8*WϐfF&5e,Ps4Wv~&rcdG|I0i*ʴ!cGV9_2F,RJo*r^_򟱝W9IEG8$CLxe.rHyИ ryH8{KRL唔I[K[`R&53nDLxlY;(Meci<_tF0">:Z&0%4ҀT<`H#˼LHGZeR\(s^f -@#5(`mY›"I P*@T!f|KM2J.08C Z]Dc5\Z qL X~BM *SDi^gELL0c}\'@se"CK| )32i鬈j*R_EM͘|mE5D+`,s EItno%ȅGUj 4}9y|e% -mq[\k%(O pn7x-1^f[fujF0mr9tUEcv*Қ -|S2 -kdoCxߴ&Ak -PE?fq9L6<ܽIe2~{&_B-jn3Za+ Fk2~F ~c' ,moDv1uB`Q<) -~!KdF4d,[G*ÐDeA# D C߽IerC$#$4_j>2_&?gx!ȩ}F|/&Iѝ~^_%Yh I__EL}3 g|w9m?1k(ΊawAjG#Jq|ndeBEc9 r[ `Q̉U[(/ɐlPZARЉ_"i/@"@neܽ"H8YT7 3|^Rvt@JrJEӛH)(TҴb" iAi'`a<xU͠\Kցk>|d-H0:-RLv)|YZiwjTTf͎;6ksJ f=@Z/A1 YdOg³ -%'߯?gō]3^^&u8oC"oWxcH( (`C$Hs8@$,׉ [`OR]$Η?7o-KA:]]-a﯋߂,`OKxȳ^ -لrJIjԨQ --8u*hEŀ LM/O'm'yM^̴*X-$Z{vȓn'/P@-zY>}%UL- -M;eJQи*IzLV2eZdLٵqV${XDHehDr$Ӝ_h*%C/~~lNK 4Cຑsh`~M,& ˽A^+x ~i@͇>wV dK8N`ָc[D̢EL_E" ~v1 'RA#Rzӛ*{Se/ZRT"V]l_T9t2hcek@5{-E IUCb3rRVkbUcwm8\ʝsdoKȒ^-XʬX%zG$E}SDmn)}_|͔0"b\^mɯeJM!蛅NAg] p+&&jW):P|"}](_@]KTK/PtTK ^ra crX-- ݵhPOEJ˄]*#g*xZ,!g6酬^ꅬ(d06Mч^z* Y~ '€Pk|Zyh#?.>! 9 A9oDD&y,bsY=vIfݛz*_)L}F=ݛzQS-,GcU}M g,X a7rR"K )r/s(;¡Z|$R@H^ـ!ӿ&$`#w -BP#Ub't,ڈX^W&-`uՎt&F@1Tf92+^MXbЊ -lsSoڷM4#kdVUF` X+#U@0 N E鐲9SPE-Eؿ517+ SctN*]q:๳E[2J d8i4a6"rQ 4c\Cxi݋R{%v# e1% wz1?MVQ4 .'a50BJbFB+ńQeFP_7 4ԈAvQuQ2`( 23q\0| tH%hU(ɉ#n%$Xot>xNל$csr \(Rp3>/_*GBM=Mf&+`όBNR$ w ÷P:.fƿOB%KZ!cwt(آ -6tҡpx:LҐd !bfc(9Ov!#ؚF*j\GnT}2|"(t)x" k3v#2,> z~QMH y,NvWڍRcujJh2]%`eZ1(`Ȇ#U7>ԇJj2mj{ =~TXT#+S)+/]dF7T❤" -%)CqzE6l ۸L. ɴԊ)7BB)Z ~MfFg"6\]1 {3]Zc>9ˡ>2S&_b_Xh.Tqeim3.Ցw+V;KOZjɓ,pww>{1}k\ C3tX9ŭIhĕTw٠R$Gc?IckA jD -C#B -K63w@2lb\7rmbXjF8y  ]C Pxl613 -oeH3L9sC^>bF>{qqxf" ^>Xõ(E %Q?shPWEUVrЈLYy6'M_E`6u(~IŁdz,Mܑ. ImS,nisTd\)u(qX/1W! c-^P, 6ԍ(Q[zw=~ކ)} S0d$#N`3c@ȝzqӅ0˰ "r+Eݡ!ufH4IFP[Tmz rE3J;(e'XrRkاvpR^>@p'C'0 -H М.Lݣ,鐣T OVꀦ]'t"I6UD{= -4?x 3D1[J$|s -]k~lh$"L%qL%(Q&ɑ΅j0匇 B"L,$f0L E2 -~ (CVmS6s\#]Ӂ˥+)Z, -C7e4kdIj) v]\jo09Ma!\bhAFo@VS$Ӗ8)$ -3B X -A2.FCwg `Hd5زAVOvk2=#ٜoԀ`1NC4]hS ǕYI(|SSHp~ҩ'a @1A gP#F$R LL -%Y$Pe ,V}LD> fѩRZ)W-jp>E;|kJ;RTzKIU%K UO-I9TI|t&V`,xg݌ʏStCLs2:(8̔s2+N;GWond%iѾ),3g~#uI Ж<B:UblH%K@à}ꁁ% -4 \Ew/~ؼiۡaVt(RHv%~](9bf!e7e"!ԈqHB:#WIW.ůYRVxoD|tZ:~CV$(\yV%uӔ<5^FuH+^?رOh?tk2-M"IQϥrH+5:CDTa|PT5*&adV,ߋCRA!t%GuDJ ۖ1X*B1^ˡa,>Kwޏ]rDFZ> -fJ+-] -QQG3@g/$PSafgIC*mEBBQ ݯx,abIZ`:jW)Q> -J|Vס7HZ0k2BY{>ؼp6~IuW96>NXzsr3H3Gg 71Q*BYmWKEEE}tÒ"ݔP E*36qbeRR[]v)L3tEy DYO-͒" zp-r -\M6Y4蔝'g qV臌{YD+oxc&E3U$ 6z$ٵ4My"\H@{RH*k'׌d&4QgP3]|VE$E[!wk=ݧ`9dCCcU3$j:zڅZAHA㠨DE?PH@[LH@G 1hL;F5! 9St]$_hfrjʁҰXo)| -DU E31E{qd#Q*fIKTW 3, -/s7Ɛ԰*\twX̘8J/>[Mw9  @qZqC}HRN\/m8'$"r,qޱ; yDa!4 n%{-]Qfщ+j(z7Jv:# /EGHUxsmE$UfٻK(ZTg<~6g`^5h2_)2he_@kɅB& C렱BY ^;^3F#1x»Acs 5[C! Tdr&U_SS҉W\.ѽ2eg;湠e”ΥlISbNe ,iw'd hiC#֌p[3ގ*JGgC7t+PO֏ EZ8B6?Tj``ȑ-)TwV͂#eUkݥ{#"q S0@Ԫ'5߱1dLhJL?Ã]v㍖3_{A}ٱB9Ŵ-,)h{ܜ%˽!ѥ._qg+'nq}$ Y6q|oAAWQ{uPFNVRy-K(J Zp:I^/#'#SG t7e_Q>GN]2ŖΟ:Ҧ(1sk^TΧhJ 6 HBxBrȤInz#zZ>`Cnɾ PTM]wzEM}4Fwg@#* Ll5jwIarItD8]K~0t #23yԸ;e_[H%<"#rBf(p%DLJV 㥌axlܢp[vAC *͊6s 7~}=n4Һ(]Xsi6X |5xRw'zr>/NjcK>✟Б`baiX¤fVƣ+p܍[qFT͢)mCI^MmJK/UXEHQbTBG _:AP;=(tO?Zܰr=ӫWC)E8< -q,@J.GA$s`KF0Pxbuޯ$:M& -4rMZ|עxq. b30_ E)>Fv^#uJ,2J5@2i*n,2:SZORo![# -쳏 ֣,sI擆x|5KQqЙoaV|aX2 6΅n(KYԎl)xYiN hr1nj -4_tqw&^snT @Qƿ8l'l{5nfa>QDCR,q-)@p4o@u&H f -j -D!k/p]Ng88 /Q[Jb$6[ qo6% II14[Ϟ$;“z ْ'PpVH(^LioQ#YsvS))w8\%i ]U &>4P H| x -0qoք/4/^ǁ%ܣs>\aH3||}idźIbBr|J -Ez)Cc,XIA'[!$)w>ֆ$@tSe+6phg<@-쌂9p@ hvƹrc/Z3S<$3l‚;Ӂ$A>a%E[)4 -)zǖST"hV2uѡqđ`+6cce32YJ$yOG"4:h0g#`c%dZK2±Ȫ12;d :& 8qvHzw,.L-rmr1퐛t5qHpEHH.$߱w($ Hi(lhƱS Nq -')\j5{Tv)D ࠰R ]JwC)_χnwet*]Ȕ} Ie p+s>Be9:ia<Ȩ}I0p4] A4K$r7P?' ȱ'[Ispxaaa7f-2MÖٌfv #L]0EӁ(K9^s|7Há'Vaiclޖ^:-ŬQu]kݧXj*iJw9,oyD]4DcA*8FClF.-3KȅCvvCjCT|vv5!S6 lG\J,~F蓙(hԓE+)>h&(@Ytl(F}J p ηЂa ƒCDM25dtdY6arJOr+XOѢ4ba&.&ǮemtܱQFdF=X&V#-Wt0[_߬VWӛz}/[5g+{ ˑc4jukb; |ԶjpkXQټ璏=@X&O };)~F{KCe3P7Xq(t΅+r(0b׎琨$ )֋1މysY6[UnŞUF{gw50Uyo;'%3!m͆KZ2QĺdN\g|E'IK@tgtPfL_qøvp%^Q%qw+zt`ܑ5y~邜puugx>/_.jIl9ܷߴ^łvUk8ܺ%c<>n,>Dx1P°L8qbF9NŠ'J66@5zu]hlnhGh%9ޞlҰh9O.1)M*atEdQ5eo iLD+]A=)2gþ ѥ)*-p©rܡJlrtӤFhRe9AEZ@4YFTHz-L V_AjTSZ"xW25PV?66:ӔW(bE)a?\0TY+r%'+PÓ9\w*_'#A6ݿR.8ޱΆ{ޡ"T]>%^8 E]DCz*%-FoiApm `%Eׁr):ko7˲ꬋ Lٕr1jF -7'Lʌ0\քRWLgf+ -Yj6 )ۅC,L.|bWTh -?!ÒW"A?}\E{Ӈ"уu рD#%?`\JɬR%OV/):T\HA:ARW| 3|gaG5#ovv#n'ywWցG -=ʕCa'Gr)D_@E# 2?UGp<2!}pڟ-U -򫲌ؓXA63 P/!̆ʤ4Tx#ި*lU -腽ƋT)Ux sH@]mQOB{b۽ -^“0:vQ7(w=긲 cK2`RVsL`<|< 6+TH$ (/oo?(-G T]=þNZ-wW+v4F764-GJF!̎Fh}/}N -{PY'NK j{ zT8OqXGQ@g'՞D|wxg$? 34{LٝYBOQ ~oo{|b:*(r:n.D֏uWVTͰ/ -n?JrEO&BDˑcWy(D헖V 'foWs㥅ܒr)-͛bǎ,w)8:A6QdJq08Fxbۉ(;~bwtF~ưn?RP(" ;OyFBUkW zzi+V@COz\'p}&}I;ĺ'~2ֈՉW` ǝ_XOC[Ao*J(?kϬ_,~P-` VXXOh_{%g@^%~ou܈/mD>$.= NvI{̍>w$^>>? DfO pP,|a:B'oH߀H7?>A'"}"'"mHHeDBy`w:_c7w0p+ngLD3})={8cg\s ʟ'-ŷ Œ6N, _jr /W7c,h11B/) -`q`R8dSXenyg4hΪ -cBp7tr~~)B&`yEws_<^Ȱ EJwXw.J&X2'UMPwE|wD'n$/ysO@rco {E >)e?Gx_Oe6Ͱ$lIZy597R WMh%Jh6C -Oun0&%bAfy -S8 HP|#@[PC),)H꿵zs?^~g38˱Wt"g%roULgHm_T,Zm[ ->i:7m{q m_7xMg%nh| %`=*Jhԟ0 ӿ!L>NdiUGҟyW!5}@Cp(8Sq~{d(1= hd -)V2eA t?H{r>S!ݻ -1Go>gs?|]nW؏-1;q$ W(xgH4Oxw IǕ~z+; IڎaKk+ߪt3NY}#@Fǰ?Vi{凚gN(dm*Z+Ugpaɮ:7}=6Ž3D>hz4 !K ݩ2[vU5>Ac:2E'R7]c3ZU_BRGy9J#W}2?b'/0ʉ5S{[/T6N<\C7+5&? 8(Vvy%00Gx0_n>nRB ~mr-+X^-4F H#<3Խ"@:#El/49[6s@-V@il@VFa y)7c# hDF JA15E!,AdP yTr|{G1ъ#y0bXi\ag$zX`, P8K@4$ 6h - -f$)FıH14}"k`=(c:*|B+cYcχa4{"%LأY{(e qI:M0}r_rAn؅b4!O1`r{ -D)㠐CgwJ{4Њq ;"M@֋W 44|p(9B7,lS8thTX<0Goopz8Y)k̑"0~7k `^ Q5AA"8VV MG3ʡ?s!hL*SK h(G$qI}#`', Mah88e@r>K8ɟ B 51pg$llDQ@{EX`J("44!Q)U<|#YlHRbDJP"#[M]1`lTd l?Pd)7[Uniagh=B{wyS[n1*F;&sǒ)raY !Ȝx~`Aʂ8m O),724*H?B hmdQ> <| -sEV 3"P8q?X/ -bÿ <"q0؃7P>xSP z`GH 7~Le@ 4$#>$yK#ԇ`>KM(Ds29ef$&8)5章ď1>9a(Q@DI[1 `vd>yPpnmD &TݺqFM@FS@$AUS`M(`I!X( ˜b&ǟf?jL[a˽`4gAOJaLhA!b" dPw PaSQ[E۩a.p,ީ;/ 2+DW%d -uq}7U,bB(8\*H"=ccLW@3 E1` cX$;Meqw!t|˫oˣ")+ "RpRqۗ%}U>$ w P8|W9ѷ%81H q^՗ Ȥ"UTfm-H#fG.񯅸mV v[!4@X_;F5đ|pp{%(WG_޸d?'Toޡ -ٞŷT;Ki)<Q΅#9P~'Z0? 0 !>;M7j8?чVZ(WPAM١sӇ0>{_1 +/݌Ov8X4a=:;U?υa#q;˓l6G}(֞JeqH_@Y!l'@eVYyGzH<pcw߻<#I^sgpΩc7˵a Rm߾TM>nN_6 JCB rX?YZ'ptxD[~p1?Jld?|ll)h.pwOaPpM~| #:~C.> "3w'Ch669ASě&?, E qqgˡ j \EV*DI<'?|@n?ZW0a{_]47(/ /Ë?V/5F.~67@Lǯffa!l|ȇvߘ6a_Ys0뫕S4A{z|?;pбS|G5g#fY肄JNr=zqUN6* mUa3qTCQGv+UAVվscC`GS< -t-\!q6`VH6YXIV~tizN2:^ %,C2``tWp=ފ8jNp53siǑvt]p6]UmHG -G*_/T6?FeFPe"|VVxPi Bg~pD -&umYBYA蝖_0`~M -; bjN`ʆv8XƎqU8F!qX:qw1 4s@}c1ьK@x -0T$E: wD5g(R<怿2_Mw8+3䯥:]ץq;k1/YX9+ E@J~OgI<@Фos(p➺h='Sl_2VXF8bIU(pVwsb^T\E7&z{"PzC+#ȷM ﯉p _1ط.Zr[o[JTPv~Az6 sh -e,ˆc}ıI`%/k##-A_MwIF_H?t@LL) ~N6p\dP~5oǑFNqhkh1ϏTrboR(MQB) -{ɆWkFr&Y MRHqWkf"E?Jw(q0,?r̗5iEPW|7 ޿L</ODpK]4zN)$эP:&|G)ntJ5)L~O1)!z[@\AX!~ߞJC~8xnWqQN`W@*~^$zSfR]iaiPV~YOY<_:þΜ oVӴQy6MV>atJ~|A5aPŠ;% a3"J8nn%N/5ܟ;;ޥھ$ζs8{#Nsb)jƻ\ 鲫!xߓ*>qy$+:Y=ǎ:`sHq8e#O]d'j*5|^m+_5ӥk>þ(\)xz7^R!XRo° -/lGܶۑ_}=o*&7*Ͽ>đ ߆)r_}y1"Z:3g T -HcI0y<8:jUUgˑm-Ӂ诛+]ĎHWϿ4!]N TEłZ]sz ؽ['OkKp^Tssk.BUxb~-.N{'dH[Q)R$]=y)az`@^+^C&ZԿy7fDY3,8q+yI׶R#yxqq6+5]lRk?N@qyȪnf'H'1+d1`v70}n$awv._}0.κPKᘉi7[ѾZx:pF -&)7^7vTBߒk7'+y,s(ۏ@y=ڡ[+TU%wAZt>ٟX~J!aǃtwmA<;#yc-qd@Sv5\Roô"|1ԩok%w(k| \Jx_DtX1QpYNrʹ1NW_! -w"W ̖c|ܕ.n*bxzAK {Ьm*d}Q8|oV^,0 -+l/UA0Rj62KB@~{Go35Ps5k4сl~6ߡ@.]XrgHQamv{~^;^ ~3 y@}h/l$H*J":ZZpKa?ݴh0iڇQj B2^0l~ -9L)0<E΍ݬm(?׀%OOT c)O#ox)n#-LAM%;(s](Qo$gHDn;~I xp#ܟ3\`3@3.ބžލsmy#|;dgtB>>i_qoGf6Y~rw!x.՝X1!} %I,)yÐn*5PDdm6!6xq;x.WP}҅Xbpg|/=s}ysn KȪEIuи]eO9ǁ68e:zO}CU v& |үCQ\qMTxG'j C:o NבzK cY|AC9vfo%~YT}V=Nbu/li~ 7\)c\ϿO`-όe1闇q2wĦJb#,*D6P$t`ܭ<o2Z/:wetmu]@^ƬSdL~ MmoQ -tw#jKC0BHt@g7rWI_iWQ2L`nsHe+&<##:HEmE&+W|_P^$N  'Hp#1рxmJZO: E: wC!*n>Yѕf҈+*l3c Zښ9¤NR~<`敶xaI  R;ZD1#JcCW)0=,:cJ"g50;><}MC -/+9]gl' ׻S~2o\ĀB$5H K=}x}~iZAJakiZWcמ-^Cշ fM IJd2fô ]LKbùj^ffW8\,]ԫÄģ~=0pVcIwFDA}e)"zPA[@EX** I!9!t*2~Qx]{-\rC,!, -S2SPgQP*,}k XT&jW/'U*Đ9Eˉ+TA8LyNq5 OP@eFb =]Ã:}E]Gxx]Υݝe(2bc7 ĩT'SYEwQ$EsP$3$Rꕧ>*\yԉ󲋗Knՠy9ݙ\̪djU\GsGPT%}Tg<ܵr0PǾvt/3C4!MYIQQR_}KaGlv^JWT1S,8mAȤ{o"芄aF{aD3&CZ\[I}_; rX*9X {q|0~]* P[Av0/͎w%m GcXd4ͩjq-/K+WɺXT},'\P+=2+yĨhz;B~\xnvHǨ:qGڦ7B5Dd8Hx:~a*| 8J -|XA&.*S -Cb XG/p7X•ZmIc2:urCy_-+1CJ(޲.a;{{tg11bPB6>3Fy# @]/ -S,=ŃIh7g=^[T@&l13S*I!GtX -IJ@1vŒ]Z;I eAGBV9u&b:r>W1-zޕJ F4cMmNtޑAD`:-߄C&Jl'kL|Ϊ϶'TE (m$bƒ|yHJRV}cP']VQ2j0~]^|,b4epһ m]tw`L;]I~)j'On9wފЁ| QR{.BBG$|@t0㨀dMUi nXhz'ykEe8N $0\cr3_s9ЙMz;Is3+ʑcDn{L9X>VFFѲn0/L-+)D7fk&S/`zh<7I6 -4֩[@?2/ZD2Г@ 7&>vUiMMnbs\yTTᒟ @8@ `,&t`ҏIO.{%<< Bd9?LS$kr(;<»^7}뗡p1aה/rEua3y~OafԽoOu83m]>tr,/Hԩ|ҝܦgyHߞD/.is`P؄ ۣ@r Yoĸy,Oqx'j["ՍӅ~/j 2f^GܑOf>py°Rq;lȈQļlOE:b 3-"-cՆ7P<^{?ovTN0I:HzC>*xjkca<CEL {̓ d,}Ĵ~Ά.2%t_QDm@+7 QVrD -w/0E>k)R~%.}:`Ym@GNH뱣&uםBÃ]K -L[ȦTy<=_3$0O[aMne -%ƃ0.#F~SsJƒ:LZmz3#h UT)B.x -ޕ?e-VRn j)”sJ`&ip%CPįOܱr|K rg A2`mrJ( %{++a{d 0Se~֨m|SM  X;!p= -\-uwKWЄf4n5cksuĬCf_Fxy|&vVA8svZtFÒsцFm緁B v^{7;0 h-1Y|d3Hćm*^*S_&/پ  VEC8Vם:(4l;~{MՋW -1wfu8 7`p˜g!mG/Mӎ0HIC6ԧ@ @g* BկJ!GKp6-rV@!1lU Tuh̴uI!cii.yk a[*i;Y:@13dx`Ưe9cιa+b -b_|bcnVL2KpʢӽȨj9,6x_5oѣ;+NPAZuzm:C+P3}w;x6V`"D@ߴ{Qhj{H`.-ۙS~hw-ᴅ^g*L)9'^ME>! -yQf7[s > W N5 6~W}M-M+ܖBA_]gɛlr: ^'ݙl{V4pQs%"UJ.*7o=8 5" 0`CGe_# 5D5n_SGgN:~ZՉN_e!Xe3#Sje1~$Z=ks]k^hpM.4G&.^٩̈́NL{ImJ M$jzPL9GYwm݆.4]7n:grNs7ٷujfIjd~cf_!7~Sj9Z AffJb%_޳OE]=jsڨbX-n.85HnR7tzΧ.9v%&c &P-g{VK\͘ϿB1K2&%gw,-T9ae;45}/']Ut=Gj ӠZ7,zE?73ۘfCЪz6k۳ۉVLWu5+.7-eyP٪CB+OhpqY!+xbc+i{S"9K 䵨O#XqfYaнڽk;XY tN-Q:PW[KBL |Hzڗʹze5kdP;]&Nq]jc-{UКԴ}%2ܫUG@J+}"7,tjq%>錛4Uv̭Wkr D6+[U:p+Jzo;6ES8lɅ}Hij}`_H奍bQgg2~vcm,~n[d6wֹdRv9ֽ,܈x yz+T79,7.?@ `S 7 <ARan0^0YnQ{hV)p'mqulˋ5Vbdڬk4돾_y fuۑ&[ΤsǼISA .2x8# .DE|u,vrU}Rtw Qa']e]Ys/uTvk_lIS%*Mߖ6 -D}((mt' Lx1NLى)i;M*7Clf\z_Eyn{ӹiŸ^ؓbJ[eFJXfn&S1[λEV_سieb6|=AFh}٫! 6vciLƗxԷbs`[XQR㰤VQ?(ڒ/IݜUj5l2Z~b!>DpH-4RJgXN=8cXڬKppr5󦶑\m3ם\DfÝ@JﱂZ3p+Z>ͨ:f5p#{K.2btRHl*Z*FY:"ۡhxbk٪;e=~ğȏ$7cKK+YZezX'g,Y5}6IUsVOzS$˹c]"n/eqEtl[GIW -FU;Z<ZE>uyn҃\UO -m'bqޙ_\ݼ19N_[I ~<P'ݨ1FB`"f~u$ʼn)y-NEm3Y+Ҡ^_3.cZ|ZsWPCt-C=M6V \] :S0 w#&!e8JEpR;kսy&ͺz{b;̭|WE.#NCXC4,i'wP7E[4y NƓqut`l.r "hMN^t7n~^]0ч ac^\zE]_|I$$gӾd/fBX tAF@+kE -GKu9 mIQR=b3~L,',E>h-$7ϙ5N*iu`L=cntddF:;q\0>_- #[@,ʪiKy[*;dyL+~FVv°ZZ5jӳ^#TOaJOƠ6CepEV7)j1n׉Żٳvlo\uPd?XAA:$itv@50ǻY~5}4G,ueťUS_jMCY_ \O˧e۝0AuR*{x:PY_ t0m gXK]±Lnrr|iY1W)ک|0kڶPO턑Ʉ*$S 0{s˄l\پY ߝi,y x_9Η&>ؤ3u:f& KDi3SuWv -(V׍ m7Mvwfχ4]ZjLfC;b*dwe@ oYA vW[{|Q}Ƈè??qT-9)v=rͦLCtӔ6LF; q/u'7rl\/n`R8DҲ9m=G.7oN [,*Ķ*DZmWi57}-dF45h &@;|Ɣ/m l9,kF{Tu+#8S'{ |9QcksvY5iWftζc]Tڤf|јu6je*9ҫ)-w2?jHKdg=Vh9UR+.6̲(1=L.kg&{_lISjym5]\]*XϚm+DY3agklԞv)QtfXif3} ^KD {$R)sƓ%eGʍRljQ?1HN Vyyؗ*Ks%H,ۋ3ZhfLB{.jIv㎔_Kj;j 9W2Yki[׹Ufl^NXdRpq+;MzBp^<,0M'oii$c[piFK3ѩ6]bəx b LBgϮ&%3*.2f] jngrN[4fXJ] 0y3ib7He2S Anl^^lJvW[z ªȶt&/JUGțo/Ce2[Ng4 -E_qK-zko{Rd e\x;scڢi |x`\k0Za+$ .g.W}R$ujkҭ>Ȍds^jA|U:Ĩ\|J:*QYi6 [X+0[\tyi6akC >z,\z硤UR9$%畆8ltYk{.3EA9UnEdmEr^%jnr sșu=ۂҪlbNsAGF{E`lEk Kl2 _i'؊3 Wt=Z^0ű7v}2*,9UܘJyJ-2I |FT{"۝$ռw>iReGdSyJkYR_vά+5D0h,2U:^+ +r;N;lhYz[l*u.Vk˭}-4!Ŧk:5.QLRErkXSiOo쩪XLf-Z4OFվ4bCR}JfX:ؼ`w#0Rj`RB(Iv g9=EttŜՖ'u'e0C?.#9&;ӚjCP>jVv$JfNRG|q__૑iJq%O>΁gw.L^j7绩jIE~u9DSaTƼnyW%7YW5?eK6&'rNb:2pML9C қr;ue't,Yˇmte= 5܅`Ί_UD`sp -RV<ܹe35nMGh&Zszv (*2-YOHgDm#f^zwK''n@2(7VWH犵c$7ez~kV RX ]_t]UG[_7陹^wL1<.z)7`D;fk[<EDE0Gr99t^]}] 7UsŖsbpo&Gis9ov^*\(f4Æ8YOb |`,Q Iͺ2J煃n*2=;m̫S(aY90wǪ.zTڞiDx`Nȝ&mA_K{pշ9qX|J_QyOцrX~%;S WH[z p&'e&7wӳ@r@K_N"I^~ /JI Sw+>ЯpoN!\+vH9|>A?FL'^:|ihbZ*RX6nFGhҴ)յTsD8j ]r}j2hjqj"pMّb!W*S.Y|W90ٚRwN9eBuWpTp7tf:Okure7@ -{\7Pl $F؏6tznW&ARXmA9EƎtt^qEeiM3oWv}MkIg1rw6VM_I$aՄΩ}6,A]Ά`w֗'PnnhӞו>U,U?X|FdI*gg]]`q{ʱZ7 >J(W1>Nښ5}$1m -:w=;4 R'5er^x.}yș󋬴KT,B\ۮn($(R{ԟ{%=6 -^#VF^߽dyTrlkA]|L)';lT$rnhk^ v1GH+sJWxOWdMѦD{jpXIpN4t_& 2*Jh5P+<(ut {qΫp<w JZJ]lq/`T!eQ֊{'<ݸ0 X/&Ļ0%r7[XKmnR%6חFxr)HG{"\x^pFKɢ+uj=)cXqSG1:/ -٤eSE_׶q iK8φ76qcylG:pH.&n`qIe[/e#з|9^r-gqEr? g'K%}3Z l۬ -1g#^pG @pH"&Dh?@9.'2C2S}#ʪ*+n{B"rdH-W~ґm|BA:Pֶ+s躋)L):-iSj}~M!q9}Ԟe[n]**U䗶Otm !ظ0t*2|thĸjoR!/{(Q>OO8}5MAΪv94z3q$(iњJ19Vhyj÷À׃AZrt{Ɂz)Gݙq#G"el˛)r,k>^)BLZ =Df}]1BVTrH`k1ѭgs`ԑt]bQ[ʷ4=y44ȗ;gL-!H":;UIݔ']?/f'Q!ԋA$ær#x=aj>=춭f& w~̓7Pp=B)#˘q H\9љE| +nW3Utz[[+~MӿWApOrwyl;Fnҿ8xٿR6ɳW^t@DZ -~g|݀˸tnۨfq.fٚʃKOm;=~1j*"{Q{8_$=qVJ)Z|?{ib4Wk on T*X+&1+wsJqn;Y9*:|Nc}/ϴ/ +7+wgK3[ lMߋi}zHa^]WGau%FyT^dW%aƘx<܃)n, ;։#Vwcvÿ.(7]w+@KY3;ގA4xi )]eҽyxN˻snp3f}C,^;JX)aj[[&]O9p"-et|! ktQ\LyJ&h75Qѻ='TΔ~NyVk=(T;ýshCJs؆~mF]3|q5LG[@ݎnsnXק oXX?ǙF3 ]>AS#I~13*F<mj90+gy'܅:/Ӳ#* k׆CR֬0PO6p} NISl3h 41:Kg-wvMtHP}Vk2\~+ xB.eOor38٣ynȳ -P Fxzg/m-w^H[/_zЪԧ;(*eO[#BgckG/I)L;‚½Zbs8PO핏l{H{Mnc[lLuHZ@?X@re09|13<,>Qs(jۮg hifZգ)܊$;TǍ=l NV*fW!rwvi~{'Z-_9JPם>7a5kwDXŸQMQ/L )̓Ww ,.)trS<;}nqdH"_`DYI~E 7!U)o<2є,Rߘ *v>xRߐHqEYlf.+}Nb73lP[:f-']9u N4 {xhT@Uݖ_׿1 ;!MojԐBʙxT5@y綪#8mrOb~_>c 芳}Cfbo.o}eؿ˘3j+{.6ԊibK*UY~}n\h xm n!wFq´lP߀t[kO.-i"=%GfP_b\qEr(l#fnC*5"1_z෴a]^uXֽ/;![a5u,S!) 6=h߇eM h!}Mpzof{L ֒}}Fb 3g azd{Nf0HIq"1$<+F̣.Q]Me_\5R˞ZYL\ۼw^]ckJ\k̭kV#HH~(@fC6 >hXFt2[q]=D <]E2`+f7Qos@Tr;ROR/DzEذo.VAɻk?37ONEdsSFУ_vM)}$&$ _v;fhw%|3.fl-Ú ^Pi"oiyX3Ѻ50Ӕ#`нY4|:jʳ:シIЧR;:a 9AH|ӹ -DHז$Y+!RXB/HaI,ŬhI/۝5Xu!7`;[P{z54b;i mjICr3wT;8 PJ%0s-ʟ)ؠW\W)BǢ[VZfq#@ئj믺 Sf ] ?|W-~ޜZ`CNIc >a=۸Yǥ5ԱU4Yc*…TNo{h6"sDU{4\ g_qGcj _~-OiB} qUy_[j!3XTtoW.gڙg Xד*h>rv~Kb\yqU1ExɌ" pr Uy6ǻӘs-Ϫ -6G!7Rk{zF]VC}әb龑fZ3W\wCT?0* 87FmseKYeHip]eRVhdJ-4ODeA3nT}q -LSuz1R;sɒj.OAdeknbyVD?yuXa\g7uw9fDvZkse}"3jrcTIJzp.ĖEh)ԹaQj>pzU=P9{+*YoVsU:# ªV>&Si CO -i#VYoN_鏞<@F~KLUs;k$l5漟ԞV7lY|cŜjS'up^2o3F=J9 a57pr>/Jzc_TCn#4\P(x/μtF)G)]s -4&RN)S#xse]R=Gm6*̱`;2eM/|yͯh(7u<~Tibk{ ?1ɼ(Qj#bA<=g?O yQM oKI^v(書rÐYI1&U"# s /g[gmy<K0RuYn%p/N, 6|당J7%t'bQ'\ifvFնd`@7qBu>eas)2yvb:b-4HQq){nRk[HUrK%M4^+ϋa'EVX'/\e7ZBhj;Tip24Qu_R_5Tr()КT\Ұ1*BBW2J35K$.nj|k;j]B7DJFwWբbL>)l} (232 ,sI)IWH%=#Tm1j. -wF+&-j6TrdPw/3[kiAvojTWmgӠp]xރ颥:ZxRVj[((Z*qtT*5XB@4*s^:'ZoJjյ(-4},"N׹RcJuc?+'խOTW)yj? Xً:}&w^I&YZ]`l(uG/FǛmmm=ʎhv\:\ߖ47wJVYД@P4 IvMӥnw#og: ȥ-к#S)~[8g|>4q^jM9},ԛ*! ]ix+p4j{ԗEWNSiǟR+#ĿOX>U'ڵ0wٞDc i|nO}Ҩr:lL25|:ENebBM\lٮ̩/ibFk(f-vrRPwGӆ(\씪'zJ/-BS.a -*oK@n;`r⃄Z#Xgh:K+}y6UN7`R\{ΰPL(̝lpN_rйD,'??֫:[xߠUպH0o!gx&<\ @%Rde~d@|/V'@k?u*Zܲף^f@d_OkOLMG_6q$X\~j})#F07䷍xX/~_K'[Z -B!U~)z4pk].01" ռ5DިA"A]^|~Qcxݏgq 6eb 2dW?QYl̙EQL.4[vGy8o{Lgs%/fk(ZVO5cv^?r8[URP'7gh͓u+k]<=Ac>DŽMIr# -Dwh+_"ф D bt=i%͔u8nf=șޏSh2g[壌]&  ~_-ؕ s~[AG'I.I {_:h 'YVLr˝;ՌibFLs2'J ЇXX/HfuQVv;&άCOy?Njk B7C)rAqDK1"\9H9Gt+P!T//~L_!BnfyϘXkЛk1c>?+?OOq~z1)|4ȽO-הK0|4"B^kjiX~笿Ғﵳz\%q{FB.^j 5Q.ɫNakf/.C]޼R4KByw8eET* -<#&2Zg>-G7|P8!:49:уQziy KqדC%h^{o[J87^}KRy)]"w}AW**3A-nDϫ,t>" mɥ投%*vs7qTX/.ԟkM}.-x f:ܽLtFnfKlfe:L9毷w.{uܟ'M}^D9zY|nY3w?~'+u? #}o߯#\^#?}L;ܓ)3٫s m%hcI'F|^Ǖde;ڷA4wQ A؞+Chف̧4>PIrPt@}[UcM>hx c"IKՑa3-K>Zקu?Y$:4.e3lpenQoɠm_qF3"mgW{5rJ$J|3EV_bb O©`KbXb#yEv_p%xzds[sKT2{?J$[,;JkJJ|-HA(u Peʀ -%d^K~[YK$ÓT:&jNvgIpP̷ij}.z_9XmC>͏~4Q@de;Ⱬs'ӧ3Ujy>ZPpHW @SW{uR3>/DƾT3)׋aD{JGa*wgPF&mȳf铎kFC?ء'~~גzgաL-1. -b$Re)iclCQWE*1 5W1 s`CB=Oʝ9pihQ:Uo%pN#LYAfmŴO!5Ϙ vt=PxTߏ&T7C߳o+̊[xvXF?tjZڝxv)-ۡ|SF[7pv1U\ ֵ܊D_ 7"MO+cM*IzV& "h*P;~||xnˇW XE]Ϧ,|qޝ[ЄqJܛ$8hKHSjFUI{&0Nl8Q~zݩ\\RIdê~WH ̥ԟl$pnhFR7Z>Yr+:s~ftdې*/yzeȜظ4J9*j}&Kd}3/J؆]Ȁ6_qL4>)ݭ~LC^[4Ys3^|tNa4SV]A<q^:b $%X~,t_v~^=:u-Fp%4g\qWKцszY(TxT5ۿߥ}Dq||\4.` -j@Tl]yl5oz.2rVs~O_tޮB8O}ժ%aO[ .0~TH(y0wy]`)<kMHje?۩ϗ0o˗Pv -W8mҷE@oq=7?vӯnshWNN.fBqKMi -uB y?p:+'Agp2jtz ;]Ll2 q(4Yn}+UPߩk*X^'i&ӽO'l_ėP!_F)zZnqCm {k&K.eSgBCՏ ~P׷T_; )}H8x:Eޕ -! 2Y !^ v'ܣSyIjS)NoVD= T1DFBbp 5 / m4<ߨ,|Dq0KQQ!G}T\j.&pשP5Lu2X⽿o[2Q Z ,4OH6po{y~Zיiȡ(͟듎2Teک} -w+ߋ9~2Y !`Ou/->Ȗ -s7 Z+=MCjvKcT~5Xn '2@Řю;ծ_vܧk/hTOў -X" jQ鿻ksRݚ!7 U/LR]I}y{W}z^P)MdTVVt]TFf.9 5W?:}7žif. j[uA\) .u,hx|U'@Sm!.F 䮴TX:%HjKӓ2E)]*嘵rs*dTd_/P6تa5@jX`kʋB&@DjnGzmg|̀=vsO<1jdT?5db|~ՄB?g?/ƟϝLz+-!Z@Po +u-fQxRŽY73S<3r>nba^K}n(*S+ }*?@ְ1uZsVϢ" 5.ff^dS E] ZdHTT -/er"嗼Ojuci5i!Vˊӆ= uI'92V%%c՝gighًo˼l7׷TnO+XRA4coma_d=ϴ:OYA -BC6yL$mY)1.##;)b3IhՂE6,xia,敆VsHRJsy5SLˈwq;pN-r~qx)v5SOi3!K`Os $<æƾٳ%p«ke{@ KZT) NjILJ3 nrZF+0"@5+u23JU}3 ơ -Gy2hO`7;lKJ5Wfa|o24{n~v>fM)( ZWC} XE5EhÑyvZLvPSvP`NmۥWG?̴΍S6sl.ej1$~g*I1 f{Xxzo!wD5t#59Ӏi־ -}guwKƌ0ywa_Y*N'פ%utfˣTס,ڻWa&9nľT%^m{lkmFZ -vj5!YU7 U:Y&4zA/lH~{ĮZ]>dnzI}zrmB5L.ǣtR6?8#\TKp:,d5;ErJzL=0G38,|9m9TG"Ai=$Fq@h H>ra;h|ht#乨7lU]IWG#w쭤^2Jp  .w~~N>twjHR> ohj~PQZ¤v >tIc?/xј.z#b5Nd yp3C}txX,Ω8H4M5{[ WO5ilLu>bucL˴z\ ?/ =rl'_EZRm]?ejSdogtGHX!-knM$8 e\t?ܪ5ȿUf;vWAuGV˯Ah*_ kna2bQ0u$т-Y +׻>/i -)\g:MVۿJd(x(KO(CYvȥ -jW1>@hW@N1"t] -и8C9Օnj^#2O=bCڻe[ӵlꄌg|tͪG-32? U2B)b,tVQš"&&EC|wpJ8_k>[CUZ?*~Z3Fu zF II{F5o+2Պ6skAg ܍wUZ|ǩ XǂD/KnŶ(=|@lb>V ,-s5yR}nchubE+[O#fDwіNYo_ ^//g#[epNu~ -CJ8ֿ"}Ni֪%禈JRX Bm_zq黑g;mi h*2,Mi^iCyH%gԻ8M>Rq{$xk:4NmG;hZ6O2w-sw"t"ұV#Guc5֋F-3h 6\VceN v;`HmqSc}JX"zzbW&-^)I:mO*|l|YluЯ*/[ܤ-F`IClzZgS:|Ә -[a+o^=oYY/\)8n7ޯ7µEyeMeo/Xo#f289A76&([YWLPKqs7mRVi; >ؿA?WhOd/~MQ_II%$^ӟ+>;L; Q*Dpq)zBV?2h;>^&-9爁%%e?LT%]Xzid4R}<߸E5_;O=T|ګpNV%_xAEd| 2j:-c"׫;AWߍKJRR c66kg|Hd6SI+dPQx^=nvْ,W5I{`m$OkoӤt}j]-* %urXx|]ӕUܪq/IVkװ 3]@`C.OKw,@Q؇_r@:ݛ#Jr{X\GuB+ KjJ5/>jSlvt}Qc9ۅFu& )kiYVRz @Cuw\~OZC2Y7g4X9wq,pʶT&(̔ F~Z/I.B 0ˁrB)V@M^nj6]@a@b#,dCفʫVH3Koa~B]sGD#/5 ⼋!n=rțOAmy9_1j"X_hujPM}6TbPԲ%疆x`B!HȻ,cצ=ДnEξzBf$݁}`٪Y?_ Yp/( @Ak\wyqt$]qnN=z;`l pFmq1.P]yNR.*z"}`:'FQ?xh ch|H <2SwhVv,+r*?ǖ4҈ æ23&ߣ/ׇw@%|Q0}YAo_>F~ 8/@ؿ?o -92cs%sÉv'Jrz}CX2 Н|/%]qt[z m.&Æk1\|wafy(7*?~wՐ6 5[h.&%tbYV:,[j>7Lw)ʋ:[óP<ՆCi_!f4U,@yx*~6Zhu'[R47Ow1y)nwڹ>stream -چ"Ui2DI=eatt b_\U> C\'ҭF¿d%>(5| -RPlZŸLTt7e9 K jw:bAel dm'8u/!0. lXqR1Crbݣ粺Ķf3&~8owȓRnRQ_$*ܬ>6VeWEQW8 MeM& -fmp/KTX r&띃Մ}&a*㍓2oi0:UwW4Zz -_F-U5ۘEJ4&cbOb&x0NHtG*$,FJHC?\wÓ-](Ϫ" Es|}]&yƣ7*,A\/%rSu6Q?}h -uqqɵ;/I$U],ke si $s+7U6|. -̈jLѽY2kT}s'@AEy:;ͤ:E5+[DD7V7ỻJ~XM\CyBI ߲WO Z+jZ) -us>քv Ȅ7̸-bIF#q+@:j2mH Q - s=1~ioű;giR=fByIM`|UVsacHvKg0,T"k;S#-t{W5d ȶ#[#C}\ J_&jaNo]Gx?,eO}# !\5p箸*&9/)@qx3TT}6[8ض -)Y -5kiFeG&a93 >UfsgE8y*zߗFKφYѹ w_F5Jb N՛ԴԗfpR\ -[ T٠DAkLE_"c:]V|k.}ʨV -URet5uLW՟r{ȟe:^:vgy365BCK WD01S>w3;9QnȬ%2sp`/ڃbvM? -ob&f_o(-oF@%JT wI\Is(;2e&ᬈ7cWűT9Q4Xkk n[u6kiŻ^ƕ@3lITEwWS;sۘ&M;&ZKb2TqhKy& w1XkͶ'@"q޿jQ9awn*N)<#&!5'ﴧ/XEcSv'[qQHS'LK=\#z5ږ2uahT9=Ly]ݣ"ۙ'B@vS98XWnޟj~a*doGg)ϝTLV3i+ȅb56mAP֭̈9sew~ʹq6ThW3yX*WbgjEiTVmðUlm CX|*}Y\<[l3#W"_vk?;{4 1SS/`)qSMkfQy(X"asHFi1JhF -\1&Tw -?_H ?ql=k*c 7ŞT~9Χ Gr۷֕a_ą9\CtTb:%W@:Vr߾Π |ē4*M?s"Al`\ps (7?j6'Ԕ]N HuQ]2Uo4E{㤄bVϒetfϚXSLΊYZȩO ۶-|- Cꙡ=,UMn;cnljH}`ۨ1[!1Iw";+svUHS5n@CkUsz O@wIܣUo>&v8}bLݽμ7׀YmW&#O" V`uM)M~zWǃ"<-k{ps -Zֲ_q -e}.΀UNNk/~Ʈ쁺͐<˼N˞u`^{ _hTu1|*:}p+;|r4ӓk1tAY!g~ߞ]{e{xT5AԻAp55_!%(aܒ/xs* VvPx&o4. NܟpUeWq保G|H_=&:3>+ւ{fz{RV]G8jBJt! -{/r?fQ*à6 faY1{ŵwx~cOjccUӼ(T.2:;6~Cԋ70#-85ఃbϑQ jP`k JإF !ӭopw'ZuH4Ѻ5iZ+bt8&6o[-_fG+$hɵVP=!Ua-5b=;M#{QР -~0l +ǖ6JX@lxD+yN$YUBa';/noJZ˥+nTzx}[|9 EZy=gzm`7]anj c~Nz3(0]'_~ïd l^kK] T‹z;7y49>- w -^`X7zԟqaڜ˜Ttx@cN+up sFS%DiBfe6R\熁rǭT-Z@kb3Y@Lw6E&9Aŏa=5<ݩ=͛8 9 -X@٭Hσպ1LOODh -W^XA;&8 -ʴ[xxŬL@lhloJcw;,ZGc`{!xoyx va x%)[[sm0[`"OQ۝7,pGGgJ߹@;? A+)r{uer~ATBSĩV"0pY,~ |g#r̼o!2We!z6.\V :wDz)Z|I{)Y{l>a Y*$I503S̶lLbNͮt4r!|p\pݹ=kI7 )Zē< Dgዜ}e- EhUV[JOT:ǍvיBG<7Q~neR}=7Dz4z6 \V%lk?N9!96jleICXr,y¤F ޅmMYt"l -yLg]F*8266xߨK"RN˺=sS+SC/k"g ܶܒÖ?~ ǐ*iDŒ0-.[<Լ*Ґ6KsSOP˾K'P) -5Й]f3=Eq -yzJ0Rn&7UMV<ԃ_M b@MNMVeVj,C]wWtD?`KOE45Ôkj\۸57?2u-TK/lp@%nl}<՚OG#??ﵸ:wzTɟ=`qEɣ5N$[<<Ш]74~aOo )v蟄GS`yF:њ)4bNl2eЬL{J< ݬh_-K *wH -}l-zLMUݳ$6kȝ]*#թ.?gyPmP:Z.eW]__*/ $Z 2XQߛrtC okv1Q+[w9rRU@ S\ow>f`]{-#< \d9z"rw_=ŭh׳KoT(Ancmxէuxb[>{B o]t!ߙ%4(yW pF R@-ʮuQ`Jmsoe7Z86Df~`t$)RroyH#fmJ\M' Si P,Yݲk]s$>{H9vע)KO9y g0z]q?7_ h5&LPRS~VB!O:e1~ԶYoS܆ڇ_^}h%`[Դ=gڸՆ^i-ԣ 2/Y&ڙO HXޞ"뫱xFꠃZq(Z4Xm{7i JRQw- V% W!O*J%ikt#7;p^b^\ -+SUƪ ~L(x8m֪k~,D+@D\#ԚAL7cQ 1CY⽶~{p­S!ٕ+9Z`'UkzQ|ĦV"?"( p -fG{C) b/heA$V0I=7Լ?JvN -9+|kXŽ^ҬyDJ~U ;|J^hBcO&^˵R}t [ -d5|=7%LwH`H.PuAhC>J? ͪV9I텆4*&T[ߓr@4}n4NM B;(` 9y>D {^is_ϙ>չ}aXiWu+)?ZauN} =BQ}SbdLl톉S;fH :k+\ ;ګw\WD g+Pg$Efhl 6ScU"/ܗi=+a˜*sf/@ wօjs¢qw> ,vk%Su4eŶ5g3ʀnضxσ'!Cd4 -mHr鸋/ߓ}b5:|-3_szb g1 m.=ei;Z`04Hcky$ ZYeТ`?4)Qjn-gUf0bD_j:̶I6&n ϊ>=C<=<:;"EQ(lIzP%8+s; _ߎ502#k{G\v+qs`]*Ymagp]GݎTszv4ӫ7T;lFM\½0 " |BV^Qbvn3sx} 9kr:Q9R=R(Wa=d_X`hxiM+"WŤ{N:?H`w+|2Ai2GOk߾u|wiliA{X$/u^Oi0bp,'ǴpZ/@a L&(0/j'IѴL[ʽS0o%| $Odb^2Wd^%Y:hi5ωT?|T"A(6Yܽ'*+*~"#-gGBC^'W2"w&kv -1r]HOVr3=ˈhh汝 }j(9[([#\e3^&m$~h t-%⌱ܴaؖQv$(t)ff,XK?{O:[_cؾH(5ęgQaU `?;XY0X$h>#ϰ.?2}\[9aDX ZFƚXîN(ʣA .jU{ҾKW}_|9 uh wMM  O*coyi_-CEH y(3w5[,}f;3epAi*7/w{U  dˬZWu|BbazU[ -$/0&?ڬ Nbf['#GXylݪ|z. 6pAUBrUw3o? GWcJXt.TzpZ~/][%;Sd(RXۥ$qR:(,tƊ 5J{g pe3a:I1j7i+rp7m) k݋rO&+6+bw}\0R~zf*R@>Q7❟:g?t+?z5q`k -ދDl08s}{o?~$VU*Lyk+&w(1=_!Ϫ;=q0 C4n?òFU"Ǎ6xYײqģTOZ6~Ludqk ,.j̬8 3yPrea{^Bϛe 5;rE ,h/v,{Q\ -t#V !%~:H58#ѠW y{Oj=wgSdfu|܎2X=J:5|̹rKW^_?_tYPv#Z -,Yxvm"Mnd诂ZTC:5e:nYi3Vh(wIj}S ͽ ?$ ]Tro*c Sas i]U=xUB_;ꠁK8^azlx\<ݸ4tN)>h=۠؁NJw4/ֳ ; Xn}D{)Up C-h42A3Oq ZN64kq2ׂxї":?¨[qG6r~ٵ=yC1L2VﴂSrG׈p#|g0C{4@ձXhIV8`Y^87 D4ߖ^[nj^J68'YO 6t0zFW#wM2B5Heq| ZqU$;?y׌Hi MJtc"nW9Cw3ּKEK˙"nS1! UbkBGؼ- RvNb|C!ΆuG9n*'\Ko#;Q(JդO,7頪s~&0$k>5 -rN9QE%Ujc$!o~S6Ha V(iSBw՛`v% >K|OvðEo~4 5T{q5jXf4v9@<8ytX: ۵Tمx^ ]E`TPTl^\X =),bT|h P¸ -h0K;u`"%^I*PngM+UTW~Wqk7Uw 5sEFTYZ4%Ƨ(Yzkc+|ZtY|Gl 8F -SKpajTz>l69rGp[K\qg N?zaE.,}d3-we?Ac<9ʿXOT=YyD_SåíL$oN +}T} -f…/9'dcAo'D!(\Ȫj_T_6}XEâä&Kqr1O8W+xqja@ԏc|@/.Db%RctӦ= RlyN PruTT7#};$ypi%Itެ9RČʺv }gzsBw7Ҽ-rl7UOFp>lJ_m7*u^Z2Έ3X}?[-B$3~A5A)9Xk].` p ;Q^Zÿ{{zjs=b2?i*, -=;<%ٖ ܡmdJЋ%WQkȅpR՜;q; dq'j#cq蓺C<4hn@hׁOIO;ϭvtX*>c%H>FoSLa2~lv*R.ۇӚ\E$lst’GK\|=D V)8֭(\\oaj: 9[G%˪%v3N@p~ -!.NN\hkòjꔓ\<5[(CG9LYR ~ ᕁt:>7[\o<։U{0Da׻Aryu`#&EDR~C¿ 1 wu+m'#lk[t4MeofN=א;H9۰x'hɡqKO }L|WFXD,^$(gjiMS=q -^$u89/-A];q42sB~sLvi=}/6c?Zp=D%B`7m@e.WfULZu9&l_S*UϽg~Z`Y5T@. Ϯm6eeOV!i-vkڵ>wuϗ_FSXhm߈ sWrRc` cʎuYK)biZ"ӟؿ{hd; W+N+_OrhU-ѫZ6,(|!ŧ& !^>f/sL…mZhmH -hm\7/r'; hPڮ0J{H(,Y]|5:Pl:1J׾ق֕Aa)!G.V:ֆo6~7 GnY3E{m܄r;n[#hǐl c#N9Ym oީؽ;hZ%#q@)Lq}D [ȀkqC4泸‚fyh'UrJC^wejL"o|E?-j5LYzy)Q~ ] KcҬL=S85yl1*'MdH83c,\+nߨc/lj[AzO稜hڳq L2J(R4WȁB!~CJţt=?5NtٲV9ٙ |}.&7£`(鮡0kB(t[V0o*KKʈ]O-^3G&*gCٝ.lmz ޮIFkz|`K_Z|gkAҾV(]@-Ŧj2dWn;W..X3;=-$]~Y\]6T5MŠ_iQ6&5H=d -Y̑=OkzFzL!L+W1tx)eFʁĤn5Z:nppvnjթ$knԠo-.u[aJ_i "fk;oh̹v/W0O}:9oG;-Z$曉MaReK)=گcάDx&n;FCVg -]W!t;`W^OQ["09i2.u{ bv^!zV *\d)7KVJ  &J .(ݡ:|jJZ4ZqfF8uZw^GX.؇S[`S#Tҥڒh8 ;NXj*V^= SX$~WaTQM.<_8j[_.T41tg3NIΈŽ5ZgP_av[UZߦd<>GƜR5꘱ZǪ:vȘ> -\8ЧX[]`"nf|oYzxz'v,k}V[Zs=aUhb2xQ1`z۠S_VmtJl7^ݥGoK<,e:Uʾ̿vJ+cY`㕛i <=Vݤ_KXjaY6`pcY.DSVSC&s<&D?ZЮ.#OR&Ѫ v&EoF5π(xu:]խ_Frq%ۯ!7 >ŨܐMO<*"QoQ - NJiVϟF9!(Au1]@ROI[S}-p\26U7פ5;C@~vX0 l_?`|g{ZChY ;=D1h[kEc% EWXby|Ẽhwvaevd%gNN'pc7MIFAZUC y!6&h^1a d7dw[: e{yLR|މR[(εtg3kRj(r*R/Ӊ@fC{:8._V"Uy]{+zcO.$k”Kt9U&ai )7[HVCCX^9=bHo:B#߮Mn]{l.&PE QzPx4Xu /+zew[ANR*67J9"ߑeO`o5 t׊U̚F6tOwŲl>Bda}펖;1_|+89\}9Ƶ'הiCj8=ޮLړ^`JV䒉ciȑɚ_Mk8_0nDZw#&Yu,6nW8~ShsN,)Ub4 y rfN1 Ȑ՟yC| -VndpjZcz8(i߉F5#RVykp]V3XC?>_S -N_0XZTUiaD֍t#ό|~h?~]R9SAyVmlj%یTΛTf ?Ck&B;UA!2Te WrA}i',-G[oBG5 g+yݪe[_fWhx![S16j[m01׊ n@(*ҿk:۳3J{ -N3Tņ@~ ^y8@gr>Ҽn:DB# vٺޜ)QƱTOgiIG߆v~[8v_ |_#JTu.ɹ=VXZk嗈kU;"\U8VE+`f(BrgRĚOoS< D^9ׄG( ؕ*Ϛm0PR8zM"}KT -7(FO`Ǒ=fwzKDyߣV&}(cYnA?~gqoM*Pإ4F/SitAFd+&MW_9ubuIB]-Me?DX+N/#aToxb7S˙_`3uE{ѫ 2?? "e c ƻ}4V: 8JCjElAV`n)60>8{X"J$nhܴŨRn{5Ǜv'ysj-vڷ;kG-ڷ@%:@dߩL)ίvOk\ -vc(kۏNaI/wPo;aG$ L;~e < 웣j*TCnAۚ>2jace,ze}an\!RR78~A.vv`~ b0 lDFN,3T`D /tQ0-_CMŬ,QQҺ3%QM2;ӆ[w1l> ޝCQK2\.zWͻy[o;GԾ^lT] qd@ڀN(ˤdgœ_5<\4}vM~t}Z#{}X?z>Pm|v9*jkԝr(XZXa -_Sr8%?5,/3V.VuU/ݞ]sn0L/dj;tb40m;NnɘnyӲ7YGomPEmW -Ԟ}+^G 7 ~ɟF]m OzzQұ< B zf=m.) -ΉX}qI_w2pR,(x򡠭X?/@gFr}6v%Y:<v۩1BR8넮^l<7%}pT76Zհp(QG6舷FTH@~CLҪUkp)ʳQESӯYfrdt_i3jͬp5GGdxavhݠakxJm -mFmw\ۙ7:IkH烃=c.{66 EWZCNQc TgLZ4K*yA -΅o+ރ«u\b _BzoR‚x@4OÊ1j3&%@5zk_J8%ov>LuGc׫N+;=-QX[f 蛣 vϬDcdqS FCtTėӸ'w /@q{6jGG֦\^ -U} F.R`f֮wme@JN@/;<{f@>L8z5 4L[ԡyti5äA&dv鴇e-J##o)j_;f^;We|$ aLjN:;T8zT\`AQٲ0 -+K(քI/A&7ّlnݽd.9sq:ttzw,켮#?Xu_qiWӧtkz11H}}W*P89IyJA|h(?ץ6=J{(Kv)NXARmǚԜj_aF‹S0[ @y u5QLƴ1tn[UiMof nҞTqYi17akݵD=qZR:ݯ5J))-&^3;WÏЛgʘh2 U'e8N>i]Ktw m3tZaF`֣fNu\'[qāG mE;#3fwvY_/($ Uwؒ[AK$4譃9$#YB ~GE}tRԪ]jYX]i Y2^}V6L7uK.v&1V>^ r+X%fuxo?`)2׎RXJmu.׋a9b]O[山ΫV> h,eϳԆ0ʘOOTO$:.kӠ|ƌ],`'v3X]}^@RO͞ԟM15ų*͠33rD4"kh3:M^It{ADYɞGP pJ(sxzZcPOKcd Toz~{&ݡrw~a[|u晝sNgF|hMhTZ!=0ؕbr?3z7cxuq5z~/5N.otl4i ҷGv-[(zN;~z0XGZ 7 Gq뙮&~@fsLf~^oi{p⥗ח||(?Xo\bYpJSt67H\o6#MGj:4/~5<P -%yًklJBrþs9[{{^buJZGZ?~U6V%X~Q^cx>)k\cyj}[۝?Oafަ_1Ë^?37~>Hm&Oˣ4,zoɓR/E.i[79fkx}9ohBQ -,Q+ɾbнsD[1vl8v7nJζ>>5R Uw} -;LEN;b\= ڧtG>&5z9*V,Ў{RI'yYG$0t]l.nϯoW4=\b~ ޼BWX;I2q~o67 đs4fU{q8ETsӴM]Q&f"!)4a,էi#ɖĭo}1h([} -*{sGCإsQ1\:MQ̳UcЃulKȹH{/wJheyyN;W|~k<3Y!]nG6yvc`yҺ%FcÎÝl5dt "H3YYn& {m;ۊ :]0hbQ[;  kc@@ST>[wǖ\Mv9;܀*GnV|FP3P좞yմ(u7t[쏛fF4y6Y-Ͷ5Ywr {u -.pᐛ Sε=^ށ|Ub&m;'^ߡBqDzikr{/Œm4@SDbjW%|- -%'C2D>-u#/lFJR"JgzrGjŕw1t ;X"]T(s2G26=FfFcRm> 3u)y -zp@לe/fBH{ZKXe5->!f"N|񹇣%1oUdkKe .BUѕ -eRՒ0{'t-%G2y\̙v>ALz-Pɓ{b{LO fi}ܒ1=5 ;Ȍ~>d lG%Ӕ4=X>ҝ"Tu4 -Z/Hh.ǽ ߧ铁N.^ ; vEڶ_'o&O {XdDKh(ӝ,L r1o}kfq~a`!I~g@!0lєi.q`Pa貤! }hS>Q O<#c>sX WhD5O&zy=xl -o/o1j Q\wa%vJ淾~RRqqlZKt]&:t&3)EoJ2/އ·qgPò_'0]Uc/Nn Ȏ*aq×a|NG kPǢstxX4{Lje||'4&7 FtQ>>$Q4eb.UR}bn6ҩm,ꭣy~頍~ ʁv>U>c(€U`Ko#S8{@i;ԯ?0Pwu[s4/#(`#Uk?`bccB!REúy6!"X P;tTɞqO-w6\yFitо96ۅTҚ?0rofz>ȎHv USt`tTpi)nzJIcL5v+t]nh|.n `;: gd:[?IOnE<ezrZUt ^^T4φjFq+]ѷ3-Q6І :4+b]v̗x$cY-tuSh}< ު!&+:Ѕ;'k'q(p Kֆ?ҹW$ -פ^qD@pDsLAŘκ{u c:GZMw֯'. b5#-D%x19L*Hj4gh&vD<${;!Vx5Չ޶ +9C`c⚟1c;m|4=t!x%dU=PA!wDAs'siɴ]~}rhV Iߞ6(pYt9յJA)UO׳t$3J *f)Wd5dI>cy4$ Hmz|c%M]@^[-J(1t؅o`9xv#h=nYS*+QwFH.ĄQ`b`B]gƂ/vت>Z-ȖX塁V:Vȹ$A 0RXd@*1w"ѶgIL׭j(6u`ԟO>Pc>z:P6p[P;UUҖ[[mz;h')(q4S)p5˽+SqLT]B~}x<%%me?P wDθc̆2ԇb*1+snגQU h - ': Ka}ɱ9xr3=7Q_fL6BQE_\.P>KoA -Rg{ 6g0?hΨM~P%ǪEmwo^=jm\:6¥iškT+-C RGҝ ۮl|̇&jho6<ηƄ WZš"X -O0W⹍MF0 > -KCf3ʙtDXĦlͩ@CSwȮ6A^#[:ˑ} woX GnoG֍AقXԺ}v)4h'erCw05m"]-s?H>\`2RѤҹA~&TZm:*T١җWO__R$UZDC}W˗ n6٬׸@\l#Ziq8;gv}*WNf)ߕQvf6)khG:7D=SI}aedߨ`nckŧsvmca$giػ`% I)lm<Rritؕqs*az8{IlfXFEf؉Ǯ&/&'Ef `DAB+ rw4b}PC?(V=;[=>Ma^l1/V?j;oR҄&a. 7zdG -Gzaj5٭;n~pP<}~jVYq{s--]hX=腖P?m6nn4OS/Ut-,;flr,R]9*.϶ |+ -5:ҕj>3bN^7BFӞбC+z@Uj-˧S86rR?emsfme"c}R-QEBe8B%MUQMM;s),x`83x{ -0k~h\7]U~Ar lvX ]‰U4h honb|-=k aZ޻"]l+ٕj7RPXʌg<|@R/+F 2cSszd!% -jqaԈMUX1иi):5e}_XV"}j*K0QaEߍ }/UOT9V#Bgna3kG?_^bXZgm߲l`kՑFWt3^&Yʨ}N - ہZ^^lۍP(B߼̲oҜ Mqv/(y.'"ٕs^A_|geҷ[z[$S~N7 -GN_w^:3P[? J1*ddŐ:%i'z)σWaQLXRef9h/c\0LvT@] P |peZ<-s|!o.4=2*_jŋޢsk,q@E#I/,Z'V>>ΝOwօ5 &ބǷ5)/wUsi,*5\n.sdɈTRR{Bf0MxK,l~cinu*UZe95: 0Xwg!2k(Oa p~/z;;S'frk 94tNZݻbխaN@wF_/(՛ڭv_U:N`ʧЌOРdxԭB`;`-#YxMQHΫw*w5ZRmoC1(k6i;R/br:sbncF c\k"G;ڷk5aX?r`|*KgvI(Fu tfev/{v_@i͢5奏kJF!Y?CccVř,?y:6ᢲVr_j@m -F;+Ք={7آ4 / YNWTf&ӫn߅BטbV6OÅv#vn48v=Ħcvf+#Ńl7=JFK{(c=ȝ*q/ Uɽox?շʉ:yƭ03ȵw2˝lplfw/6ó9Azķ_-I~kP(]*JœTލo:e - mlY!jX+ܳ`^n3{wuZjSG\xQ(wg:'Y/nl31àD/yCӱ,ѥ}}8n:~zu<5qFNW3,shnoz̒$݇*?б?U9yE_.Rek5Ԕ"( 븜8= - Gr*JL?9Kn3H]-4;ݭ{$ɪ{XvH^ƣBiea3agZGt2-&1}4-!>Uuj ףM“$H)·M_eۖ-mh__['q[mvkLZP`2'IR5|{p#` _~\9ܛ]azxJh^3-t7(q`[iTQYE$&ɛf{mH.nm_]nw5?b>4B4; S&|<Ik64ɼU8oH+۷ee@Ĕ3% JkkU7dq]c%| 0~bm1&۽H>eY /݀L߈2]u&Ca0{K/<b9C~5uT+1r=H&f͒-7ڀp3 ꬻZ -.F$RKGשq 7̄D O[`E*>3U xBᯒnBXO͐1:j1eIr@JZlB!}L8dHvvz7FTzgrK{s2zWЯLjq~mjc[!XQGA!Uq wYre~\؋\[Χ 4g*UqB:P,S#ѩ%O|Rb!QK_8V FZu -4=]L"oݨ &&-RQW@y O::Pf)KS~{AOI! ]CfΎu~`%?os%njqsRIwW$JK [fbG/by2;0Zc" vj_:^v -EZ)4ǪR ,D}do5<ȸĭ*w%]*Y/T +y9'IdqyG] -ZU&s\tCI]gk2MEWH\=)o2Ǯ e pcH:DlGQn+E+ !(D{8 cw -;[YT,wicѠ􁽳<8u2]MQfZd6<8Ȇ9qx޿I[>$=M-O=YV)`h:ؘw-dg4lRv]wP \oS[:)#d݁덲ZIo%/[P -U2d#pCpknuk;_5 vΘS5oQj\ZW 1CHܒ4Ȋ|x|>_ydA35io8oF)k Dz% 3N2#WSA+AB@}k9Ň@-^͵p8˜hJ ůꕑF^v$iSnB$w7p;Eqtz55Erp|M$*tlI6bBW/z]Tm7,/UjHB]nM+ixM]?~\2T!]R7^=zG{ W-L6 { gȚ4>`Uڧ9HcMno%-zjlؒMؕ-")ż"y/VФX -t29: -s~ػe}̀ha?_Мwlxx'R8p"0Yz3 O_7 |f \;}BRgrzo8;gr/-إ6AF4sƑSeų&#v;Q6@sA Yقah,Ԗ7e$.s*It{;W~kٯ VMz%yϚ&DQxT%9E\w M5t'wd5;WE]0Iv;pk eR5Ҽu) $qV{8Vtkjfi=V?(PY׮MΕ>=>w& -E2.)w"To;=S7 8nD=oC^h =zf7'{a l9"=Ы"kR MG knfHgl*yt)P5LO>QpyWi] n^=5XGRLg{9vfy|7&٭c[5zІV  -=diD-Aqω9G^-r#7_ut|LgѴ}FwYMY.\@.6y(!_[r.Nx@.5/(s0\(9:耎$=,ȭF!DU1RO HAdr?7AY/xCLbPc,[PQgկkAe;/*L1 IWߗ\xUu_2{ɭԍSPdf#@4zZf|gS1vܩ~} U:uMhU ^h8dBX1HZQk;#vMiš?[y;vZVY_J2=4߱G]tcI6R#nq8Ǔw0^ H4jlnF9!:WXZ֒c!LF8u֞ zl}rՃ`>Of1e#|~Ku -p sWf`+SS)4㘉:MuqC<^:_TnO;ȥ :ObUTNT ʴNc1z<& -0x*++KM UyhWd1EH1Q4^Ju>Qx5m*jodL]jy"pj0n&Ƈ -ڑ/ۻ9>'[-c^]oN9#&x8֭fsb#Ѹ}ռA}z ?9A  lW -^x{ -gqWٔ*wIgWU(v‚l4߼G+nO"v) W߁,Բ^bٮxji#nY'kDC;>q~PsSns7|jc^~|p -?6?LKå6Efei=%Fcs_3N < W68㮞;þ -S#S9yL^T0+9῿+LeMSlXWAyߘSKXѧKy -&/yVL$eXUT8˹zRRaX۩Rk{ީ>M'Ra]meZuS*( eeyxڷgqAV^~m ?̣Y"LYoJY} TJ5+(xj@PkOդ%4_BnbOjR~G1^JT |VĒkT|_A_;d7Z5Cme2A'\\D6,6R?k$A+WoIAolAsɖC'qopDZKG0[dIrzs gg-4wB|U/FtdDxkR8TE66"OGLu=CTpѡ+bjzshiXqL=$.' ӫiY,W_ C੬pjqq}|s~`uMhUI==7j&kDm$o g>c'ۖTwt>Kلfy~jUY,{>|4•g%{Z`c_ʆ,*KH a`UQE+AprMEEiYIJc~c{qjzHt!(>QgN -C۫xTVÛb=w*U'ib-tG!lžsX a?VZ&~5q-+1ђfg|vmcB 6 :5Oš=^ _ -v}ܵ{uZӪPMG;xj85+BjjF$ܵXXT ]iGrp%9N\7jihFm)¬A]k*<D&mISaam{i_Ԇ'@&NkZť <"y;֝HCΘ^߮!9Xn.LZ7.^bG'jjD`P:pVG߅JĊ1il0_< uUW2k*mPW -~:=fRPO@6@_&/Ri7S#9Ř{Kj{"y֪6hŧe}>o9:dvbAW he- -f#"6Umb`V{2K2`;Yytg;moF odea:C˚VD&T -1313 +S6Һw֊6kAk;iAӢvd faZ,ɵNjf7Nv5=F -S 2NxuBGOCKVoGrӕ0s'gC*'3cݠ8) Ε?sm>~hBԫE&yIInXbzI>^iLt?;oBW^MiEsk3Rj:iB%/nI0e??9l.NeEU"xy5 -eec C5άCϞ*v:kiғ?i37|9gRndib,JP2|~{Ep݅WN`/xzӋ\Ycİ[;7O8woVҒ9|؛spOFgdQ4$SKfʻ >$qaSwFUwlXGyMD/\p*n {Am¦̛RknvlYH︘yb[- ZVmȵB`)e:'= 5�P);`FRXФE꘨u4U8QΖn赩w\%s +{}2FDl.V3xچR_& Y %?R O,ggJGhpU F=^B7;{XT*~2<,ye0њWE)(DٙY+Ph@ 57~=W -T _)@? q?nX[`ٹϮ`96 _xN݉~2.~oFFгbw>whene>big77wd5é}{FF *X7~"2TT]o}tBhYXն*sZ8Mz Ncr#U" yGkj_LѩO%Tf?:2#}]Œ{SM+;av2SC7ƨM/58Xx9qՓ&V*.8AcAuZ[}+IY -WL& ap }iOZw-l?tM7n~ -7 AS3}IeW|8m|)!.h#EdVTdۍb+h^rdy@<qz(evQbM2bߘ=(շH`Q3QŸgkd -;&O8|j A S9{ އ~"^:xЬMT |*#0%x]өx}LC֑@c?j/L^*0[g$Wx\&LaϳX ]dJCe;μs*A\M**JvĴB{5vN["O~ƗݫtGe׎JϻVVԢn_j9V KJz\]۱&h=ԫbxeUH5 isZi2ff -hy> Ooyx'?UDolvij&Fr{iWa:&>5Vu܂* e| -Cjg(7(9r&3(Ͷh:tHj/H,[IQcVVt&e3<¢/xskEr2?Y i -NexhsUUhnA*V=9TQHzS޳nWk9lk*Mvh>[v -. Ҵ4!~(j|`4~YByW)\t2~Է<} [}3¼fjj -9+i|PraYfS}:[ZjaxvC:̼sHwdm'ơJi/KH_uU}8rfJ[@!z:m[$ z*)2H)s}z2+EٮKvP}݌lhЃ&-YaD9>$ȗʐW~Fp NYzWֻE̱͙Q+dk=& xa|YXi)4'fkj  FLKwUQ㒊N[1*dm^(vʥ0oitv:>ļǓSDvp=%풞һChHE{mS|&1i]jٳC;o]p ^z<薥5ٹI{ga vyCo{dF碤L k= +~qy؛IL&oVvLK~ըfV/G,}Gx>@E\8hj;XzN)'m80;$?8'kW+8#q@r*nD9偻' O }en`{!rlgw_ -%=V_Mxa?kT:AddK^yyx]#ܩw~,W51)3w+չ)l6.>ԮTlT?}GMsks{svU0UnfiAi%\FՈV˴Q?@ -{:tnSkC˸鳶fBc}.Uug2ەҦ8>}m`Q ХAcjikZl"o:zn͈8'w*p6r-T8Qe -yW#{q[[[Pnq4 -~n`LmNӞòh}6{sj$?pgi3;pү/c'eS偠~aj #:0vفӖ} ͹-zauLx)SU?;KM()eSĹɩ0+8Q:Ǔ6yc`Y^qa,-Y,>E:Z3s%-#UX==$wu͋zvݢ{Nw8s DJY;FdŠ>]sf<4 -%tt_ -\8 ^{~\QJ^M37C\e^ιk WzȽؼ_.޳B0/@l0rzT+{w}޶R(0G6e-#ձ엃=߷tb䌛3(%,!;9_f]K+ABS7νH5ZE#J`;{NV=eʟbegMW*tuBn -MJ uo9Ұ8GcKzVI iym3S*0n2-]RU%eG>o1wZ8Ӎ҉-#P͒ㄝ5G V+#*\[gRwx z}h_hZs:hNѧV-^Fڨת@|-5JO+s:(ӽtn>>61-=pyڏ* -0MX* 77Z4@3WB-B5ߠoYTCFY,F"ϯ(I> +DmIAm |{pǼZJlmќWPSǚн뼵[? !!` umӪ?k~+f=ܮbhNt)*L=>܎a{*m {>r+9;VVγ__v .9>ޣ5DQ{J{#^ G˦|~ ͛xz:ADaΆq=D?Uޛb[4̾G?o )TU9 ο*q/IH?SR;LY;!< ŭZK8uwPJ:]A1\ȕäs8`t-bAϤVcaq-m67x;@~LDy]=dy(0iEk+gz GfUA}E3sGT]:Y$xy1C V7vc` cv^uIRScNZğ\xHE`,[/+Av:Qaa:p6ؙշ͜N~r l[5N>ڟfvٳrT-"=EA췝zӢ61 @n."u.5gCd -!_E't论㧣˥'a}T+Hׇ >/ 뙾J~^|tCXh`0-gp^EE/LkT,79yؓW k g[-*֫]W%8~֌An riV(^Wv`GF&`8^/G^Fr -nUF15W^r<$ճ2Rq*qy=dOjp>X`=֚mн\(=i!DO|MSF|"~fT}@rXex#<ɚ!ך*UcX__xNf{1hES59#W Fx@k&~mbY-tO?iSv+5\>yY SG://lB*Կq%ھvuljae7h'3uZ_"bIzggsqvW*d+)Pxo\3+ê7h7!#;SIܒ*n:=mBep݉df:G!^ʢ w"e.#/D-hb22k&$̃Zkq.λ\UܲP,pۡ)8!r6[_uɸkh;RN׌3;*esvn_jVkP- W@ $4vS `1ʐ〱qTg5%]n}IcGQp$W&Y &l}?UI Hg,·KyׯP-dOlߌ=T[h}*2˿ŭŖ4K;O?{+B9ڳ]oI 0we*AcF^>;y<:-ӻvA|xBԋK|Y){ pKP3*D<y4Ww;G/pۈcw͇=&:xDCS"fG;_W(^.~C@v}8zg5 \EI\jrRb{~:Z-M#t\TPvQ,`g}i#E+7vEB%+z;xH&2~(akQ"0>GG'gdq_=".fF_tRH% Nf{vP'̽4S{W]iAf! <nԥAVr>O W,̰xJ$6}r4=;^dH.(ӥg=0#Wn[ȏ$⡓gto41@k86,W`34Vr pH[=t^EP2J;d^ fΧ1-9脚3ɼ‰YݕK$t?YwX XmgoUFd 5c9!1AAJtSG{-0"~IīԼ^bfnjv]d! Z3_FԷU#0DKVxANI%'uڪ SvLKqVh?R5G餳 ńvLNu =mxU>pT!Ѿ^Dzהk?X_)`FsBY-/: {pa]v\B[_fkS1"? ߌ3~̘^k+>d=k9ZaeAF}pR[0z{YKDnyԤapWkV%k#7:.5>C?YJsrC ãQ`\mJhǑ1@oc٣ :ܸiTUÐn{:Sc _?͎L,V*! -"Pz`B5;+Wq -E{suPĸ#\<>fw YѪ7?ĽSS7[6kb -di)[TFAY,Bbkw(VU2s~Έ5jU5瞷OhnM3ߝ=sCCizwVɘmc+]G&6^p"sFԇc$*g)HS6Ŗ] vM6?׹܃KPq y'_  'б$n*B*1]oqo3gEy Dwg24*Y[Jmdz;k2@k=p!|6狕m;K}`#[G%`?t}'[uHNV.KΪuKo*Q{e8X{AfUVihf@5Cq4D¼ݼRZtyt ꩪ"vѭksx;%OMuD>WW4xUgk;V.}t P!"KYS8qGluDH 0-)Mp4l2YFK`|R?-/rgʻʝI8kCߢ9jxwLk4ҭ\[{|~2; ˽u,ֹ5 -~q+yx -BWʂ%u"thZB.Su*ut|9Nd8||.WtRZ!ء^͑UO>!}Ug-{iGE'Б.>Fn$*e6:h}_> n}߆ciDtGS k*dZ9=C-OЄ0Ih_WρjmεOգ޴Y(65q)/,oC.10QcnN*v|͐]2ewTyН޹%CH`oӚq#72M N[s kg";O0Q/,P~ЍX7@4 c Wγh)LjR}=WN29tJ±heozc7XBF4szDwBJN n$ -S_S8o>f33a^>?7AE^I+@I6>8*LhyãQidX/YmW[TK߂Z4?nԗ_ԃU}_OA몑5wGJwsS8 H>$[LV5e>oxGR,NGX' z.Q5Mdy|]m-V_:vtLfijȮqq;CwiTL,5S#xq%Y3',٧P+ϳAh|,7VSQ|-{ tܧ"'gyLmݧM-:Ia>#ɮ@_7?0fӒx\ՂЇR" /\5_ "K0QBTvPa; 5K΍c͏u+w4E?;`>ꏟ_?}[t䘗&i -͚V}͓7|<$/ٰ&P @]c/&ZύZ+٪1deʭ*4zν ɣ'בpnU*n׊aJFjfyW7[EtXV&5#ff+`lgLaհ-a8\S%[=kwȧ&عHc<־k]^VC-ʵ㿓iv.&xJLzW2jceSXVÄ)ln{͜ElfM{*CфƴubizY7O^ށ7¦8Բ H;C`) n[e'y{"Y6nK|Ȇl$+p:ՏS;mRf^ʛdhwk{A> 6ٝWvm֫.s`q |5K,4Ыt(º %t9bW͇ެ\ `>nU9t4Һ4$4hJ]w8 ²R lcO{%5*Г5k m H-svBy}`?|;h7yp鐼!]+-,'8X˒njW 6J^C|whݻ U]ʎ?vws_釙6KY%,lv") Akigjf.+(boxw7-ia=ڈݼӿ4iг4UmHj`2OgWli""vnhުPːڬ\ǘzkk4uwrfπCYIaFP|g-$NyϘ`/E[{R}EՎ! }=]ݮhDqb9w]ʮu>.& N`ֲެOm{1eTz}Vp5vlCsg<<=ubDDn?Y\=43U^t$$vj<~tAƮZJ89$TRp9qpxt,IeAvIcV\xv[vM3|ifn6(G:{TQ'fo\L=:w=݉&vM,*E[S:G6>'i;޴wݣ2t@#A+P,-tê?țTPvo!!~WܿQnaz;NJvS[]Q>:m,ND>=o)ܠ"N*556{p4gr}/Zs$2ZȒ_899R:|8g!˂ PͭA\ޔGQ{l?7.ӼҘBV)ġPeb*?_LKduiًmH{7h`Y.'WEL=}} z?ۭ7GrL^ciCiH=!2X}qgnSgNUκ\ⲣKRꝨN0(~HО>T8wޢ{5lג'Vg1B;*]Ǡ_Sm) b֣1߸Å^+._k~c` -'ةgg -'d-_Q%T׵.P; 2A -JFA*-yyz@w:闙IfͷJ,dH$տYj^|o4l<72w3g#bu nm]gd -Ž R -z ܆mq[D -NO2@GmZx7*0=X`7;(N? \@aр.Ƚsv;<bo8rWT΁H.c|Gk1M?FMbϙC֐ye`(Ypf"5+ǭǩɾk~W/R.v음iyg”(2#ôEބ+90iNMvv,f%AxpVSks3fCsս&t|U=RuXc` w$)9@ވStD=ceV@mnx }֪J|a`"}46(* -6"52++O>3aCf̹X CKlǍfF,/3蕀`iҩ è9iسKC%[b1qWX{P]-:oR#f7 *Y2>8J/.pWަP^Zpq$1J/ L^HOJ³(Y~٢hVGOKCbL j-X,VzS^zm }؛VP=5ӇhZrjO$ޢ¨X]jPM4k N3HQ7rFOb~ -Uܽg(`םOerZ1ij6<ɣ*ͱބkvv,KoBβSytKpƚ$/ b^[{O]UMv̍"[NK o8䛈,m2ňˈtHfqpYЃZ$\Z0\;؊bZ?K_#3X3Ӹ=V/SՖhB$^Kѓ{1;4Ca!?RWh.ۑO Eann]H = =mMzF>W-zch\Us;WNS夝+rnNex657$t&Y d1f˰lhtCf$Yg& aܝwV+i~8˽(j/TX6Kʈ=+w+b3SQl9[L{rޣ CģK[nD}C5*S>15_:+ )+ՀT^օ"'H㼐8߲f֯'j.ϒM-vvX-X0c$(`7mh`b=|z9Ws̗s r6bbdYd-{FϏ߫Z~JN/`ì3RpoyV1 R!!ld5ڎa]:Mo:﯊DKZ6^m6KJMie_Cށ߿Mq_/\E>7A^-SX|QMJ, -MS 5O!v+XyX~QU%1ɋWB?(FdͫP(ֱ@5Ei0Ö ,ef`g -aI${H)SLvt|v-A?^ Rc: -kNM'~jXrytN \IkِK=Fv}E_s-KmM!!'Ed>'C{Z+*!Clr'P0=aUYɏIR'7b=F[aǟÛ+K݂ ,wC|^LRQY}iEH=( Ipy}@DӟA481y\kIKX4ڋI]#2nhEg|'P?C}><%86% -գT;heRewR,O||W0nK`ouԅyS)y*(}_qL)Aǂ/Muҥ=ٙHc.ցS_1Zc `s*QKI84S]>家4yMCbȀ.9q65^{Tw&`ig8-7&w)UYbCv~,!@UynžO -\~sTno #@S6N҄QB R;omH(Yzrm'T஽J @.G)pMxWc%ˉ ݔ^`vZE9^ ػʁR)ջު>rultqGڸʝű,mًI-SM ]84̱R`.ۛCL/L\W: -vXͥ{/>8E97"J<:N(Y"u4!ͼg~=x$ɝ5 קsJ^cL|ZY6.j0Ϝ"OV; FBܣcq$/;VY,'K˟ -?#lU-kTwB:ig16弧TTcljUl[nJǹ -p썳\\(OrvF3N%a=6S  Zbd#pdc0w5Ac~|C|;< -hdˮv/R+;>lnTO\st+?8++Z=ηDT$: "TscTط6"9Q-U#Nr@bqeq3xuZx’G,T};pK,(\Qۗ6^W'GVAgOVh(˕|A)UD͍LtC^drʒT>JHC=]۶ >Cm<0ܫ򧼿uwjp]9?A!,lb܌6Kwp2E~==|htaua.{z5xRq [q)>n.c{pg;NMؖӼz.!Jz> -Sν֌Ʈ$:1a+ j˔JL{A$|G[(兹VU.a]=[ \~H.+bw:.jzX^rS$/E >Xor*Jg\~ׂù+wKNŝkBvC;BnBxԓWm UĂ.}j4y u -)?cG;S1B#f{H𐪡}'G/`8C~ ^cgu1;.k1]< -9T.:"w{m?`îkzyۑ %3}go0ڴN;sqH%~Av{BW5HKoF= OKh<qctS+b2Ͼ!rK PU/@/ZsA\2|w"@r^:nتkӮk^E`ͼEh.&R:+>nS?~ -  8GHx=4^'z{RMXu<z!tCjҝ0GL~ÿ[QSzR ;W&eyxC`aBc`y_CsG*6(zu,JlLe_0ث̺\5HHY4Mv~wHo0}JcbdyXsb47Iox66R[9k  j\l*$h`'Ca5ɓ 5yGX}nW(<~opݾӵn7 A M=TsJ^XX!Ǵ]^(>\* #*3l.+Rm]z _B2iVYvR$ܩΣꮩzEzK:iM&c5Ó|'+}ۊCݜᴢ IY?zN wiPYi62'_?ի.IC6x}zsZӣ\]j4駫=Z=N;t|/Fs`&;t{U}M^ʍӜ۷ͷF{2TtuFI 6b -0/y̻$b!#^'yƇfxPBxXI=ۗLy鋚;GsBY/Iz3Fx$>v9|? zXoձE[ 8&u|S'ʿ%؀ؚ:vt="Ψwy{J$ 2}FPRm`RЪӹe}:n4j3b9%vu(<F;ź[j |;KdgDДm}T0ի'jX~#BR[Cx"hr'EYUcfH]R|UlYl͊F$]7OX"GNA|fkW[+۬'pq-\@5Qk&tW +Yu -r>pƐZ%SbˊXya,Rv1I+_`d8Da . Jm֞c=n1($UP1k ׫4Ȳ<"16:.5RhuefԮtr]á<1=S=OV?ytw}+x~k D!CiG~c<<ޖ'K'3dNFw˾oMhꃋTez4b{$hFOzs/}ٴM]V ZܘW:g796ZrʞRZa捿Fkf8*:R 'r8e} N$ELt˪Jq)#N4)XYJ}mUJPOmmp(+z½ FMi`d1k2NM:〟m\F.#(䧰z4г{2ݚSq-pĤ2Vj(Uf44|);7qأ.Z8jdE௖0viY"unNpi|3vfZPU\*b25X]Y|H51jn`j'Y<UxL>./ $ca*% 5}A Gj;j?rJT.YJ:i<0ǯB%]3s6].b1YB+,zS(ؖߒlbW*(8osEфnGypdԆ`^v3l'B"Z%|Ӷq{*"Zc󓝓,Id4b굨&/SB0LJ6 --h(GesL^@U搁r( -s9 -~xh;JYO+G,Ɩ4>*Np䪴-X]Re@*;'̲S jvKALh$, !{k Y$RjP,Q7Wᯤ"ߋx [԰ @/[Wh ʃO#O yl̄wvG# qjT`ru` A^~; cY:VsFܥ8Lѻcvk -<B`dN"T_"i盨BZ)^%N${ģuUuZ,רHACʟc')O.g&~Wt喍;A.r,\z'kUq׍4Fw>[qhdҡHAY5h.>u=-p;Z]Ң`ԅf&ex멹 .X+y.+๋#wTzf.Z`{XOe( #Adp#$@ -'lý{Q,{t-'tq?R4j -qM^ .[ dD"MoyTx]q5F k 9b'Z%Ňk R\(R$SU$dVQY)۲~ƅHw+uPz` B*n$}{aurc)b*Vl -KE6EC-ul tm()]1Kr6,(5dsEol+ s, 4+'AsC0 Gh`DӨ-ZrI=`m2Ջlida1+ܨnᔝw=GwF6뗏MxDhQh5_2ڌԘzk=y>VTTn)%ܼ6YFDJ@v{V ,ÑՕs^V+.7 - -Ey - 8ov+qEr6vqs/ɾZVѰ\"Ylk)b=8Q$ʚKf/\VE_r#tlrEw+ۛ:jCW-hC91mekXE䮯*iO/,ʥAjmY|`K= ^9nV,V:=ƌ͸9AlA}Au^MV vWw+|46c6X8e.25(.lV=X,byIvD6cExe0,{,N_Eguz; -NJJGr⎕Yv6ǵ]wT>yaumÁ@6r^KOwgW;9. 7zez.TNqX<6z;*.CTFE.;O*<;JV*e ] yGGbNVid{bnsWC -aL 0˪=!˾|$D'2?VR =h;O_ghYV +_?D^op}Bu/?j? 2^O~2:_L|좛YneVƾu`1WdǗg_<<^E/݂k{u)/]=-{EwkY+xB4Z47yh!y;>}#2WYE<]!lL(m { ovq<ۚ6-y_NfNž- RH;)TUW,񱁶sL em%D2d9Q\ݒéI|ːH!+ɈʠML7_ͯεɶi1w0y6/GfR!M¾;ӯ;>;KMU_)tw2)3 L b6VNv WCflƆGy>lgͩ,;R!ݦ9'%ҧz+v?F(a|{0'Z a1zj:*>JA+jKUUl~ BM_;|@^ڡlL] kG"+Bi.{i3/r"d*QcT`4Z]"WSg*=:&Ɖ\^,˅!֫ g!N+=__M6ە$\b_] -s0<|*%k`Tmy;o-&o1//Õr]/gEַv^Xy|?6 fV#*џj/2џjo6r'h~j_g5o?g6^7Aj~-uf~H|18~[;<%q­m?73bp}"ʽ^+d=# #ʞQtgDo0RpP͝JϨ2.H\xIQW%/~_Eui< #M<Hn9[17E=؝q MW[r,wiBzOS/YodDrFQA-9onOns븹}f -+d -3 ?i$& _/)xWh~VqFQ+Dp`+ջ)?)HBvN[VгT r>uF1V&Jo׍bDD]  \5yik?_J!\ΤD!᛻'rWaZϖ5%Y'izCy8TFPv.N|QaTE>N n"Hc\~]SGuk}bBӔm{Q&ΏfWK;ob`ԂN!][v9|I}Ї=oxNvՌβޯZfLHuxY -WRЅa>NN[3IA?yQHuŋo Ic+*K"a-DHo{=\1kyV#۵zyթp>&n囗 nsF?שLSӁ?O'h~L'h~L'h/<џ{_m-f~_ c[~?hfWw~k' -VÌap%#zcѪ]-EFS:qg uwہ3=lsl&MT8ro8YY.8sh?hi3:e43d*)yʷq/B{]k9wDG9,#K}fw7X-6?]yIt,,ڭz[Ħ/Oi -AbhVnt.p> -^'[:nԯ.o/ŋJ d= KM(GVm|uoZgt+;_9%W]jwG(;oDsjAے*عrbi8n7k}O߉fTb ;%~ǟY8_3 -!d Pf}ˏm}F$guaR`w]ar;U~z? _:DD8>_}vm|${IعlyW~%d1f2nv+WN= \ Rpg9t8:;Xʽ"7p?/f>ô< }޶7vZ0k3lw"KW3Hz*EAy ?Q&s~O7SG^zO}=RSo?n@V]']O8J~6r[ksFJ-:[#G$JWOqQٿ.rJs,X`>٦Em:<<ƺ4/}1QL q,^~? -'FU1RȕK[4Iiza䊠 sdɚtYPf9 :~LdTRI45EX8?߫{~ -eD)PI[v`1Dz;E6`;NWm-cH(Mm#>JS~ -k⾴dm_: 1Ɩ_9{ -/(JέY/MWi5j@H)'VG&&8BN(P^ dѩ&Ig4m<:ivͥv6:xٖ&l]}ZG"q5t,{GJt`ؤheDPGۙ+l |lEAA;@PNQovSud]Yuπ51 rd#c6o>Qul$_|ԤΡffCgVcNg4szZ$i= ;=8/c6bv7XJM@+;Ruo<2{453A)O_atыiuʔT\NN`:#_]Xq伆Tn{W-^ZpR-~=n臙Ŏ̾tNߦ-H@Բ~NO'EƳeԠY D,}>gK3m%ݱ endstream endobj 67 0 obj <>stream -+נ']]a¿r1eqVN-7"ש{^4'Ұɗhr!J% FǤ<nejcku%}W3뵬wb(7pUe~.dH$! -A\qzDLA:ѱ F#F _#` iFNfy-źn@9B:*c2[ѵD䁧ƥVg2j"Б$0KN$yB`OR8 _'ո}E҄xܦ'y^o0>Pʚ<HKyd{˸&'coz5{1jϬ{{]_/uė74AOEa廢L@Xi&9]?KD 7홀ĕBQˁ+Rteowp&kxeQ|ed\٘ۗtO}zPB}fТڛ٧xnɃm2O#x &ӳn,#m1?r1x{o:1p,9#;L̿k٧hxn(/cvKivLQos=ܞio>6{Tg#VZP?E܀mo~Ͷ23; ۿjU0@-VCJR L80=qh| pD,:A].muuC!#Z$J'Xs'2egH@o+HC6ڛ`As+)r_4*F>O4lT]+/o{+N`",.HZOMԠ>j\eSQu);ϵ7cW~c,|)Z)CYJKk oq1j梬\SYEZ8A_2ͻpҜwd}7W?Eρ^ :'[TO@ѳvyzp*~] s"5Z.-\7NN[R 󌘀n$H~_\b~[%EN- -;r:W;66W ׺|@UZJ?5\kk^!9gfZfSOYPK_&y^. {zZ\f&Ձ1j~v_?4+Hk#~ -b'Wwg}Lg^1[C2X[3 g\r^͈qN!.L^ݑᯑ# Zo@znZ 8\7Γ)ړTkSFA`hE/5}lvG6YNiXl&Mn}i~=ZIo`{L4Q{z -6$&ByDO8-0I'Y>OYSrygͯ{?+ a\46<ٕe<ޟD/& MĖa< wyq/xġF1=[ȩ.zw87YG1Zzy4*%AKTT?.KK"y -Ipj݋dưan EPFd怏z9|P%pbkCKdXdӦ8dt'? QZ+0.3 $ʏs_B랭mKUN{n -gȁsid{g 4;cC;_VGӓAf:bO g94mֈZq%$?fǢg* -OD.r4?W+-gEoESIyEhliL@N6@|8sqxuz33DKrgGC~:<=tr!"q_]M:mψҔOh񸶡IkckxLmU鄥gEl[@OPϭ/4SxTmwV}Ӿj23wЛxۘS$?(. -]H@402, -5xFKa?ݮ;omG -yM)50j?@^y,ԣ9kMΆkgﺗlH[pſhc`:~hJ' ? Z6wW N|;aq}-ZYLhD?kjξw1g7jT;+>sVT+VRj:f]*c?e uѣ ۆ*r~j -~meҏᴽk;G+hӘ!Lw}ۆ~H@?;?i "2F jqްR [睃)hNejvMuq؍Fqq6 .j.J9e7v!~Uk}>{- C ;bps6bms{l#Lz'ViqiVs[όѳtG<7KqY'/!.[C4 pz]\G@y23I@ :З_y[fRuYIC]VzrJ/,$Qo ESȂā3sdirO-[2nvs-]L\Cpqk4YHsOL`r+@8H䀬D&9 gGR`GSq𙡏[aC -"/w'hyǶ41GK3->piPHIWɍo!njyg$Fu|A$ߟ'qM[ pz D Ҽd@H/V/u 9l?(P/t<,>u!"Hh.:Ou-U*7φ Tח1?hY=)*6ޕ̀JhIBNQ+L\(FBa%dk4>qgH@E=.erz|Ϭ(mCRJ>]#VۧYo~ȩ$[ "Z% 8-q-mjDPw>4EsDV< -u$;>})/ HO6 ׀c -kWY, 頾(h𙜦9oP^QSVBr@ɣ?8T+ >,hR9z2D\6v"R1ie.:QlZ3T/5s8t+oÇP͐M`?ks$ }m(5ώޑԽ ( pt{,ى61Wh$QΎ-ضulI- ʁffBQ$Oq _G ,9Sk G2wΓ#]K77(>#9u<3s\fq'tI3FӳNڟxB:儔N;'J*%A G_E74?+$jbChv8 !| $NDi=|ģcz|47{ {%WYg']߂#L`3~E+2̈́)%0cfҠ=%k>v;?n\kA{=e(Ҏ ˲-JZ|uB%~3R%!0ߍKy?!׈aD1|p(U[МAD6Q<L{G)ҭZʧ1PiqӃ -oZO2䃃T\vf} kCTA]䥸R8 -7J5c *:W38X/Ώl$ H}mcN+:nNdnum&y2~ 1abLhnE"79[h -j@om[5W&~-@3io9ò7M(J9tCT| TaД*\+1gχtUukUzH`ΏC@o\?Se\ G_ty.CSScK\+xHI^b -ߍwkT`ȟ: 2&uP9n[fcӖ֧,(~XL+\R~ qmq^3zf\GWW^[+ݎB C&E4'Ϥ% 4N.=#xfkr}:IT#uNާFcY)~1wt5i6w^/`nm{ -gI@O9Rfdʢ z2":eB;,cc}p%e܍Tqje$ ИB;`RyY/eՔcOU3ndPpntTDIz4qf0֝JI|w7?׎B6^fa5ʃ֖.{%[֥GJM*P++6Ib%ĕ~WSʎ\h Qz_* ȅ (Ǭn¡`6 džmx0?0ps>sfun4Z -#+F0~!׈+R.r}Ifjѐ-7K)t1"4gM֖$ZU%;w;\:Nۜ]2.ʋmh$xԊ+MY.+QHΤc[->Vdb[n;ьKܘSs3W{] -y2cQ`},9Ц5;]xÞW!O%ĵ? _l5rz2C0Q*-h&Wx";OPlj l㒀Lk=EA[-? iB;pXl? CD7$?.)˟y~䧀v%(j+Ti+nW55=0+e{ ֧Źv%pySk;kN9%_m^s! Mը|6."bYe|lBS5]]TGƧ4%lL)y .](dKm`%0U9Η^dfvO+i<,uKYKlɝӎ }+sJ*Oԉ!r%F!Z_jqHJſFm8f-܁.rh>gi!'S^EoNnt ]| B?ҋԊlHe%񒼪6e̿A),Wk³;>w[[~<_niqU2>xCsz}CPk}:ÕNe9XXjb \^;k6}mXEsl21vQ\N|4e -sxdEMt\aX}.`~7'̆Vu56.H)K{$斢]'BI,gM1\u?z@@W z^\/uΔvL؜Sv-GhR9g͹5nq3rR}e߭7vwUB_V&0&T}ds<1<ƚk%*`ܸ:{tUi'` -Ӕ|Fh;srدgPFQ<#.e,W\f %Ik3~֔xfR"Y*y1Ͻne5VW YXZГqffeZ" 21ft:< Kjx7'q}r/d? dP.?9K -`ԢH6_>9̀ \fwtII?e⥪Vk;2Eg9 {v#4yA,!h\ħOa(ac$ {WI_ۄivBͱDžvN.(7>&[ø=Q6/{?e#V7g 쮃 \.@h)B'J3X${yA.sHN&>jRaw>Qgܹ"V3o8 ,;wW;Q`%װ].B-OOyRz߅ͳ_c\T#r4!x&PP[GGb>\YҘ} Iz/5Af91')DT?Z9ok*lɥs99QuT [-Jhm']0WAQkؼoL;BR*O.z[P hYwź.̢ܻPȓr <8W<`N غlI-> `7aOհaX)|xvPH@[~7NVZK.CblP$ -@y38ì`yp^dAиgr]㪫Rgh`5kK k$7lNV#nLK|]oAxq]Z1Io1|{1 GMDijM1{UyZ]yNugv9m =Nڹk)6G'^E\,uq1q)y%?cJ!.ʦ,Gȿw/>dօA*@ۥ`T~N]X01 #_ݢxVQssK?fǢ0]74 мk05b'ZĥōKGhz6 R}$l䡻x@Cu/*=#NBZw{gVq{ZE֬; 6øX&[qqYJY^.p=zUKǥv{8Chu޾[O`y,Dp' ]pS'/m@t 6DZIg\]0z:|ŊC^5a® -&sD6mYhf -)B'@ \_on%lw 9zy#v/ @}N<_fDwI솶:y-eWoSj E4-,;s"QD @:۳;j-zJ(6Yy'nQ6E:⢤kbnDqYB?aU}ϳmFZ~C+ϦK.q ;K{7@j?7JX;;=Vg`8ibEg%ryŭޏlyqtSE\)QO7xöyI^2]p>8[Z;v O~ިS̡ s˝zr$ =fjջ}i~K﭂ ZW@Z8~WBtN_ƣ[8%=$]ulMsF3ְSWvfeiSOX|0W|W2j墛nhŚpGw~<]/}l}>ο o]hi\ -mZsEiFV6\ij9?92}{ :.WsUK(zMyu:Apr,'GW7v_j>@;B׳JX\Wb" ̶%@ג2-)i GL"` !_ZwИ⧂um\PYΛ0uڳ~mأ=C7jVK-GLA3&| -pPJ7qwbތU41M\ԯ2irAvVC]NY}5;pX!cGc[壮Ȳ.7x:ppBYF(fb -ls3D ~.H\nǰⷸqU9x^htRU6SKc[](o-g}xm=5oUN"UA4-#wfhOZ<ݔ ?+$Wd>\]AƏ]cPU5kTWD[o9rW t\kqQ|NF24{ln g`Xd .w\zb: ۪W4rhGԦvMȂ6opٸ0̶Vқ61LScdhȌ#h:O~(\eW0w(!iY5u$x_Ua4U͚+)} k]ϗ^nj`3NŦ%ߝMAK.$2oPx쪇 -rDo h7ݛ ܌n?<`Q-[{\҇To[I@2b%]`Pd(d%OzIccOvM *:5NϪ1K!SLu-S%˫ۭqr6m{-lmR+I-|m,s<9&eR~`6cMbEZp<{!"@\Rw0a|ƵfSk*{*u=~JOmʶ:x,]qm{k.=٤7Ćco0kbQF39:j Z~[ 5Wg峕 P'1gbuoЯ˓̫#Es0#0^6MMN&C`nt1rw u5A8 >5,Ru$a4 ~8+$=I'%cz*[n էO˅] q2G\s꽩G˵qzP4Nw:o.xx!9>,A87 H: wyj_BGA BjTT>H+t0.of.!75 k ll? zv F^?G>_(wg+{ :rfi]T,g&,3 \ez * r}\U{0a ->Tl`sj5>v~J]{GSzSJb{w:@\-`@l<@Ejebjd3|P1GWr,l1Ag8&ސsiUem> H2gQ*A *QnZΚcY炢(xm͎҆#:o֢CҼ=/pI54 g7MTkL$es{~3<Î/QewG>3#!wU&qWj63~%7m[0/oa3H06WZfV#T~uu kmRB9UcA1{SWF%@7  s#,O5 2!h|Oe-u|GgrƓk-%A2o~ұ8OZ.U@nb=b?v -PL9^_o+/4aE2TI[>,BSBAh6x>N5܈tO#B|#JIYq@ZXVOἈGR4s|f7'{uR7 { Ftz|Rlf׀L@t>S:3@jk -^b2x(\/g2)rЛf\SVp6=r ,&Z71jC] ϡa/L_xwq< ~\kua~1e2M4% L E{E~ -Wd7n1ZE͙2$)W~f{=ދӕGs:tD EVMRc?d<cs* J3V.A^"hэ$bۑ\b7>bPͽ茊N`eI,wXo$v~{O'BQx|yKBܡhad/P2خD{ Q6z>3B-#vأ#fhܣmi\Nڴw`V -זPh(59&[{ 7GΫ>O @ >D$QPW]oc)JYw= -&󏝃ztnǮC}zZ6K|2_e EM]^.BiOV,; +N]LI5+ZZ2^OɵΜHybӅjdRx[ӄ3~_w#nDفBzklU`ٝ:F߿-K|j”Qת}+:0ff)dBG>'v_ p;vUnkg^%=}Y ƹJNj{CO}Kyv*TNg>wKQ6b&'πE E!S{hh{C7yGu_EڸVw>sn|-t)#Saz +)Wn:hsX#Y@(!{ox/D'r䮏}( K\do#n`W>t4ۺ7Mi!41o0R:D{ o<6{_*bP̂|IB_@~Cskp|\'to/ {%]eR(d+7\1No;ϝ#,#fݫlUcSZ,˩lLkj_A'WtV.2(ޞX8c"̨kLf9MQ_F+V9ZHvj2̋A -e4{D=JsY:3v>gb{muVPRej+'ndN>kJFԮM>xB%% -jZAU G 1ku,m#f`G\(/e˙Zᙂ"Ň!TҞmr9 ;o/ 2=c}}^'C~])>Ue{6 "gngX:k~uhbo4鄳=1d+y:)B/_ͩoO?@uNߏt8}~RS8 W8Z}'CyVu;j9خIe9u.gGnRXe]'rs¾e\U9ӿ)7y^➷̾\ ns8)+"rc;4^sN&bͮȞ7Oz -VeVnEOOaD 9|OseC 1.otw^q6=7UJMLaG`17 3?/0UZOϒ1N>Ә,0lmgo(b:65גl:vaMIe=YIMz upq%4uo~jE/e*H-NF8q&n5ڳ7)-w-ѱ)|۾n! ,CP%P&*ne_yٴ}lWoӵaT[f,5 ӱ ঘz#4U2ٿ=Z:=D]6RQzQY#z{0-~AJ@. uuהwd[J#m -%t QݞrDD3uB='Nf:b -z/Zw_gJ}NGȕK%o3y "jk.T/lFgb& ^ʦH2FcTT\%6}U -kmgiPxtuPa;^Ʌ|FS?]~ŋ3r_|- TkEJ6@`LH*IJW$6eXj<s97@@R Ǒ( ZkNj Wq/ Oר풳Ssj<_sB`EOo(<;Q[PtZ><,0 @It  3Pt]Ġ-]kȽה7'P4l$ -D+봿oSTd3`_ņ08@Q; :3Ѡvà7$9IC::4[i5^SmNpa! Jq߇ix]g(m&݀zDDs@Wq0CctT^jܧ\|Ͳ 뭧 O?.d!4Z+.)4׿u7@VirU!//;)h. Vkj%@Y:xXy͚X_+Gթ'< N^?G}t˾kеkgхVLk -G)Y8[E V>kN^/D2'[IpeNOG۟L<Ƚε{hCa|/ P\:}@3]GI\Ui~Z/b^V}%G\Hɹ5EܞQ -~cתڜ޵jqYdXt^fdEkn^ͱӁ֝-ݿ-cPxGe"yJ5 8CS;W<#D7w`l 0a:ˣ"{WKubs3{hVHLv#7gӄųgl^.B͏D0BX'/9Bcm%Y-('8&wǰ̾<HVtUͮ Lrt]즍aulK&(O11SJ[7ͳT3&nu3y%f@=۠:|"Z# *u|eΔZjΖs71MSCm"f囲+$NZu>VZ.#d}]' Wf.ߓF3P}۠%*Ez΢V<*z[V7ߡ)wG#=r@a ak.owmt.ոI[J,g6d\<,*=Ё a}w~U]B.+Y5c ;Jv6m|h-+vPeֳ4Sz7{9i;6+•D,,#Eπvm-BP֭YL[[.f9;N_lVysDzm -]9$ˢp[>v./ /G`sNo&[Ra4{WA fq<Ǡ.L jtgUp~+yJz$OQ40{].n1eu WǛ3pT~g>`Z`?CG{3`4TVR%$}Z6nSe 2C+eg:lr\>_A:eƄ(呷r! eRX!4aM=ڃrlv;b3,sf__\|[vEԖIQOt_m3]5u<4+"n43N~j9cqkoQ-TַJrZGڨ>?Q4L#wIa*twtGr[븝/JVM87BAgP{ͻڶc)GV>feu/vwr<糗Ia`^Ѩ2E%jLj];حҳylV?[c=uuBk/wBzyV5f:('L5v䊽R:XomѸZRŽ2ō; /1~gi:{I4:A.k5iԸ dQT2MXV53J1]Ɵ.ZJUƮR*,KM#c_'}Z?6Ø EWjL,ö'vh*p>fz;9mglj̻j֮Un_S(N1nmB/Hsz7Z_A26=ҩurar:.#4_ϲDIԪ:ﴉm0 7' ݃Uxq:SKk Cc%r*.\@.S\BG@ t -URkc޾'GIo|{siw}lU(n-Pe 6-B[3 xwBW -&3U_G~wgNɅiIj=cMYR|i5zY(M85=ֱa;!B7 ~xadtZGؤ f*ZGYȿo'}hf{+ ;]c>6uYah֓`7tg@dp}JI|7 bg,U)Aܝb8DZV?g7˞I_˸S:Gi$%ny-K3Ybj-[pw~7χr k-y,])u?IDG׭v KniAnIWF> ls`2RgKlI)v:d:GY#hm/XM0`  w2{}Vۙ$z:#V~Ӭ^Ţ9+N-aZD=:G8]Oޟn_Óໞ,dhTIwXEklΙVe3@ -`n<־Y _veYj>IvoK a)hMlԮǹdooxyfLeѩb6Bg>*iڒKnνiSVêu r[ͯ-; q_(BQZ;g~ -\G-`.5Y,UkF0Q[2cMX9u+EYgDi7W7kɯ@r-[AۂU}2U@eR"zzBƭ鷰9u,.Q@"5f7I*DN?YVՆkͣumV}^5.M3Db\_$6|,sY#1`'k켉|xc ̾UxoiZ 1HLx&Y\W yE8|-FbmuZCQWƛ4ܯ*p|kȈ!B[M8x'?`WSìC  1(]Aaǥ§z`rc雡)p`"Z r};8Dλ|;ot̉Ϗ?)7o)v?=_܌wu95p eNK'ujϏ-mD8cCW#tliӺ{d߀^r*w;~Em;m_X& [~ٱX;DMuж_V!X9k25枹;gA -l|X=ezkMEzY~&nevo37}`;_g8S;&\a-]S24tubDhR&-/z9no`Gб>MpU[-ͲSF0~A^AA1.huunjZ%>DWjh3V wq w6$όZc77!QxG)b*jR~e1=شjĬlMz6NQXL+tlW tZŪq1 c4˸JBWNu \m܌ghQO~#^zL.7߇٦/ f;YΞJ^gY6ԩuŋI! ˯?a#渌nt+9&e^eƁҝ%5;lw*F3]<@/ݪVlF29R-֥S>kf曤Y?~"B||g}.NIrxk VV=5({J52j7}E^_{3Ǎ{iIxK\^O.fG+Ԑ_O;Pfwbˋo(>hx&I P$q9 xrORr䶊 r=]{<#(@ -Ⱦ])"dw -RY {,Sڇ0Azns`x<&_H D#m?BQ6^{FG#P3juQ 9w𓃢쑶t"]U2Ȯ WQjݵ9-< mYGiʞ -`=O1(E,@:; ~@͐jzkRq?ȏd/Q}[ީ V~3-XMˡ ('Ro,F4vP ߿Ephk5`lo!j} 1xH%ׄ5Ofy'5Jt8wj_\X23 ?@,rˡFr=)` бIݚ G /.Sk/8È4sy2x-(W -շu-?-Ok 9OQҿ@B(P0[voƂJ! M`ߵc43 ttk>=<[I'}DQbaQxъsȹeZBNh@ -anW`u%>ڹz緀ͧE-5;E!" p<뿘|=㚜DM*"J=(M喝Y -;ͤτOr-"wyדG2^ MS m[0ö[\ 5[U/ZO&FL-ϫP35^( -$哦_J"; ;uݾדSGȭhm9.:p@ڵ>ނ(tX(5[?maZ0i:=qw߷Ѝ^>@vS6\AT;B@<DX/,\K"ΣECΤAe2~ sW]ggM,}f9Yg;.*Iݑi4'N -ˍWX);nlJM;$XtJ -gֺ47x5ko0SA> `<rZyljdBL*>vjìXoAo\j%&(t]*];-woMͰngνÐ!kaafNY?D ҥwsgP9XnL;qgR0-mΣ`SvSl1c8V - gn.6aIm~~XusZfXq*6YQ~Po 1 ۺպ:{={$kAW4&#y(K!X$vE8[,v2(S!x%%K;q['JʝNU:-c@O~U~΢U-l⣓bdOɻ)kh)rbX9,K1[ޫ_ƪuF)3Jp0Z1k$~pM/  Cp\\9gf➊v8ˆ gŽ:rsn {gyVF|٣wR/>pg>b>C?p0vH 'ăLIN&&ޮ“&9#?`qʎa(6އդ#=sxjC?nMOmIFtqpׂε1ޔCð*2Gwg==A1u\hy>8fHL9ÁL3ZN_׶ωC/eժޫQEůBbtT6v/ {Dtmt:[{W< wUWYhUD[-F,;<:mUum<Tlqgk -?Λ$TENBFMI(Bw_7a\ΤSЊ .;YįL\-&wϴVϴڇjONV2z'q._<`-&[|!nyꋳ#k9ytSwi"{wдt\=gsm6^[|JOۮi -xxP61644$L'nr\76w6cɮ-uNiJLzf8zK Umظ`}3EcP/ݮIYʼr.&YƍF47[f#h^]эWs>YVvAbq#|g͆p]@8.-Omj+X7<pGWj?tz,tg-q05{ u"@ -ɮ}<%<8*`Q.J~~N"x}.ޚAU(˨Ogc_3 $6Eou@jG -]hB;im\/tBu6vS !6rtǑ2ͣ޾cf,2n_ evGoC_ cy{OАSLt+@ k6~aa3@ʇ_+0I'!bU|WαPا &LqHKlj IVRK{q;E |8L{?}s: dHyp99f?ׯx=PήRpL9OC_jmȞ|cйy͊cOzfy]971?C+njd -~ (bԈBL2\had|^{jc{.#<íO8wUAX} lu;Il{ 3}5IE88Vҟ/,z@'C@: ]y~MN9UK{GǁT~Vh8:_S28[uZt\\$G!WA`q"vӈq; _ik9!lG(yN /P&o P;°>1Fި>[u6|uCݮA8xŸK!i.6:rHwdAo+; 8|/Af}լIx(4>7_;p2TT gU|`er͍<:˅:7qw-M3kf |6ޜ3GKӱi8pouɰ - =@NrP諰A("GOod)lrzRjaW{-j gך_6ÅƟYV^ikc|k?c#J4z:FX x8 Y5" j|jke3^\vҸ޿ƧԾr+f6#W{ԬŨϊC< M3M v^xS{{cԨ2X4#yF߀! -Y1EՋ-Eطc:igh⭵q1S5j`gÛLG gu6O3|{!^38fa$KR(\vm_r+t 8"z) -zky8?[2<7Dև9HzJsMYcS*uuHEn(xOoe,e.=e4Ć’4awWiPsW+T-־q8hyߟn\6EMDZPLeLhKŕpgqJ]+y8ige$rA9o_&n]:+]'zoݴu"15/.r3~t/V>0e^k]IYO:è鐄 y{^rG NCVx?83|TfE7@cGІ3[[e%D:cQOIv*|.t%pY&Z?ON{ `p"j-MRlD8͌j*z m׬+4"B~w 3> /.kK{U6bsX'+00$M =cQ}kx̰AYh &֪ǥS ~˞I~]~ۖqnPEv2aۺwvʵݒ^;ǔׇrV>>IZXjW!Vz4AokMB\:tz;}n4z#t;}v ІTU-1^#??d8 j+㵙~)֧_N^cҬH7$3;mPxwSwsݝ ~%iKfi2+o" a3eIK9xM.]k8A! -;Wy!սJm -2q.q)Icu?X,-RBgJ_{`CkzK+Lo]>12#'RjbP8S25)IӶ'l‰uAk{}Ng^/7ic-Vo:.6jP2^T+z7.tey|RwZMV5ZغakG_=VΦ3lԌua)iy*"Zט^ZPF0}6 {אּ!\?3+$pu3RWG<~Pcnlxgڒ鼙} FtJ{uU|I]MRCJG2&6JҾ(OR>b47,+{hwOUhtTd~G.~i)8G)4bĆFz%yziZe^qŮ-2o>}KWSo~ZW8wwv\=w4?ؿ`l4 ;AO^n;#?w7DS. 3u߬hëdw+n̖S/QON([UռT9:U3ˑPzSr_o}V']r;Td#Wkr -*%Vo`ܾA}jVrTS:LܨAI,Iȍ%B&,h(6l& PB?cqOodfj:2Ct{ztDe@ޖ>]7R bB_[XCpB l3Kf?&$^2 BC"F,@ZiP3(IDP= {`~`de@dK(SS"MH7d|i,Ci`HؐQLbr`-s@PY@8@6b:OŇA;%m{i\xo!u71PaƝuFZB 1| **@{ ڠR*q.ξ/ r=h*:X <`~fsU덝vl_mc| -FWqWsu@!nۮބqO 6x`)9BۀT82fmK0N+8.Vƹ~;GHV`-]u:@>ȟR[:ֶsUiۣ#lq˪~ -??{ȥUϻKrvGKNbHw8x֏M='z%;Y)Kkle/WgI%8-E>s/vjmÊn#{\NF]p"e78EVz/ŹfV>-:L=΢{?#7\Z0dZ1j-A:=Cp9A0]t|*41Od~kNRwP1zir9/Ϊ^9+,?Y"U mBuQݚRGZbq_b#Aʫuw!E=ؗx8E>qF!E[)fdxǣ>55)gדU>`c%>G%3#4*_3p:h:#~ %K梃z~5<N%Wzb:/{Sne$lQX{x)%wkVF& Y@` PfR 6~*+Wr+!m߲}iJ\sQ$NbbroGij>Qzȟ4 Qʠ-eIdŒNncָ,g[Ǽ3l:2iwV^3$t}&6˚ўfQ?Ḟ8$6 V_G'OI NeI 3%]+#m@Cz+}cǬ6oЎ=!)Jpl=)ljy="wƯmh/g9 ࡦb" OzpD_9U=3g%tב37nGCNj bhsYT2.s[nJT_w f웝a-Iq*b5Px-:R&';R/Ů]4?;pv2ݢ-s;_^y8|RkeNpy;~Opu$Lm 0[j(rfy !K&r9$/GZҝ+>PҙE,6<.[gy^4t'[VBn4ʥNhư54l5Uy&B0lX'̙"X ;]fϬޘLtOAS*)8oq: KZ}: B;'myg,KFcF bk'ngb) ?؟&잰3o'b? K&ͭN|`L:>:~J".P:]s -)wi:0d̵X/ZJՀ֮qe4Xo ךsmflY2A>FlNn\ |4Kcz{ŻbQKTBX?r$6$]aʫJV7zVunK?{k^^8b~ }0Y@r"`u'{mq+uWZ3تO[NcZQ]bOĺ4]5ImP*Pgck"~R3۫|~r ]gt}R&L[=%\\[Lzش$à1蠮}6PO:5US5%Q5LjVwB\J߰Y-WURw -yԯopG1bԩD:ƽz]jfkc'~3N2^ԵpCG.nSUP5*ܼ'VReVO5"NQe#2 hu}$VtQ<9Qz}כ~l9̼vgH2!gPvK96j7畷X+70(c$~z1JiTQ<dfzan> 0~10"hu˦ý2ނETD}|KTke]O( aP:LQzb.9- -o%w? ,e-ζ=5Uf9yvCÌxboi.RUdY fS z4 k5ۀxAZҌ ?.Z :"ځt%JxXܟ/_xO,*-M$6@qq6[!@;{/\ ;b) M{~EBJ{m Lz> -%r5V({XVtٻR0!KPe?J azGp9tX߿^`B3سKh}rzޢ9 -S>~@XP,2l㛃p~s`̓ϫ@Eh 䝌r*. [ҋ{I|(ұ2RtwZQnnJO~cޛ ս}q +e1]X,[+ Z`{1{ љx9Qr_s{` 4Vg&d9>Mso+0UdWi|[ɵO{3B2:P{"EK\jzA7xHjtTW?kEt 9s73pJ8y *y;rUH޼B9?\?mO+i(t}X@& .kJ$8$ƕSMfB |k;>-J}Ok}>8@>L[5ݖzSO )_.5rĬ+JVf;vv֔ l˔N9Hw3uOlζ -2?ott.;͜l)R֝NZm6Zz7l@S2V)nE[=\ zJQħCFj)+.1 vPI`SR˯mDyuǁK]޴n^~ɹ6LLZ,>ic͸P7-ls( UIf$iyKF ޵ - -/JwկR'aT$VqxfXDhuv9GW=c< -9l6N?CqLe -s+"{leW߇ @U@K._M: 8ݠٰ+ ug-"e;kke.ְ 6^`7v,+oT-3$9 pl82x^A{?/d!( -@ -og.]G8 ~t%l{j1*y8f%ROE[eߡЗX Іr`}SA/L@\ -!u!;z9ÜΧ[\Sk?tjv>ڬgx,'緸p֞:t -C"P0Az`}Yv$Mz(.ʼnrʼnz(A p "**s[A -:(&Ra@T>c~NC}'ue˯Z32 鬤?hڟRҨ)0 {xT3B"azѠWo UERyr{ʔb{lEu9;`"MjJOL^J7lP*ƺK7NHİƅ'U+bɮmwfz7]٣D74w^W@6adq^ip̂C}.v(x3[ ꎃUѢ\{R,T${H}߫V^wvax#w :t0;I;t_bRi'ُ/rY:E -os~0}pjrhk{WS" <ꗦF|`9ko(|.:Ris^qn;+[UNN<^O ^^"e>Kx:"_kݬ+g=҇O*EUCM{LW&

    D -˸)6αwJRq 4 Jh+ffFS櫌m Aa'ӕ?؆s2uùYX{3\S ?v(eaf> =U!}^o̻89<)A711Ƙ[$-7ߓ`\:Ǘkd5WOӕ֤Dz,fvyꙓȊ3P!3ןb8G{!m̘un.K;Z{ oxGE $ |kꇖ{~ <8qNSEl|.QMmŬCN$:ϖz]7Q]#&6ĺ0êj  Qe2A׳D‚VʋV@ uS_),hXЊo7?F|NYSTRdw [n?TGýrr2zL"r3-dX7{mH0BD{9AZmղVl]PZe.;lT ,g}\vyR{y.D6-x`[@nՄ -U8>2G1myiFBqy~8Š.TՇ@Z\_aZ^~k)o2e>OﵽυymyE:q3KCY}CRi\^Mim?'6rL:=~]}je5֦&lqPF6|U}xXhKE)j7!D/,˫l`veZYG->b{Շs^)Zsrڋ@cJW#ӡ ~-UVG2$3Zx.͊ -\x qnjz `~(՛zσP6}c2YmOOOqQBݭ.[emr/8.e]3D5l1Ƕ4~~+Y/WìM3XewL}\P|>VT8&| /G p`)~umv+F( Dݧb.y{'3g8k jLr WICng2g%?٦{y{qM0_`̔JYT( hrmqi ^Q&5>c-&ǗD3s/sWC=wtPΙZQkbSHmHe~kyO+y+7:?pP|ښrVꦸ5R\@o;ŵ_i#Az@@)!AZwAK@ A*v uHE l 5!"Դ*ԀW ⴀlAjH wN"lR&Na0whƄ]6b΢c=m|1 L/P~yP2Ħ TZ33ig倴 ݬGR ) c A*@y^R'8r؉w L66Rp*ʃ/PW$26,8 ew{/HHt#N A,@)n z'E8o7J6{R\r̽.E9#lo9أfJdHq(TbЛ 3v+m~͕P<Y!@4@T 9^P~[=j<&';r!/ʂUL[Գ: aPZVsf~ fS }] ,}0rS3mh>=0W_Ԛm%Q,>lBLQ=ʝ헆=WqҞTj̈CA/{Ӗ?Xg$dj#AQz߸yh'ů .LX[ilV/s`Ń$R6[Gu~opBBH9IoW'r?WyP_|:tj]Om˔@1 -uX(,1/$3^H7Or>cqbn,܎\9}xO{)rWΏ?9Wi SkaMU(vgq;7>]~qo+ ecX(7#oi7{yhe;{*R;µ"3q -4b]vjp x?`v>Imlpf|ώބdW@v c/Bd/q~W(!*M$dun޵wAサvZdw`Qَfs%L-4;=O͍uZyWؤ.G$Bwv1ؙ7(4(g( øsSN SjU iˣnWB˶? cnj0zwZIqj6:*Y-6! iNt疪L(+@EŜ$(IŬ`kg=)]=)j֔,A 5 FHA]NwIFqu:"[꒒!g<)ϗM_yܻ$CnX;)Y5í e.!:jͮ- qpC*.?;L!闶 W,_*z#ѱ7leG<؈*Rܢ?KޛZr|!gs'UVsv1 Umƒ%dVW_/Yk~I u%\ݾ ]sT_g| ܱ\mف=?Y#/_ie0uS>1NRw9f9ç:Z:мDZ3 =0JZ"5KRR4riEZl!Ys`/h?7Ჟ.wq9,^D (K ߞh[]⾟OfhQ2f9iU)2ԍCBEOk=}d^9k_zEv@մ/۹ԙ־JmWקVhaKϒx2˔S`Zj=Wa1gPכ~ vO*OTԷ@q» -#N\'S¹KӢAh^xT|؋y -i}rHԝ]?-6( tEipjqsg;T+cȊ$Un[H⼇N_NM$%+ۆnGjahRz{rvTvn;ϛ~ȫh7=,M|@<~(͹;-L|5 SZ,]ͫ&mMI?]AaA# -4,/+De9hγ>^6H[r"W~N\-ZJ X#fgt$օf%LOӁ -҆n҄inɬPm 9Ou޳XqˆjMv{~^LX|6b1;E\"=M'XWƱ -d昝XX Mz16e‰zJ^^KHK~ s7YWz[oe},$>.vss~׫)J6WWBXO"\40gN9N?m JR%䀒g8%VD=ȂȂFI*5`tm+Wq<޸Ќ ̫* {.Z -|\ iL?z-z6P(œ \1z@B*7]HP%$d*-`GU:e<ף88[𚛀}{Qo-P{>7v ,5XTD%=9 8\Jc ifKXbr]?A"m*E{&Io;0i'."v~=L W>I Q!*ߗi/붲:n\9.;jzy.|o$3S{ 5jF6)p:c ebSj/F\%f>x^_08cJg`xWXh80Rm` N.p9@+>r{ķWY&7-# '{y.ձEW? =P -4YVMsaqv1<:+H?&gs -mkh*N@+KQ:o:5Ċnh2( C .QۚبLi:qݞ l}=诟nXUa{u=@x^f3^I}~rY#w0u940N L}&:Qnx͘f)3V d<있􆆌_C^GGxnk=3z2PP{-{-2nTdKBe+Óv1 -v\G.T & CVOьh|*H!#;֨ks6\dm##FlBX8]7^];9,}s_bhr9V/֮a=͋}b,zP ܗ6ReHdGasR_ -脖.r.)C:h-f6ѽu&n__+mܛmĖ_T-r[ʧ*nŨWhPUX*ƙXg{дGlMH-&zvCwџܻha]XCAnv9+g*#ccԁoZ0.ҝXQ;Xڭ.q`UANG kqн;A6ؼOylV4G#`1oKbQ[w[Y^FeUKqɛŊ9ʰaCzAA_p6+X8" -AϖGQa |vK|vёoџܖPYPXN]NU-f}w]>(U,S޷Z"( -/"].vY\ -k GyB|*HEn3?̛R͵Ϫ>;(?l")հ&_4^ӻͪҫ -dUDžuYkX.>;x\Jл( -AJcYlA[}06s ժ I"oӭ1&ǜh[ҀrrcXQC~C-h7+VAR`~c+A+D9zpYF|>_myͶ)xeG|Fb82j?D|R()r+- 1N -BٞUWG4LI3gCt[',63AcǤ|d&Œʣl LOi')04W2`/jA!{JS@>H)0|-@|nC(Cog^ 3L+eZI>&C|z)JOY)zߏwK'c Ƒ: J|9>Ҝ~dzp#i K LkTg).la[@Ie Ɖ_ y%)Z5C5Yv&f䎜U;y=b> ^n}"h,<H m{$[^^DRRbޡlR n|nE5{4I!3ITHs63t`x,ʱ9ᭃ]nY~oY|ƝކԐ0N貾uܐo=9\}aؘ:vGiXTHŞ?ZYs2IfĮZj~RKF>OyRتMCQjЭQTQ JZח14 -]_#fhX -\-00Ǩ`-wKW:H( ]~L9+0mlm~!n*40 F>? ߛV:v4^~'c~j)6~E Q<)Z3)֭)bn:Sm&.gjBQDKcT:ԲP$3$ 7;)m0s֋a${a2'?RNEhYǵX28(z}fG ª.x6 - 5LW'gφmJ`qGc 6wXOozvXlPl; .u?Pk$`ny?:(S]P+at7CJc1*LĝRwtct'W͇єejL,Z̓h -!S|`w_}+~?a[V:m"m^Ei|ƜnPF:oߖY>nv?w_2@Å6+LmG#[nc 5;wޡ3{;_Qږ_cR9fʋ*M3W&͝$vDzH9jޥ'SAAa5$Xuu%R*~M`azܝItmn;Wo\ -_ P;󴕟J,Wvk>W(Q-v Γ^ȃw'}RV>;R&~uYkh0iG?,۷hj9[g$u{rr߷VW/uس&veq vg-X4$˓a[p3PެdWn}‡çc4A=Ra[d56jʕi#W &NN D__l5% 0A9]} NL>&!MFKlZмvz=*<6N[2[N@ o|,7wcsQŮzRڹ lWQ0ΏSɮB!|\[FKcWr|-Y !\J(V,x0v] -D NoPt+k?(Wҷ|l|9k~H:p(dAH׫49oZsbur.˴X"2*A!] lM0V^6~tܠSxxQp:'W{ P.~0X;HVN `hiњ٨7XP|i/k J)\V |?8sVDfL"e79 d̛Y!J]m{ζe@@H>5qK>1ɧZ($;HK{mBghٹ='{"d@3¤?߻||R(M>|v;Q|~j>}j3;]Lv-jgH~/]_42 v>x2QokvSt/) b? v(cTbcH>By263hCI^k~ɜ8 & oGͫJ\)`Sg^WM)hi։2434G i\FSNR|))D0 -L{J盗Z۷(fumkx ގ0]-a%nʉ*gXK|{o4} ̐Is-7Zғ3\TۜUލHcM%!twD"|:5R0yB1`x8~>;=$,lM.l,,<: ͜ЊӼe{N`o -yWhrټ[B0܉gf[^ ؞|ڎ۩%Gxh^ΤݢKrۗ6.[z}?w v%Y -5`TR_{/ -oF]>!TOHQӗ}קtDp̭.%rm^{s'}\4g -f~KQCNB490}}u:6` =9<ٙW gk`3=>0vec3Joh/ iySi]}}xpw .U{dXvy˧Y%=x:870ڌ=/L7v'!;W]UKl%K}0}ɀw/Y7%EXJcs vFb?TEF.ml5/Mvا[ U!yɹVƚzrRi󽜜DI1DƑYW'%lp\-%l??ZK;:|4ԘuDHjl.6rg uZ%!S1_ְRg-V9g4LPc=~6wZ6ULbUT?=rt@(jzY,i`WQ0Bob{rP ˳R4sD]H4bl,v[{%-Ee|]? A G^('>miƓIZ<bpJг%h&_$ZsZS}dys)} P땑tsh[{~qbr{I[k`a^$F|C  -.4@>ñ@|G/9dͳh)F0Rjԑj #,m&{(L}FvdnT1y7zX'' - -fJv^=ǤZ ֥<13 ZmS㜻!/r\Ttd3Ou gW#-Z\}J{=QY(p:)#+{Eb?DYʣ*O6G675L܋Go'AwҧRbG2f Pv}(wggHYUiyHw~@8yc̬_f'Tdq7T^n HS̼&?(`q6T78;Z2a]{R770A.})TiL&̲r ffksfRmi&dS[d%jo5TcNǑmh'<)52 eF0v!8 97KUmxW`Phӕ}+KkЕ%d֕ǎmۊd;$yQLDFt4mrolD>_ -]D6` إ p Z]?/}hQ|Zp pzHs^"Ytۋٶm/찛r`-l;Ԋאd Lz5|&|!hCx"EɀWBMAXwKܹiI* ڭӈ]ʐ^2^65^g!g:ÿx)eD(# hgYȠ+$e 6ɧ -v w=^L<[=Ig-$I8*')[*c{HR>w%IJ@}XW3^$%hL'Na/%_<<6m>**8OC,P{:V{'o]%ojOR#yA^,̨dYrݖuLҸ}˘|J5'#n|3Q\ V}ynox\\\{ui+o 6m3u򹐫,d2.Y/_^ɧZ/&Jދu_|tX'9.>.ggjp5뱪HӋ^j|g zM'h2<.DIzJ&gom -I>Pn&H$b7,o7(:_XUO(H`X\O;Gl">4bt/) @^R[=˧@p%dlh u%5\4~y^ -:nwXԃG}d}=\tb!y5r6mҍ8\\R.WSoUmUt<,O ,$LsNJel%O4 *cfG[AiÍ(gދE!vŐAak=y޺lћOTX35{!Zd9[W: x%bX jqLsjۈ8 W'%@ZKɂI7ĭVRkşJخ?`KR9Vxڪ˾ޣ:pŁ]Isvrt>B!jӛb1kA"|Y5Z!ͷ4oնuwoEަg%8 f)0FfOZ`EÜ%Yl7(w]ϫM:$c@kvխ@48[: ǐ&+If+?/2Pnz׺Lؗt<]QaLٰ FNѧgu,P^thժpۜP8`ܐsd>J՞zE,SVCT>˔f+v!h𪸝uDtaU%zIJ)eۖɠ y-uhT=܁[k;atxgtY]MgkzҞֆ)Ums*.g2tR6[-p6XXhj8H 1>_\f?ΊLvXA}=RNPp%Ҧa|CÛ7:~ -xAg՘1 l T툑,ъJmߊ1>E*uw ⦋XS$]X__҂9~c*mq6YW.߰"Mk\6l[ vj^1~A\?Qe//6$o`C *mbz)ڟj%;KW'(abQ͚dYܫpxYK4qun-@%8Aߘ]Ͻ>66lM,Ro#Yrw]Չ*?<0j0b*F$0mJ3.ԕqCmž0:OMF{T)T#fF0;_gwI4NZ_$_8p3nƇ'9Qu1c\@:iCMn|Qjo.LO'@mw:,+O-O'n\޹la+S]{rY4";1unh~JkE25];wV.6.{uj36@-wgՍ>"5z>"N_XYhqf7!c>`&2FƑ'ݧ0SO3, U u'P3"Kb|N7-xE; 1Ym}q -*SЬV"6P~%߹ZF]@ٵpOz-/<罈"#&7bx -h &?G9JjXXR! -&jȿ[_Wɷv%a{ L#~TZG4C k/qI=4F+CQwhBKtެc-pgl\>ШvyUr ^jVU_vRW-zuz8^mb8gW̏@+Ĕ9]$٭ }#Bق(wT+|JLaa%WFi-q:qBqC62/Yyuhh[jEٽCjSg=zsU'1H-_\KS +OGtnc -:jnȹ먄u=ݧvle-V~ b}] -}[řwϣD-BDK\UwO6S8SyNb/l p}K:]N^ue'uc`-X֝.)l TypDEpY=}brIpm>IIADRDY ,Xxm:\af1Ei/4E\f H6HW4wWau{6 [y[g]Ҟ4i]J,՜iu9 gϑ6>o,ЙXOFF,}N{ MO 2KO5H -VJ~aLIjL3n2x4 ê{ -rlY2isU2|*#Ñb(<ԻNThT/?N|,|+,k<,W,_52wO^8m0´7DEtF̡ql7'\Y6vA|zzPn3nXaڅ -zO#s܅ 9wrx܃q흭_rW/SSjir,n0Fh2{GT=̤غշ>~AL<*{+Q9!g1B?u=T5<$4>D,y{@.˙}>qb[VPXMǛgxL!NH c&{2٫&o&%=p{?7n}7'X|LLB,U%b};דrG`6Ot3З3yeCmF>F1-݇=dYxkǫwHi:L$)XaG'띍5/zނBU6kkl[_>쏝8g+~ --\^^ZLyTr՚;g!_d!wu߹m0{Vٕ=3wvpVʋ?Z 8.}kNbG{Iޢ^Z\(ZZ(-* ǧ59` -_;ݮ-,O9q^*c-\t)-e1zvΥ!?Giίi T[nHFIe0jtm 1\zj;sw2P1ϧ Y7GNw=m{4)Imy1gupp_&zw+Uql i1FݟG\^n,ܰXטA׊zJkAJ;|xWFn*1% 2DWgZͮ䩰D=ߞp[&ƣ'ZV*jÒZ\61<cJܰor4ݏnX^;嫁;7A/ϫz^Aa3dP/Y 5#5=jH&^~zʟ՚E5o˨0+$r [Aw~Zkg)<2mh2B>hlA:0g&pGXdK@vuUpKZ1w/'.cs+D|+N.2ڲFw'Nz VLײ#>Qsk/ە 1H5.Ȯa{XVi#,^X=)5 nQʑJi[$\wïv q0:CLfge|:?9p 93bz*#Vg>Ҁqmۃ[髷nYNWBB]r<D*@2^x:3|E -6O*; kqJ(bhNm[ц8 ?ĩ7g߃;ۙSh+$yՠBM5L䟴o4m%";_;mߟ -_ ۷o_UW9v߭}1=rԸDc3mnX;H?Xz78ӍJV˼(ReIrl5mJOiENۚmK^rSH;C.<; ;e]:M3jblkWl)-V=5tt4Ӡ4֤wUQjKzLDH\s}Ӂ{vvWocaхuf̫N/,G΢RR)hڀ ie[4BmE-vsjղ#5]HQWG Kehc8D΁NgժrBmjpfsYL = G]ߎ* rh#ddc ;X%] vzG\ M oa$ߘ'ǭYGIb4mWK/? A{)8>"3ZzY4+@# =dGB9I(DJ %#9W_xpe~[8[H2=IuB8ѭ[cS/ WC;X` vQeƋ J=MsI{T>w铒rͶ$9$k0{ÌּJW>/Z滜>mfӤK6&kdqWpב$khiN[mCD}ﯔ *%{N{%Bdul?}&Inbui#'^?OA7'ödߴ䇍&H&}~_1` Yr٬7;- -FUK~húʣ|,^UfIWA7v|E̚}j⢪FhʳQwA=@s\_'{}Pu/?~Sn6mjeW-($,<;s⛷QD{ODR~^Ie3\fn,.u!,z#/L$HWE`HZ״cYYjj * *ITN0[&/S< 7(ݻdNjI`So#&a^{OnCü9w#&]-©j!SrJFhK\6 T*=Ws-{!bv ¹XOV7/%m]{mɳ]4e΃;{/9Z'.̗eѻOB ëuؽaZ&&]HT&BRӂ6x M14+TF%-Ko+l~@ULh՛6_ICa=;*'ٳdA{5*8,o ?OQ 0^9l8@E Wa 2fe2셀<&~ؽAezFo --ފ\,yz%P'pr پ`j@O2f 6P*fhmaLJ=?O<;J{!6#~:v?%Dn+P)N!F'E-2h?g]#!`r00x u0ߠXLXd\Nmaj"Xhg,CGFPHj/f(lګ#(:Bk=jw*tw o纰xAr`=Zflszv*ԃ{* ?B&8n  -/l)C]:cu|h@>ҷi#4mk,Mv{`;81me<4I%chsh龾rZ+3O8gc5=M3XNKo -8szS' b^ݠld_WOg k繹ۀY9OQeGM|??u??36R s{Y,R_o涼.h]6F_OrIxjʂޙe#~_#-j]ջ^;A;>sЖ_W79;3'X+ZOSsD+Cd͕!kd`KWc/giyu67 >#tV´{u@ɮ9j`tߏL8{S=%9>T M5lF`~]Y*S,orIŴM8{$=+ya7O 3<ř7A`2na^!{mw;o}= -<0*ru՚r\ 6ỞfNfe7j=8Ip_A~]ceo-53?,xM#о; -Pb5坫bkХcEa`u\AxM㹝WKGʖ/5NΞ3tD׾;NbΙݎgK^0<׆/yV\}Krsa0xC[[J,_a!f~P76Rw{'IOַ>Ψ/nNTN5/Fm+⏎:-@*_OG:}Υ*5\wVAeAkV?O[Q\3q+[iqMgo%̓'Z]|:w/vrIW/mo3:*̉b5U7rpYtgZ?iu ٕleZ7i(8k(0+ttg+ <wK.n1TTXunJ~@d}T?39Eqt+gQ64OHRhv - b1Ռ"y3hZzzAʅԈCj'~WdARr+5k)S_A/O_$EEכ ܩieI:&>+?'n9LAzSzǛwQoD[Xo_s]UJjij-C:SeZK<%aq<"w~/2>9g,?4rmnXOX6!^koKzCDu!v>%izk -OzZYR1,''t[!IM?ǯmIÍyKY-A<_t|hq(teE/#l^mN;rupXzde>4m"Q牸>(=z9َGnEd5le|Z޼'vnwLyxZT':k :v# Ͻ/f~G">\8}㹺Z}ޅ\>O9] N-|JjMvvE6p>APuCEStSy -kH v0ve{4DvVwGXPXV"G5⫦[AaOU)c{;=ګ0Mz5-zGR|ưFS^G3KXg5:zq^~Kqk bGO~Uv _v>km]Ƒ K{v-/s2zekC4>= -#sԬ-'*BH!ө emerfYF]J~ ]P\@T]pgvXN vk߬#)hr3.(eh:͋5;BRxi+"@g'B9<UW-6_<,+S,0۬yNa\_YN])IwE T>/MΜO\I,6cM CڛV5CԀ̲MW endstream endobj 68 0 obj <>stream -(~fՍ_X&=&)zKa|v&bG_?'C|"WCFB,Jd.|aU)]&Gr rP.Gu{%K!Zbֱ 0|b7y0tkzmƽV#1USu;x^v/]3=aK-J⢷[ky舔gͭjQtUFV}נ\szZ5kUݫ|(*r=v*W(_fWvtX%^%NJTTrhKOxVv6ז42Leo˒DzF#_)ukE+6g+)M$+1}*XȽjȷO"Wl+pGPیu V.]U`kK-Ϟb -| .Pb7Ȫ雜^ɜ\ .*}ތ[ロ{y/!94sa̚|>|A7I -<fKM\u -nm̟u{ԣ%amv Y~bAC̓Zo#g-&.%r 9ꀘ D7 /"T@ %qeY \.{/dbTK`uiv}/Uwv 1 -W5vbAu`@M2L 2 quy-O3YPPTTV -qӳhLPq-Lԝr{ǀo@+_ i,u6(egҀز4{XNAO}@M&^m-^@+LT a7WڀY`|zf澪ѓ[h2=`+C~-+NC#9!n~_@EkЈlsߺ--DMğ -R27 \p4jN:gZwMZS&.K6oқҷi黨Ji?4mB/c?NS -3kv ,A4e3^BϠΌұ3{–?pSLG |nƧ^f -qp[3fp” 1M2dJϾYUS }Rn^B OPa<6.ckcw;Њy3Ҿ}M:rmBP3?Ig w:sk'u3)?'3%O?eZ|NX~lFkE(/aKe'Irv}o+_ܼ2~!(sh)n$lJSVGx,eKtu8L\5BEO/FwntG_~ER֬']ִ,Ѝv +ꅛ g:8wD)?AG+Br[Ǭ3wr%v-Enum"s=͒=a6ˬ{?$f*QdQoba~rEK4k}::ǁm}e7z v pBP6}E7&(j'N  8{~RM,ZH?U Yon)S=N˅zj7z4S @5za֊0X ߚ|oMhvy)%ދŝP"%rC5sA R/t~ɭ:?*;8O7w]}2K[v7Ü#3kȋV{+i(ˋﮖ4.{ecQl!:.6[]LrtRiyzNj#46qs_F*!_$<̀LuTB}zέl_yhU\M/&QǛ+:FSc!<8Ng2s^{3 -`7n2IiƦF}G&uIG:;|^Zm\o:$xE_6ŀvaӒGT9+OԴړ>vWKes4so>DEs?;ly=wm3whew7+V/sn:$@;BCiwF&_L ?iu\FpRYh,T°s`Ň4f/g7򹷹7鲉q?1v~}.flKrǚpԂ -]Nfu;x±6+m:ͦx0k'mu%̲g00AsAYt,-(jC#±ɲi'U̜ra]q׸5֗f~vqxBعQkŅ -{ros=ZLxTPr.JF0+Ѳ*gOOB6 -Ʒ]: &+F.vV^P įM_$Aێ2\#FTZEc$GCyUn=4g|o -uOKb]{k -H -=Ef-P&AR; oRΚIgI%N G-<>`OL'hm&?}b_G#F4ҧE{ϩ˝r=-SSRNs|K}#鼱^ޞQ)nvi]<ߵMg<3hj"/?<%WNb |` -c1MlxD*8zZ+UZkwWVOבV~.NxI']{ga&B~EہԅCƇ9Ηw!ȵeML re4Zȸ M!;91VC2!T -O0 bMighkݑ+ϰ-]CUغy^vpKO"aZYvruQnKMn)3u@ߠڂv7?aG|zVzVG.^4)~_6V _T>5w;,ՃenEѧnrbNLݮ`450~UP@woᚯ{n7H\zM㨐gbz EȮH=sb>9^f׉dP C IzM@  |Ԑ vrMl?4Zj}Ҩ0#kn;g1b9b[0qrgp+ң..qQ䍑kEW'|BS8& v/E׷]̝/+׸^EFSvq&읍0WxR,.{,"ۺ{#6C=nj\)N0Sr - oۡ{*׻x8cZ/b< 㦋7 X5i>|w7lO7<_VKz/}nJTtڛ 1 'OrI3kfF}2:GD`V΄$xhŭ2Mnn2ڸ3NkHO]7޼tIj^]%h^y< Ϸ_16kvieݍ1{8U|dvPӎeScIv owx|`G6V-ckۨG4GVllBl 5jl%iXU'V m#Bkvmz9n旼6bdY9(I.lUWWU9 Z+(X0<,XηZ};ܵ&BY嘼|Ml-r;wn퇗k.c|w G\FJ[:}WMlM6AԺJH҄IxaP1K&}fgi8} mEgwd(Tl>,T`m`!r6_IJ?:Er-Zv+gP{Oؼz)N1QߵG}uMx3[6fܮ{EPEWQ9?4?OjLl-{K.?'vMpۧ+CM{ZMTU#HEQVEQ^;5s_к2$## -Oq)qW~ܹ2˗w Jߕ&qX-߮p_N& O4NXz^5롏+ݼ[I\/D/\Ǚ>9){'7zbel2yևڼN-n$d_*?Kkx[P^ =Bw~HGN|TgMll=ryոgWÎ=6C;r;[focC<Wx2kh`2olgG'g~݈< 7]L}Mٜ<$O\fy|3?PF>4mHaTp9> -e4ZAG 7Tq1~ɽp{>^^\fvn1ۜFxwFf}޶OwV_YxFԩjʹ}-l\O_xygD sd,[4ǃ^X:M~6/=0 *n1ݍMrTUMTeݝ:tXȩXH|B؉۟skOnZYRv -^! a*Ih2^OOBOޝ6v۩ &Z}xk˭|چ9g^3<ۙ{i6P*Ȁ*FP׵AG(/W&Nm"\*,p|NZ:8zX(JT+䬮~ݯLm7;7w0xs95SXϙ CrmK>a_sPז9Sg@Aݹzhڷ}*Ul)d^ G{' -V>6rp&~ɟڞ7;n:lrnóGfoڑ=@j27v~,#㈯jJu6|<UW{i:ȶmՆYU%bcCZcKS_Vܳct4d/Gp-~iu7u~7yFGܣ -igㆱy}p}dxGiasCFD#:dnB%6*OIB3wFԷCi@8ֻlİIoQٮUW>q@8QKG͆mw[;S!4U|;,f;0@~ ;XA_V6W."E8=?6KlX.8Jpeս^Whz'wmγ|{=ə ֧'.rlx *lv?)>{+Z WUW^Ћ`/fVݏ:Ώ/ )pÚ0H6bMbu/4Eݏ 9t:`aiNvdfr'aK/stծ\;޳ɶ1ԴɽU˼qr6T9ҶT7QWo|o/sWnܠRzyLPN`8<%Vty%Ⱦ1Pk;U>UiGtBwXc8Ys&MzA @_9_z~-TZPӂg <\I.@F94uf45Qmޛ}h͍m*3!C&e_BKMʀĘ8?'U_s†Kxm?H\ޥxmC7l qznfʄi}CG+X$bcW*vL9cS,G++6q{\ z 涖Z8|}j:_F>[mI9],#j3U U)>;W~ TBMZ;/̋m檽 hV" -JI\O@\{v=^IBrQup*Zf -zY+njtylfҖwP1T r0"]H۔ +-XwVnNZqB^lff&obTH ,s9)ID* W+O.H(cEE'`!n!$g)Ĵ(,j - 8E.)1˰Og"ܛE X.!*T* Bn6 -CԚ$/ Ց2 aן4oD\777lc_(;K'o+r~ަroѮn@a(ݠA>&j{Z}7#(`snbaU;[ɧ j8;Ww_"ab|Np'9f0,:'Si,>mK|'Le7 ^nH#+v* OJ-C䫢fl@AP0\U,2JeP$ʀe@ޓ .~ꈮϵ)ry^G|h<:.yUT@텄T{4r'].hTG0kZн}eѱGs@3ϋ^0@ -2t@3VdSF`#z1)h4vo3'. X÷PMo0nfvsw؂r,{O+(`R3Z|3 `P `){[8/NG|)53Ǜ[c#\0` -_=Y` O5 p1q<.>P_5# -)dHO| ~7S8pQ<"8څ zRZ[`U_yw27 Lkũ.QU螔+<; [=h>&|ev&NCbu_7wi%U>xH\yk0 dKsطgG9 n_HuO ?`IugUcџg@l 7!^lTR,M[8b8 |>;zCUKDtT'a(4Z?h/+X^*nl|VDisXEdTB)xM&"f}cjMU&6Ð{a Qk3RRuȰ4 J%?*omt}8_FpIʺrH=pt7x.ܕy%[DGLO äUA*[K6.h>5R>7*b`/nFNhټqQ`XfP1ԓ[;C tD>CN69^N7s^Ym&rXwu1]D.3x}y66m:^:BdL̰5p2CvltlĖe֦- L dZ?cJ9灗|"V]C-ݦru2a1&߉cPMn`Z'V̺'d'`h76fi>ЗZY\F 9 5oa'M:KZZٚ[׍Q˽BH-ʵE"AY? 8}]V]mZo -4՚a՚])g*d\>.~q FhǴ=j”sñm{NͩZTm ֽhlS.i~7i7Ǎӓ?K*9KkVj/3F\pI^&~YUQ:UF`Y%I~]lwH~VQ˷\6`EtY Y,گčY+'XfY=->)ԧnRȪ!b(1Jͅ;MFMe_5Si7a?%a~kEu @n՜6;,"Ldq^uTAZMZeD֝DGZE!ͷE; G xrJg'c@\S S4~IDf9/6/LRfŤ٤Ub.PO<8H*=O.N}5qo*ܛ /B_nt5.kGe~eoQy95٪M߭[7z ohqU`C{\muM %z_R]r]{·FmFTJ{6jxڈLkO=NEh7 >Ul*w0n\ƈ5 Ŧ괦: 9OR9usD@Qypd1ŐE7WZ\O~ Ѷn$?=%{E85y) э՘8[#Δf7g&8ZC}!oU[JX3?.]TlTmp f)FlVu>r,綈?1((pv:n/+wKh 5&Tscn+Q`MO4F83߅pFUWsU1lP)cry~rUSNl#|Cp4)yDgFE4:/ 2 ?˚?)t o\zl*/Jrg@7jf`G>x\՚-NJrf/^9-ޡ|*Lȹ: > nfț4 $G0kW<ZyAF~ч/n,V~a6>]+mMyj@ist0d\)|jD`t+楸xp^!iBys(UVPN{pno`f@ Oss `Z  S T;ҫKBle{Z8+D/`imCV9ce=xa7[+T|90_$),21?>d8t'(ls 7~ +cxF7\PJ1fe~DuF4I\ k gER#lK  !)e%AIE@6vHѺdX@d5{5xp@a1$e[+OMuwҳEa4f[{`(-6hq4p[/y(3(ZcP֙T''j (Ml@ -&] @H!44*EP\f؞Kڴ7i}EjUgb]jQ&[l\O,o :a^ tL`0# U -xmJM|]O]3 D8aҭY 8&M_=Yf{t{6LQ2` OM3r]82xba?lo&c-VR?AwF{.MXglgb՜cR_7X;GΨ5Ý؀z{;m H] 4k /4!ʶa|GqrFW~BpM2mJDvi%̮N ҏkm;xu#w M:J}˜KM$CAA>];oݎLJ7ۻ2s|tV|;?.^&{'7SM䯮uu#7WW2VQG -& Z6K%|v -yR.R #slch_zn\phlpx\;9}- a{Z$Nqm<; M^)6f߸c_7]7Zq%݈Ryը-q]ԘRk 5͜yhŞ&Nɝ8=&7 a6Q28?ϕG*m/u;F%f&⷇O,rt؜:&@νtճyYK(64队U>QaȪq$XXxh!y盕k52wv:Gd6ppf=#`(}3,hc]71-{zZgN&MsO C#2-ݎ.?pCtwKN[*I`>rM }0vOvF-4,,3VwIm] gv:lUʏWyMnEJQo_&ϭ@o<njɩ{gXBW-.WI\ӛfmĕ9ul6T*v^tN!̅i]Yldb')ԱlG /̿RotA'/+,-9ۚyrگ>4/EsnbYW-:1UsN&UX +@7W v 1kpZ[t=+hEܕBKi6+xѓEԅ^e TAf#ñ1;4gK"Qw{~ۍc|zɐ6/ECWU= א0^K:/>P=5? I.tlBU'G tuЩ ubGFdҡ-67juli7gDheD_ ]5S'Xudjr*WYŹ|܃Lmr֭Zi I_l>e6ChX>M2󸳿a(5,gwr-2oR?TVa%WjqMgi쪝+6VaVILg5rP#F$ITGTHpӧ8I.&AZ۴֦eU\{| mO՘J5&ٙ7kqȽ*_Z6oqA)F\6^V:WQ jsNMh46V>vmJe B=VuިionKj})a>v,o<#!5`FcRYqܭ7դ CUc.NBXUzX, G뎨ۉevb7w"xO'kg=8ږ.DN]=kr>[;>Pދ[l;av COjVlD}Y۽6_%^ܓcN&ވgphޥQFPoM:NQޛH?9V%ο.;#K~4cUL4?+ѳ~MS)HԼ̀Sx3XΚ6GOfE7no. κalٍP ӟ{ Q/fynuj숚ѬM=/Da;y눞M#-vJCGZ9wҺ%U"yjҌ6_Kv런߭^_9-RoZIm+qsɆFʮ-qs>_;+4fĎ2ZgA$P - Ud;2Ay - 3.8:q#oN`ۄG˳/U=۵HHZ*B&nTJ]%O{znRZ~J!8Uډ,{"iK<]bDŽ{kC?#Ʈk]ߗ^,NM'fwu N[ngp1EC[qG|npY`0e$[pfw3wҜ$*`^P(<&wQK 9,޹Z@zTtعcZ -ZֆϢ1­ 6%ܙ^\0]a)w3y/n~ʔ)nk¡?<rSK6fNRq?Y+A36bW 7iiR*@F2Z ZJ@WH՞hKh4~"ջ|aRkSlĥc^%e*3™CnjX}ꄻ.TATЙa\ -haU+Y T43Ӷ_嶸Gr%}f? =B,m3G6V0V‚\aO5YAs6w'O6e> -䶲Bsۏ.WFi9$؈."ݴ]:[E8>u.V.˭PJ/f5'ԭtUE(NMุK} ;ms˚֧Rf![b<ޕI y|dJEf}gZ֤:ȣzz& 7z_j)Exݖ3WjU19|G$l Pls[*+z+6⤠[Bv+cz4p݀ڣ}Ivk2Ơfn6(PbL<(UZqZ|xX|ߪ@X}<5$U~Ep; ``)n3y/qX`v2'ȰaNYdؓkgy\&s8Bej!+@U@ˇI^bngPRN~6q -@ ĨDg*^ %\bzٵa Q?k{D#גG}'7ɝikQ˿cJ=x"_{}:3dnT< 7/ VRy3|D@dPi(<Z@iᚽOb@5"DȰ0+._by33kɵ.29Hiut[hSxS0e7+{͕ ^( -u  &_0 W}Sс5!`#i -8jXHk? -p07 l9̰5}‡otHNYtĿ-x6ʨPۥ>[t~[ -O_2r+C53ߧEMo3r8h[B<n2|A دK)fK,k#b\T:'lݼ;:7g6Ik(_ܸ*C6/@)sQU楇%11פ/g!q.;`.:>@:nN`}V[^*X%^X טR8Gh SA|@פAf|?)>/ǢryG.au=[+Ԗ i.^ߋ@? -=3)*#D]>L4 #Jt:FO?}߻Η Ϗ_lEN)ZIj<>;b@Q#yWS&FI@abrh1QGtithUԁCxP@_ڧ'{lRaUkQfGER~Lia,Bl=Fjxk wFVW;rf'Oeϼ^p^ FT72~:d~Khfw֡b/UfǖYibBxzsrqCnhL[QÝ6a8pď'/M?}~?AK'̡)dm&]foYۥ¶F3F9/<\ޘޞ6 -8ƃ膂خéc@ =U /-n|7 ]U]X:FvNMζ<2%`ߎ3m:wM,GU:G\ɳV[ ->?;? -:j"myϮ7) Jw)HgN편7Ztʳ!b`zʼnE2Cjkr|G[06ycWF, jm4دjQER`]b C0}ص^V dEwv\};)to[꽶yo\Y}Wsm|\1Ą9_ tMuh9XkzivRS5YVM"steOV;dR ;kbJz\P;4[lnE9ݴ'圙\ec|}:: tf´M-p*׉״*+ћK<. G>p};Ǻ{E_GA5͉^sL=,i@R/N`PVۜV BNxWƥX _D8לR?9 W]:I4)UuI3Yp1[:zR:QEݪVY:^0rD'AqU+DgGZ^QzrwN uw\ipT%cBO%\ֳhPO;*.[' :_ ~se[PWB`p.9ybwcthL=r 5΄)3v?!*_tѭuF{~qzdku9)Sᵝ^crݐ^R9E{EŒh,w;N%3=qssve`WWi;#R fDeD[ԿzQSlF(U [PK~7by!8nIJ ("]rsXs4^>2NXNy F*fjtJw董RQPp⩇Hk__Y]G/ec%lhSTQﮔ-f: -!7}cT'6ItfGԠ A[y89n%dryi&1U 7A%3EjSb4o9(W>VNFJo IͯOzWrWaNI߲aV58 ^ȏtۓ;v# HXq.f g$4<|!۸plйbkLL!F崺wTUN_*RS.RL Е9Nr'S):OBڹ53߬R>[!!#%\(ŲV_O8NggR.y\m#qL͡7 Q!fϴW*sj9kl֫ -vx7B2Ed֢5ٯKX*¦u\]s/BNЖQqf".ťhwnyYXsJuU0u$ ɕur -t;KGUi);3KN#ٕtIM "*F5ZD#ZNAZR{?ƅZf39!৵̇W=W'K6G%8,Vײ݃xOqXsԚI9W{#TZw\na^GB?z3. }J̢]{&6' 4:>~%eyL#@Β7 )/6Ar%[oJlq>*{ e&Rf)F@C3'4RNO:'.*o@2bYfSElMt.^Į\wX 'm[J|FqjGڵeVf4bnJhfCakS{9g,d]%GϦyg7.az1x6b(m (Pfq 73dJk]fKZ>2co8 s]s} 3A5?TV\_}Ő 9[lu?Eؔ|MDC&ӓ֣CUE1UZm0):]~gwg^|>Ku`a\,t -i#bٹu`3c}k$M}G~,Pz{}1z"=|8T+368e#}EEi-_ Hˈ`G.#!"=7N 1ˤ+XS{>uv. *w:lĶ׵ֺ װ=x& -Őclpf(z[L~c3W@|Xvמ2k}٩Qʦ駐?snK*Ժ$7M(c5"+7lխǥݼ$򭶨\Ty]N烒Yǘ^M-:sH=H= -nxF\d}nV[ VO* n6O6>z7"5YmUw1hW[ЩGu]7UASWh Â"e-/Q/@.Ebv&tXvhԩKOGs_(P#.JESjV4jZ_IJS σNTtهP۳i7-M|eQ +džbj|WO˵Apb:[3?j$mcq]wMzj Ϗi_+npF2eJJZ۳(fZ;{rziTtoeNn f\D0NE*u -Y._R}EPտOb{4迌nu`-|=xVܲE(8eip[r7~M=3&`GgX(w:O%TTdϢ1O<[ӺeRjQWN)zbHbZ=5j$ni힛`ELP[Qyh}F? )^ttW|swuг\xeݖͺeꮗz~PNb/M(dZ '{t&3| -Y"Yeh]Z;Ql0Beٮ6kv gUXQ6L7D5bdi %t?ӌtlk뚟~οFMVAMHUW _vlȜśA\Bn.)Z\Z9ѫʇzzEqĄ6w6/yl3bpM17aJ[ohA *QJUkYUe}|Zi^>O|qKv×}^`-nPlUFl)y^Nj`EeuZ}ȏkʶfǼF۾̞&:^. O\ԝ<˨l*:QV/a./wBYVˮoU|OhQRO[AŠlUlNN[9#ȟʯ_ā;M7鴷 u|gյ -g*51'e=˝)oPFxL2'ٹ.Zb”BaAx`܄<; h 8/rYhg&Ji䱥Q>t9OUfWXUim? |BYi!C!2SIKx{q4.b~1~byCQqd~^뼧&| jՂrI-jIo\FSn5MLq۲eu͔ ӡOw%)zV5zFzʩvkwQaE2! qWI,ۊw=; [+=#yMV2=bFdo?`jL5}9h?J5d5_o:yH QB:ei$w]Ѫeh (sl0ʳޜ#I&V?;E32c`Jk> :Z&*uKp -S trw6D{87g&2 xsѪtQ#AXZ}n]~92yؤvX- ؎f90srN{d:S5cGuRF/r9:/;'/lNxؾ,yoef`@=D,VR%j(ǹQaYw3K-ЈڒҖ+j]2Hq2 !&EIr=뿝xYpNd"t&ت}Ndm-Ⱦ·<}]aZn],NMlSjyTZ,hɼpv"`g]/p<jX)&Q{\0s[^r yJ^$oډse.}4W'—hV#j_ #CL#TyAo\y'V+=F\嶝R6W-,:_4QF(O)!'i7C4^QaX"ܤoIA>#{_&\_z-a6bs25&gh7llao \MV֓Gp/xֹu׺w'pv_mƌRN@F0K:ǁ^I]kG7JM HBoO -DX!}r;ݶ_9r_N$^ gU t2@Igs"d;;5+6jˏS]7C"nVMBLJݮIa;{M,k~(ZW uRwk^e_BpެQ -vM6^] -qⲼURKbuXfHT>,bldYjYk^5޼΍GvTm9DH]bjM~4iy+SY˚ -#1ǫ/]Sr&5 _DM"~g^zK#=ɚ5R|4|D y}g?lvܹK$q xIqH'XڟQ?#||7>Ljfޢ8]d} ]r6:I8;"o֦_I;Z4h>:7\ޕFڮ>|vPFH~l~ϳ zu$\S9,<48*l}+F;g^ֿ4Z5ip6?v#aǃ?kw^kcƍCb>Pt4:Ifvj$酇_ #lmݺSըJqshgnQ9 n~]la{ReJWa%(JMr3+Ko\WO031s$~>z´@V -4bYyaCu,[vmQkض_Z5`JҜu*5a704h`OXMYM:hW % 1 ??o$b_L0I>;q0J5?Ukkg&mkeX3V:%D5/*C&Vb\..+Exe]Vut@?_ ٬34ub^Qv;wè+,=Ig+9}.^E6RG^hdy)Y;l I?ju> [ϰ -[`kɣJ foXxkڪT Ꮖh3=/z]Of˕a_j.> uH -l\-4O±[Dl9Zh|ȘķN6 -n(46OhPi^: D.Y}eZv1wU]bLx.aсIzaw̵ HVWZW$:s?3W|[=ޤ҂1f&WӳfG  nZeK0~FHg+s,<8I},4!1ۋkKg[ 4agݱTߧa|:E΀2gGLZs]e(4PB>}̛^_Y4mYg?R/z*4Us3w?(~ 9I1*&Kz:6tLBZ4Rcuju8(qQK7Dn??,- Y^ WbqϢsL{>>x߄UDSt`/.]$.xz=*Ӓ@}״uVȩ-+fTKؑϝxa/nU扈#&£ƣÐG0PFO)Oûحi_FKւc)#sdپRo $6uE3Ԇ"k3an{> -g 'd~`ni5DKef؊ʰRKai2貕:H2&:dZ#+Ǖ Oɬc:^ -UOٵWY/eZI/K}b#}d`<4 ;kEtSv-+Y"ޕ$t u`i0grdž>)i'zzQi Ctdaz4 rІI~;Fnj;XrgpW$ݮ bB, >NJ6WjE -4~`v:=^̞EignSmRiԵOTW(_cfנTbP*)e}nDQ$n/R)ԉsrdz+w͔F3ŴX#WW`r%$jt1-%u݂=jJU;D^LMI|$oAo1Ybmy{m9X[P I\Ҡɚb>Rx"xlk6WLhM-=~TȧRrĤ1_&{]Hg 2b5 븋b1,WlQHl>l;,;p`5BΫj jwIf1sCSFQɡ]6Ϭ\ L*+ q]Xhs -i[_ LQ.z|ptof`^r}Y axomi:VœHC -2paPA0Of{Pr@wOzv9eVS[Do)(9bzH~>P82F)#X] -VBmzPM4Խuvʝeu@bAkgcmq;=13L̴,vtwz0Ѣ6f/nS /ewY= -i/j,{rvHj :Pįːu522.ld>ar)jcB`qv"N_x M s72^ߔX.b_zM1{U\.2xdQ *jg9PC!kv*5l, -:n0js ~y|&>oMOvA"jܩoSo?p_li[v(n 6U[S8 $rylm$L  ! 6C)SM@ءbQD}杨9 C'ŃDeR6h}J\zNQ|NSO}&`n/ٻ{Klg:. cSX.ASdrPħtߊ42 }f uNѺxg9b9qb' QHzL.ީ -F_7#}zu2:et.V;iې32,gۯGb'JmTUM}tsc@%n=?`JMFF3@ NuPgs 8 &~NA66cV=*OEm|Dm(ldgJq+:3(Z\.]n @Wg0/cfѻfif53)/- 0*JL;5\-:|\&޾1"\G6Dʯ-`ؼZ: -"}of~-7- vz `' W8‡?Pk[Zm paa\e*\Jj#- 8j¼&2$,ׂ,|F"%w/KW3'ء~;o⤘5PMLo@h % x &x@kEE?73BۻmvxvNؙ<7bя6/}7gYrW7ˉi<jetiF!'zG=|>и^Hہ:wh¹0=Ju ջ:iE yW> z[zRWZWjLև<\C@v,mٜ ߇`j#ѻfKNNR~G&ya.B޴̮-2֭n>G*43Lү:z\U.QסbkX s/w!\Xv>N O!vȧ-ЭJR4>hXagZͱ:55,Ѣj*y +5M-˕a>.enT|6;?p畜/1;>=vdMIuKg(OqὩ#̡ĽПj@[h%iXD9;lpbДjܯPo?pYzx4h^{}Vʳك}r[DNB9}wѱ^)2XeǖFg鸼\VV%EakJh0,Kf\ MIo _g /Qԃ6YWp,_Df9p@ny_dMڒ8{%nTS://ё=t,$8<ū%xK^TԫқEwE0]\889uv.$ͽPSo0ldih9 F*sޤX=^/.Ktw#B8Jrv\|;8)j -ۇTڲΑӳB:f8+y-7Ni{a0MьvYnnu.u%u_i}hxEs]R7Bݔs³\s̛JXʴ}}`;y[@u> ճZ{]TLxn5 -2613WZEqJbV71D4*8(*q.T˭~zFPŦ5O=x; iMΛX7aˁdfz8gf4V6&GA7Ů.Zi64¬u- $*{:Y)mpM*#&]+QR->8ñ;&paދ¸xq9 y5Dn%-S^;3f&.ym͔&l؊u} ;V++uZ+#Q-Y#SiPGv|_jxkK][Hj^Dntf)65~i4Fs 0F8oZ8/v۲ةOpr[ul_L㨛j2*3JL -ox%Ir8[y_0>[HLʮy܂_}oLIl@Kta` >LXgjIFQ"96\~.Ñ݁ZMsBw}OyuGҜOx9 EJ9I=rP3§:~?6:#-fM}fkR`tޙZ3#jtsthlTx*Tjoh8<әߜ.5 _1^8e{)=: Kg)l3g\bjѪưL>\Z[GeM ٙDɛM;nԞ9Zkk] Ⱦi;N~*l??jqu}6<^rq%*p5F[BV-G a`vb[YS:P*S$x'ob4'H"u "u|rg?0>:C8'ZYUZ%oi_>hߜl35m%JkbȱlŹG؊0b.:W'J꥛EI#F7N{.q1> ^88b\VTXnNr+yɭ5[ ,7.XK\/~`!]zƜԽt."KBacRA&&Z;Jmԏ&F[vzt6KdO$q?cbXnrnɑ\FFV82J@ڨ՞8EIgѻߵYW_yWC3{+n}OJnwn9ȐC@GIј7D 3]-M;Wެ9l 곱DRi+i' Lgߪ (n) "hۨ]Q$"v ;/~5o!!/; ]M 5š,a.)jl, 8 8tp8%!Xv|A7vYͺ#Y~|]hN6~l Gy> WT4]1 0^hg0OAZ79F#;hYܢ79QQ|nA3Vsa rEb)u3Y⦅*umA^DPĊbb]?$~k 3H% 2'lB+IwPP[gbSVNZwps*wM m$Y 0`h=d"L#(3"H(I$zx@2l%%"`z8Ʋi fصh5wLi2r4 iBU.Ҍ ƀ/Om^  G<~uqr3~tئxkYKNx'tN!2U8QS|6ɀQ` e(@< [Ԁ2@j,QP,Pg%e꒱ulπv5]fz;eTkibVr\ߊ72~[#jXnG6-om*]; 莗dw *KM0 -0P  |/>}&X^񷭟;@o ]XkAU'x3a\AY3S5{EFxSn$`$`LOLqn)%U&`7luP6kzU9`3F,SzGi4cTA:::TfӇJv2d\~t6e[K9e} +`Rn2?b!41m< ů' pAp|p+uy)u 읚f 7dB}CKH}ո+)1)gN_t}MWkӋjL;MV,aވeIO|~s,Ν2 UµK~f!ȏ!Yt׍|f W?3po7Ml$8#@ 3 ȨXerKHM[i0Td/s ] -9bEwoI$ >6*߉lcqHnM$qjW(M]fXSw$ Ti*5r_@ X!y.^֝ '#]͎5=;g'$.qninmϹbqte=8}/[+Ӛm$#lW;g\})/cM/<;a}ʞq.a{|2㿹Yjo݄\I22Gbn-+Ӄ[| ߴf\QsI-gơӻZ5Ңݨ/&S Vy2<%Nh+˞i~1s!;w _:\|El[[^:+sCOp՟jhss:(n|Zc1 -yG3!S~P~&02>Nݱh:2_7AY."t"ڋ[LY9wNsĺ׺ -WKMq癞m-;ifWA'^G*Gf̆`,˹-o==f|w=uwͶoEiϜꧻV5GnZHh9 4Oj¼뽵27+\C7v>9=KCyzthwо5ރzZ  ͚iFa/C=OWoB6ڶj NV埏{P<:fXpIǓ'γǬvG}q4߭Kt<Gzު IڶFkTMکwtmJr*J N.^_ kdkTߴQc|FMJdרY"{o3qQEť_$-OܱL%s9|IhʳӶx坽IVCL3l1 -7ׇ5|ޖ2xkbENۓL:4}2Jf1Je3-K{U86^}^ؠjz9zSM-{fiKv* f^akʲFe-oY]1U3m2KϛQ:/4v߮Uv0WxKmG;Zy\?LŒ.`źv^=fZ\i͊ZռX֬2>xt(gv~ΔLy|`A5q,@0.'((%;6(`V1ո{eEC?|=]GAZ4ǏT72`W1^AylMHyqVhG%1)ok|̼^iA#olr9ʠ /ԠMJ&&Ue~.\viC&?>Y>j7g+We-Yw܋A‚rmDP+KE$m(!%e eyY_JJ$s]$oe's#]\rj*0O@k]4\rT,굊 5UI7ۆ'Y9ӝe(wJ3Ӕr+n L,[{a(@Z2/#<?ci(iX/yr-3ҳ9{)]$=1ڟajeBy+&y˟'΁fZI"eLER$ؚyf+`?kEbŝktftgͶWrUK % Z X˪nkVmm ;6W?TsF|?~>EMcQZ mLO$KݜP\.@$ * 5$1ҹ{eq-Iޘlm.#'eR CݢGڮA/{IEMEc̢Ewi7v?Q7ߩ#Diڝ -ߐvxUv*b!kFo7ͪ{Vd3TfRLE꘶ޖ0yg['7jN;ېwi2_+PrM*2YY]e^3lJ!ӼRZ`<"Gp'W۹`521ޅѰrh ({@ݑG!p@.̟gwo1,SD֫5?N] ]wS#dR;Bt3zj{@sYz6#Xp7/L{FFsFHMI-[#Ze*"%#֍|(K.:Z}gs|QŎOZ6*Vw*vՆ%$Zͱs㦥ZU2"ITvΛx+'r& >$ y#z$hXëcoc|_>^-IF`SBPy*s[@Ŷ^ZXY9oL,RZ`;U\ʊs8sf[@ҕ$b25S°4gl;. 7QhNbV^'ïï[U~]MF';IJ?v6߿!bg0RVr,ϸu~MV/L{rB,Nsxӌk+YHZrLJ'>+U &2nȳu qmBRN W @&x,RvqX+@ 3 btm|g_'@d mvYx:H( +BrcBDC|Y wk}! t|Bhͷ$v $․ JFdfd֨Ri3X! u) zp$SM@DEz[+Nک_*9#ēΌ6M-p'v5Ei aڊଊ2\EC( " K.% -_k *=odPrO.J PHkd%4*(T8D B3M -WT|1?o`@~+<OPO\4kY:y@jS0}F :t/t!@R -4w^E{u`jB~޺BiTɊ 4YO4b8 'c"At)񻕭o6`3*fDz~fPҀٺ L-`f$?b=_P_ِhw|frT4\B<X׃ q!os#!-:/6U;4=p`8\WˣWWp8E[j -iW(u(2d6<pK!6<9A gn}C/_q@3V,%d$FD{p VZ;2~:ln8ޑr%%$ ENr_w+Cpzzq@,Xe7(Ҙ% - U6 it\:3ߧRh4/ u?oey_k!_?onr碄"PV'`O/-ez@^v@ = 듞1! =Ou( ;M|ߩi߼MI F|%ˉz]5F@gKzhbEI6ByE9E[{:[/R^ dz%=|v08R3}MCsJvu긿F5_ӌ&̼@ٶ^3 3f'֞HOP~xC|7wA#|؂Sv|vq֩ZZ籺bW lX̋Q!7ڹEP7Cw28ho?8|䡟t6R E㕸V=4c4wk<O;~{xjc`1W֟g.TO=xA&O:nL4 -;222>,5~4~0j{r1C sn)m;*q2;)OY[_Zf/cu>?5Wy40^3è'P)꓋OaPyM14#]vGж\ZJ9ʨX# (ձ}jϓWY#ƿ՚6BHbV;{;Ri5 -:\~mSF[W߭ڶ\W-j^c{ݕ)TXhP)S;fR9)eIRClzuhaᰎ-kGnyeu,S96Րp'T:FW&H-0f9-Y8/Fk-ڴ,ᨐOE%ɀНmrtróH|q| OnuR^e{nn9TFYu-bdWEdwEx yV̯'_pqU0A 5ǿw} E[f6M2C2}IeՌw&wDQgI*Q6R -}.$].'ϒ鸲d;]l%^3^mFvLm):-7v!5/BAo+ܦkVh3:dӯ_3&|ygwNkpKc*}A:.RAZ u x릝7:va+]ajl2z V_ 8gY:aYDL}yANc77VZ1J2g:rNMK)SI{iW`&Nmکt!%8Y_7,uŐ Őŏ>L,Ƭe DZ)ڭfXUMM,4T;B)M.@$g5XVQobJըZNW{%yDDz%Rt$[BfDq>::?8=1bXE1KklZʌPi&:qUߚRz<j[yŏb6$ʣc/@\)=$ۇm `?: > Զ*U3і;<;;W;ΤԾn[l“J KVkzz)S.#"o<^282ãlpH\5B}F^hoAyNRڔ{%7 YV(6m>‘X j'D|%]v11CVR|Q55Fb#f#BB燣XxbYw<\iq'Bs[Ğהa[a<,ⶅ=L͞t-gI6A,|_SbQYt&oWOI|RS -"-azI|*΁ _-ϭ#w* NQ7Z_?(y42(ӓGc~=!9*5ix]*kK -trsA,QlUDbDDѕr`ԵoWɂ۫ן\](łRp|C"`3^yg -m`UvfI#N'}MSٵkb$f -bgYP3ӞqR;wg^9qghb(]A5=))W~;wx5mnӹmNrʇ; -+Ygk \IAqx6pcLf{<7 -Y3=;fB婊7F1΄^!M f]PF%<.'l΋Z'#[`+"3f {ЂĖ(YAAŷ3g yy벃 兇^Tv6p\Fft B- xu3bpyC:>L<'u5+c-mKʮqpWnFo#<&N?73x|[Q.m/M>@C -%.n>{P.A6n5c?ۉ1]X.ؗ'{3hzWzNT.ޑSX{^b pk^+ X,3\b9:0!VsoX>I ִ{;cUZB{MT"; LԼf'yy:>+ -Us5Z~M`^hvcX,)pJ)2ng\1kob&Qzjf̱ԐOv%,y9ܽ/dG7{Ljwp=@~0<0~|}%S$,tn, -W<53<x?[h)ȎSc+%sBɹbWϘ';xcuGbtܶ_һ}1$X. % ʥN9LIiDeIŶLȸ0 I.'.x/nWBL[q_Ǹ.^xt?60 3Ȳr\ޥ -xX~KrSx- OH:W}:()p$ooNxO\,u")2~e|\~=h|(g'/\, ֋qԹjM (@U%@9j=Usj4K8~<S W?a: @]̂ -h5}CFe*X>`2.A}ԝ @U@o۲z6Dy+"Un,=S-D2WRRcxM0n,&kڿ8f?1 -9;v^7NJ c_4m9Ԉ81 zzrOQx%Mo"ow.3/) 09 .௙=xHݪʫ"44T̼IDRJREYX/!q&{#Kw~$Q HFKz%6$ |U.2y!rd7gJNRRBG ??ϫ2grXclⵏ2@4▧š@4glzmUW^$Iw~} nސD%$n3[ -ԁt6@[(QH+^(8qA|+Aopj<"3SHWXI}w9紷2ۨ[id5WK6699+a3*SKp4޶ >"XWЫ:魓iY9jkW\ՈeD͋3f'\͇{_O Iɭ6q&yYh?hĭ4w_֕~:.KO5ù8M8h21MF4Y64M08Ua !<*;b ~ sO.L{0~A7jR џ5bHy2V yq\12YW#=@e5>U~N#1t|RAz.akg׆ Xq'A&H޾¼0Ɩ>,dY9mfyɎeT[zްFmDzï3uz"] UodxS1oK8]kUX?ڧDZ@%b4ZζqlcSFQL=F~"Ih^4vX -icթfʧj1[n a^8= v5 ztTTyS A]7Kt ~_&b?}%lVe<`Qd^qKC?YH@CByZk:*ɘ)RT5a+nXTeUO$Um/PƳ7,1vY=MjUMNJ /J9WlӚ1:7_א6͐8! Fmɵ)NKb"<W,,Vs*c mvh4TR#xQ5}`RSM4z/ak%7bzܔ^1ћcXjDL( !^1 ΐo{֮X{a =6m -*5}AvHD:gK1*:{thXP2RLX¶{&pYIʟ1;>Yj(NE6n=9 0LгƓܠMxAEg5x阍FL6lp%QsAm =wBtwRMв_c 9O^FgSv QTqN;WEmP81s}u7L#C0C:uxh"svYF@T~?IQX]kbΘ'>k0ł'D n] -fsN7=W伶fOTgQ -AmN}ΜG?L{5ӷd <d#YL~,;@vS 3+96Hx7 -aٔe-Qw;7~9?wc>LXm^o=T#D#z_(}0X' -+&K TZM?<)@eKHP_(cob9ˍE3wsGXc VG>zie*$9Dt5A01(umVX@5JÙQb|2ԧE O7XN3Cx:EՈT(1{38ckuE}tJ vVFJQkɸ~04-%dϱX`.}ss^CK2 -j ` -`҇|qRuN+.U -/읦3 hWCsӯ;ʩ#)Ҝ@5o&dاr.Ih,56k -rˮ p\#3[ HqXX`v1* yzEya?;BKL%Jk) 9x:x񝗄6/q/.WcQ|$@L,k6(xO {Klj{ʼR' U+IlG/0l_CXE -zDU 1~oLJX.R5d> Y HĿAXb@ I+%`oryA_j c,eBP8(׸V KL?q^h Y@JX]@e," (@篯< O/_-/Dg|Sz7yww8SkхN%%P9~|ą@z_bɇ h.R;Y@n%T w V9'r)>ZA&L"7P O" FKc- G˓QrN̷[V#RIL7rβ97\3N-Λj{*Y0&xE,LRM]KCBdBlOII OV_6 X46Ep+fO50: -L zRsu^ ¡n2t3⯑ڠ,_wqN'x?mHi mE~ݶ QekwXHY  k7x]8RҘ7Wu?K?pԐ7$ \ل̮ ,mS@ ޮv@1(کWk 1o;-I] M I5I! >kR1B1ipkݸE7=+7'Э t[Z 6@4y:>ʹu -34 -ܝk(󈸦O2{X)E{ό܎VZu}fT][F-.^FEGB!d'}I`V̟Jܡ$\zmz_V5xumB MG7/Z1/~̅Dܬ&[LMә8 -;gmd>kpaR}-QDv=%{.G$8>V;4)?Oд)~X[etKu͑wٰ;̭8՚Kh}-z]j0[}c/4 a5-Pmog} uvɻФ7wiKkAwO,o5svGV_f`5n6Rh P xmP[RISL-t϶vtyqfQ5\mjkjS;:.t.1{_ȸm͋QR{j;]SL:B ǒet* -yVSU?sQQlWE`9,$gPTϹ3qUݻU m\>a˴g:5PzZT+^m2\qiߞ*J,BYbQy]ʃ}Xt5{Oƙ~cP) 3 u|U8<ͳjjV}˶|>V.iE+ULCsTa9 rm7,_LD#J*Ee=fˬT)<~[ T3_[j]*xcS-Xw|aj #rpFRUVI=;K%YVbYjsJe%F <˰LeZ~^<ߟyyqJ?^x{*{25Ons}g:HRըVRGdR58Jt{,Th\c{%Jϥ0V/Q=!WFQ{ v43BI|I tvVq>%rjp*@aNR++B ":H 6v`;'8_}y&n 3!bdھwo1s(y,(1gdڇY<ƉP,=26ԶU&x0ųFblR4gh9{[;6h)u -)1)uF>}m0ͼWzޥdyr!9r0M?5),5|=^7dЄU±ܚaL.dW*%WYјJ >R9$v &I8wE\j1&3ǘlY5vZ+s|Yj^q1岩e6/ԨÒӜIX(vDd,0;,h|ly6AGADDJ΀B)KfbT2vUJA;Xdѻ6u ZgxHpn?֪4|"r^ -kϑ;YLt[k.ZGܕyb0\*AiZ3^KKݕtu "4reMKiWg\+>.9p5wmxHM>|5p-o۵=~k{"g_q-|h"g_q-u!FFO ح<ĂGFVNprzGg󝕻t^k+Ebju 0ԓ.Vwe жKS7=cc/ ąwcrZ &L"?~>,|UZhu滩 /PYLy -ag -)G5,Lke6# tPekڨfͮct!Z9LfyVP,oBЁ+ntV*oivP^ >RRM>.8&Cje -o7-tLdf3e=:F2N^gh]*ʭ b\֧(W-- ]R;OؗO[ޠ`0;9>*Z:KH`:)v)MZ# -`WvwF =cزO۔ٳcׅakt^ -N=O(IqAAĹk{콁ܘgIҲ]sdpA=e{؃Wx~/ݡF<]izAoN'W= mcٶzL?u(8s?+yP^ǖ۹-OatZ(ri~w"sme+P}{LeN4H+-툕޲~DanwlXY6&k) -Fǖ) wtX)V8,*989Q$iDmI9$ -A_ävU![Lq}a^߶.0;rSb iU#z]$|ƣ:$k[yb[xlXQ1 -2^z%Oϐ~$ݪ"ˊsrIcj'y$~e32bk\/XӼc@H -ڢFf&{[HvKZۭ%*ԲY(|Q8b9"Sle73# ';:.cP,iHȠЛGQ u5[Aeed1_܅u&maؠlq';M5x^bTy 9j8c -HvjĠɎ 3$e5ƥ C'#C[AkD0|0F݀D["~{{AOQuuevK<٨=iRtx_Rf' r[&s]C(}G 3rkE|ӝdް/&4X2qV!$0ƈSkG[\9eqgf(K-7<6] eMz B豷;-ؽA_Qo^(t/s5nOɗ"0ӛq/_HUREGW42+NEL۾`ՇHנIO7O`F_|_~`s?[ g }݅cwcYҟ-T'?[ٗ?R7O-Op -g̈́fYzcF'U@'2Jo@\'G74p>QYYwh4X?!w` T@>R A$m}^q_z3 olWf䂑+Y..M+͸'ƕ -v>?(MPI_ -7?tCP=gIzj/j7crSt6H - -%mɓΙbq4ww=rnK`=Y<˄UYkJ=va+8ΟvWFxr.=d'҂$Xq~J0߭o!~\~g:ZVN{`&:.bZCר q -ƥ}aL+ё=qȏM!%w[~,{ήt*ߖ4V%f0V>z֮l'<3Q9P8#G"T_:Iҽvu$Ն`vwSfОU5/Ķv1ObS}r/FfqԛՂjTym4ݪ[ : y hmX%Sf*Kb(NPphk0 76mm_KH(˾-Z?`f5M6YgTRsiSiZŕ&HlfW, AD-jotu|Zr_p_Y!cq^qer\nJf ࡎ{",V"7ƫ -mwF妗,7qZ˓j=LVVkʭWZZE/-I-^b\L&(ޡ>:9 -VZ -6pY.Mek.cyfe^ -ՙՙ{3F?#&3(]O'Wa3rި.i/%UeZO‚(MǶ{,3.;0>hovk-!&7)!2<^E3v᝷_mmݙG"2A=8gJ" &s::P6 -@Qtq%%n@L[p , /]ΝҾKW0 rj~^Zdү/30Rs޻v-rdDs6CYtj~c;`=X~'I-amezÙ4Cf_~I$xz[]F,VI]I#_Ag2WuÁL0YVT{Pbt~IB k)}e ^:cߟN+8Fzi49x[o[ʍgs`2,X!r9Dm]b"V{i̓ M'k'A%9v^ۍ9\z,wR}hrRF|Bl/>3rex17Tɝo Fq8N0eQߛ(K V$66%"Te-RM#ﮑ<=pV-1X2vC e?&o>!ټ&hزOIbjb <(ZՒUz2د8 'fQ3-5Cԗm3}cD)I<!f=y2>mw%6nUo|{eIŦ% %cGe^NJ[EDmw -zτjֽ~^e(ch,6ѵAl"z,o6':dRn dd}É[O?$a:9`AYh[aw ^u0p&jp05*evXjQVY! - "̈́}} !ںO - ΃RN`·`gګī=$ -Ts7W[nʨq*%]5*͆_SWuE (!7 = Jq=Pa]wj<3y1y-Pz-Lp2Z" -{]:uVjaBq>X׋Ѽ Wș<5(.7l߁|ߎ~={R{Y{Ԣe־%KAaAwrG;'PöQ>wY}5/ڱ5r?hU>1ˋN*=8*[* J@iۏ7p 0!EO }_~cߘ`g ~cߘ0zݚC@K'VwWsy'^ {9wV:,(6WkNخ|#)̇Q'G;?$3_Ai7_@\Ҿyݺg>12^nIk[ؽ)h\]Hsu4FJ9[76YIY̽~\b/$=$I|Vh3:/DӮYΐG a*&ɋ;8oK_; ZK^oàp!B?OY?ۡ"nʤcݞH-'U:ȟ$(ό|sc&;P~ʆE^Fq GJWP:\tHNde:ϑq=4hW -@"fb.o:m$3t#IS3wc+& -. 1AXA9@OLw]Q@W}XFJncB~G:aV{ ST$vJ,= [cf!:<&BݘdZ o-♾q(wGS,'%'9y]B5=|2[Qh"e%rۜoJKۄ+ptoLծcsZ蚅Ycc/>^CV&]Xr.S{u@Tss&Epp31?.0Lo %K5БM]j>iEsӜ/ ytz1kСMObxCLxBAi1}@^`tQQt^aw:Cݮś^>'v*Wyn( ,nGp}˙ny@M7li+neAyW -L9 ~Z kV:E1q?*gsm:R o:g72] -5/uypX](TԝJY%qگS=yꋖmK܍һj4n\vQik.a[c4Z¡D=*Ӌ[^&Nځ2_ͥmBÑY(}(cU [q_-Q#?,Q\=r7VrFeb?. 0qM -s$V?Z%|nz;c-K+nrž -d 9GkI SF߲Un-Jeh|ivNby?E~@=2ɠH6~`6r znlH ׷D5O!ذߒ - ,s_$[24[r9M7 ->BPt2{Vh1Z*'(+628(%Tѷ:(!0 aMr` UbK?. NهdbSŮlI ՜>f~4V --qE cicrf#N_õRgkV2XZYh+23rFv/K>_kq.F퉣P F1X֠sb11wEDmGcm,Jv&BBZS,ь;GˌGVk12yjP*>1~eaztiխ߽-bwkݖ:AnD*MP -mw2<&hY8=,b'Κ)?.4*WqM!GܑṰbf`՟ZԻn@dȏC+Mpc^Ű)|WQW#owRdĄ\:{jsh&Codfhp/;;Ih| 0ؗbɻ;TKSx}θ*[W=$ݸuJn[mu ыv]"6k| - - -O=AӑR\" -{V* tug1㩷97Sgv?A}@@PDDd!O۽vsAjNɝh7P}zHw76v_m[+Y|PuO^=-WDdꥆ -Zǭ< Qajbiߎ3sU^Yb6.O5qGs)oQX˺\H2㲫,[]Ps5`;8rJdU0X$*l GvvW8IWtW;kWEXME(IX/ѸLLAiSvߵeO3+6- -iPc!̥UjWw芠Q,5&lF#84-R +ߚ._ȣ*q,cOmcZ v=[r5s Zvxkzr^9rJ/ky?Q`~9lv߀cs{eu6jo`KPTao]yGTxV۝ĩʼn\8Yڞ d֔խf Pc:PѸt3uz0~&,`#چlK/x;*2˽'Ady5cFkETɰ[-\nZU~;HOeI+*ճrUO - v1`Kk -*hVߗ@'"^ek;&팸"Y>;f6#Gx&_$}gOŒrŲl^l{+L: jn!"ΐM6_ 8kׄy"N0'ϒ׆{ws'H '(s9is= `:#(0cSL.|*?t=Q]߇%(l_G_m]9f[ǀ% endstream endobj 69 0 obj <>stream -On1HI+g,p90El| gE^>rmVv{$k;Zg[IM$1bc&IlUSfz,bdAq{rQ.H 1ejH -R@:Rx6$W S)!ӡ #&`ȉ*^<0JP[.z}Aoy gkj%c}#7h0}؃tOF Tf.pg<#Lt?ʦ![B-*U>tӻ/)z.*VZ6̄"!#>;wn&NZkbm<6: -}3󳯂GezбwQXz҄9 %MF-_;av'ǶOvyOm<V-ЃW?+-ξх)]2!EKXap3rSrYZJ l؍vOJ`6 V>䪄=Y]w ޠU.[Uwd'm`Z\oIiC.y,NQm5~0!`\7'DUM۞ ▼BC*5ސdo]?ZJO[ڿZwҡ6jo>3y/9͞m:AK\CB'Sl -.v>iwSki%kq/3ͺ:,$+r_HgAw|vW8CĻYXMT1c?_YЁf2ޤ|v ұk_Kam}ǵ -v^aȒPrnw6C6<JR}~)<?+~R4u^TYwY;`4JN"_D3T;u5;uuKXeC+$(ɛOwߊ@^?Bע?}?:LA͡ŪtsߥMŻǪe*a/p-}( dbήfM&ae.;44Nji4$3u2>Ցg%4yt'm5k-Gdhhd^@+wWI_J[[ݵi+j挧-P\}$}ްWæ@gf&ѱ;\?g-<klPA -G 'G(-'n8IQm_=X{4hXӖǮ<}XPhf+>t< -Jxp8< y8IAzIS. {m0Uc~łh,O-^ Ey*rh+2B7V=N鶒TXV|c"҂8(FHkfUHMi%7_P{e3[{}-)uNGseQʏv9(3<(PiP͊k0jAG?!pۗO(:uacu %eY~!*Eg/g ɶp8SVO˼TX1:PfMa7_z[ܴЀ{^MVQo}4X9r"*rϢ$cԙ>`[&~kL DžSs >07L7 /#F ᨩa_TBzA`N;먳*y6aOnW`&y} ҳV]͒8@4jTmǯ"cGZ40_Nm:fM)#h3au\7x&dw]%V@gm)hx0(4]CQ Y[Epu`L:%#aSb4I4~P3uf̔K ΘOL0M$S֬q>ϸ1 WFD9܇l$5A.;heo㰩]vܨ?x)BSJm]FS#ćOۣ(P2W#';.Z0lPy?K/f5'|xໞjh#nw)dxДWzvKb;%D&<̟Ę^`D-Χ]ßOJqX{ɰKbܱNgl"ic _/~%. -ˬ+SiНx$S/KI`ۯp{i/_mJ>mޫb3:@ --?'|۠af>', $ &6w5s> &*z{)) C㦉v"YnV4:^7Ձu\Ò]W5n)}탢UAg@GOZ{ĽClbRCHY^M3^MvڑD7~P;wCNw ۾q=}2L-=fA)saKPjuPZuXP6\U&~]_r w2=mg~eѢ:vgB]cq;do<ޣu6)Ͱ 5Gk ј  f Jȁf0j!(M&(i^ޔA>/E)ʜ[['ۆ(-; 7v Ot>K_P@$a:Js}fN&@5[&H箇|܏huW-˺RB\;3s}(NPB\;Umfo;uxY8W&7vC9cJ`Ja tڲ]K2;$? 3/4,+Q]N_D3V-k}ĵKy&_u%[5َ{%Ym9(tD(}UrAq -Sw1EdDYBcw&(];{D3E?-,NڼqV4G5~Cel]YF ƓAi@i#Bxܯ6,4Q]vE}p8NG4;,$Y(=7@)S&dNzڭRA+Vl ~6@I;?`(?I9w{4V/, `Ƌ}I^՝5]Tg-cI#eH*w7Vw[6N~+gj{|!P ?Dϥ5@Kel2(TXKȭHo{ u*>aswuw9hܷ??<V%K^MRHN|!oI獘٢Fy$?4 Ύ>{uY۳\醋uʘ`[Uɥe%ej{WĽd -VV\(^O|~Pdd2,o2o[>G;3&3c\f΅ co^QetNh>#Rɬ$Sa@6#٬qTT_av1k8zE Y\{Kjoxĥ}{%ۥRd&Wnd /D]j9yW/dGۅ >Uk}1}-Υ.X\ޝt|p{rIpVJ_5#yM>aǻڞ vĹn56_쌭yyam?@ oLb(l$a0[ -ȅO34fݵm齨#v_^u -5*Դk9i?F=xWNq!?D¯vP(XP>m"ScwAIVz/]FI^} EW3\j.ZZpl;Y&˥6 5[ɠ11 3#Ud1wB~-0qA`\~p4c-yǜu4CS/Ywm:{tz'ɱ%rFֽ Zj~[}|^"qiΈ^yot}e9J,bM2PPm~QkPmK/kSNuѹipЁzcf}IP$svdKN7u/3DXd~G:Zn?(yo2[L%pH"vi1>cIht u,i66VPglV:__VXd1\\=9UF)2zN\L'rt}v a[{j=mn]޺c) _"1y觟c{NZzqnw N؝E5#e5[NF|ԩեF`ҽq~2L[pDg>]zzʳ qYf[LWTBo[ֱfqht3}.Ϛ۩5\R~Y԰n5uʬ՜V!J/v/۞ 锄@ާRNw%Y{n,磬ę{9n~]qz;ëTLR/׮J"f7ݪl$aiv3_7,Wl/Dk<ȯPTOP#I@!SY\9l>\}٦ǍE=n;BZ"}DEr:)GNC`J8N0bT -hQ)R@rlasv=m|=hך~k,nUzbUH D97<%j xw$`Zh!P(5yXg~>h+O[f̯&oQ-ĮqL/RQDiJe8FgrjсR;z^ +P￐?=(z۠.Cgb6a -{7ҷY/~Q;X 'Qc$m~92se -KXA!BWT'lJ'zyOwS=@a8R?+.(z((  K@Aqrh ܣo7ʍq=Rnx-㭱=@a1UaP%Iʠ WȽ?e^fJL?a -W|hF)9 3q!{<UPdZkާxV#'<㳽S\<7()XMs u^@i{7\҉=jwybWWĜm\vKZw羻EYOo;]nwPܬw&d{e5 -Eԙ,>y[( -KNޛu/9,Ru;̒A`Çn(d[簓ݶjauw!dECqOF//Ӎ\:%j0 -TEy+Yg58*]o3Z - h?V9` \קAZCc+@_o\}!FO-D~.2 ż׀O~I=j^cPP3ÞR7ܞgJ]Y-M6uh-/"M -2BA7Rc}IC@ a>M9r}ZmP̙: fKV}Wo?/ uc=ԽtK @yܻrּ h~+)ݫCȰ'|skqV¨uק\r9oZČ/S(V=F8K`[;n\'κxzIEHa IqC;jFz*4_\T[*8y  -$WfO,\htH@]ąϲP+ MT꧀⦍Sl+{W6̚T"UKg - g -e 8gqu 0AFT}w`dTb.u~ߌ^-QOs9U%fo낞zA50t122%g2Jcf#1=@qz7A_ >b\>-Ey)[F%Y"';FskGDgM2];= Oe6Tw/f$,s*UQZǨw0@MXHvD3x'Wf%ml^]VZөpwaP4Ota]\=P\U>eޙi;3'sXkD|@q-E]D=)r:*Mqg1F,Bft܌;_:2ֲgZ*_'˘aaϧ8!hV-»ݛs'FЅwyy*)ve[ NYۍh=v8ۯJ峁6[. I%lqiWw6~x0b*>wXB{_q@}k0C|y%hWrgqb⪧+^v:+-]-L;_ГgRs092l,R [: -C:S9NGpү+`Yt]P*k<ؕb, :%"6LekVЁXS#K̢> -ӗqۏs>pиZ_p[np!59tHkD2e{R{恒x|"gS.Fwc -uSJID]ms]4;:YLxF[i͎hRyA~1VB&+A (~!߇(Q ͉dҫNGuoL;/a -Ki+||ϗy/ owflKw\/۽ƅU;gœ(]OkYӞ4X' JYɶS-~KJMkwVYYư"1;غFu>RO7*v4^_H7+s6:d@w'ͼ&578r;R,J du75lM=|!&~ҡBvHsc{_Ԇ +!7ɢqsq3^ڠ]TJ-c 3u NJ[kJc(Ze{ A㷨8ZiOmO5nKGԮq4&,˜[nRiuJqef:y+pUs&fDFS@KiTͦl7=mƬ42 -ZLd6تqrO3>QuNb21 f|t8~ԮA3z&N,6 ڻh -(߸j3Ī-q=NR"&u+Z;6mh!`ѓs8Fa$y\emv ,k*?Pa87mitIP\#01V'0_Hbl8Ĝ _/8桹= >[isQ)ȷ4'yCIs=SFi}^Q늏0xA_ȟZXj' :lĖ=Z( u\I=r%Dv*/cLfy|ɔI5aޡ?R+8бelϲ<=:rM"# ?KU(`śj  7  KȎG=jr8rrd۱w2A6w A c shF]}^O}|X/s(;K=”P/ heSk#S(K rR9ׇ mU+dž+oZ>g(R|O{cVQZ;][mm7&{[=@NAYe-d`o)Ƚ$;EVbyYk_N=gdakcK6>JVc|?Gԝ-\y 1Ciýom~?DqVYgC7a!?l |AWj]P~  ,B%WhѺ$~g;[0$)ˤU;;19 /s3H(:[È^w6 M 'tVZ&N ^. "F-޽[Wz:߸q8q2GpvNNj'ov9m ЕX\3ȟRhw-PIxvm@ڶb?~PG{el8wӽ(} z;&g -ѹEj&\{=@BQYuE%,'k[P4(6(Э9?̧`ᒹO岫 Q48rrvu张;}լe3/go?-?lDXy)W zbQX†Aۙ DrĽz -Ɯ"=lgth/`@96.waXi0n'ja@ -֝ 9B|t -.4So/e(/D (6{h9%>AIO~S׮Ӌ5?md_ ۽yXHvp$9n6{xmpJ9/dOoY @a,=AIW)CM&m}q8_{F 4TO.L 5Go<ɯc"sd4tGs}]XVA -ѩJ{ Jhb#N{{ۭKܽIp̤qt@/\SOUGi}!ScʸPuwUJs3=&5gVOjoM?P;(O}px :\{N8sa@$𸣚v++kjԳmX/뵍gݹZK\ҝl;láTp}G&j<m}(W(A9*S7WAB?A:v '{!ҚTTwƴqP|O(fV謧nIx;5R?ƟDՆ\|ҡ賭m\8L8*矚EzYk7Pŏٻ2! ^;&m/n Ftס.o $X9wPLz'r~6 =Bo|!Dj̃Eso,#d㳖d֑IzonRmp>Ue73/hL]ʢm5 o|!?D(7X9@Ce\C^}sߕ/6`W5Vu!i{m m{OGM8WpvݻOtjf{kuq.oI5>*[xj]P%ePE`HWhvW.ysN&ŪH&.,[Zd}ʻdڏyٔ?$xw 0CjA워(r!UOfZzVw+C;8=_Z`cO.f$^q(3xl=rpJjpnSkQ/{Ԥ^AE/ ߀OY7{[Ev"ӇY7ТȼUoAl"1L`v= -m b3uQ8ۨdEz_فe̗͘c4Gn{"?*(42>@IQS~ȚǛ@#;MwS/D#vYQSUS=1C/cgf嬶f\R+Q<2N!t{S]`dPj$gl* - -Y PXK&(SoP'Hݒx~ 67[o XZ '9A*6龵z~4c]N= v8wX+H GEkզkIdupbb'7qdgt,6֍8 #]t]Qe ׽qJ؁" أ"ab*Zsyzje]D·.HKuEδ|UܴBҘ뺦)׮|FnՒG{p2gj_ʵshԨX׸VAKZ0{ ų|? ^VnΊrYbe'?}Th輳jjA ?ؿe@'+vd~dcВ0o]jsgzGkDtQr"ԮT#g*|*r(}\F\εcJ\eXXpaTY,&o`Mi)XKu{'kk]zx?1RRZ3=P4 {)SV?~+[M$-7kIK0YUyIhFj@>+xv]~3Mq2꨸<2vjcZH|*&[Y*n 'H Uz"ۢaz qs~:63qrv/=w-q ͸T9o:i7B.o=MJ& 7Ǿe$?gK}ɒR\;э%C" 1)o"3'>ރ $"`<*'[ +Lbv[w| z0t\ Vp F,={gvc9.+5.=|Z')z< P@t -~Eg5jYn-ڪP2j -FPmy5</۴Sw8 -w7Bг7xa6q 6 j֤ -فZ\|aJs5Yw - ɂI^>,nɽ3"d<88+ΠYD\^@r -R$8HA - -kVY6!T{~5@ii?3{ͯ`"{r 5mη~  gjFr[9F֡*kg<xpjog$:4s My!:/2PfD%qֶ~Z[6l'(L1vNOY@dPfK dDYju@L:Kg5zfo nڋ|a¢:ky6ʹMjYcW L!2 -U\6CP Eʨ‼UlwD'N6)ԥ%ϛ^+A5W߂!6^ar-UQˤ ̋qQNEr)4~eEn\؂P_H2U'L9 f_~LyG 9<8IJ͠ճW.-+rXMv8U0d{Wdtʏ,3?+izfJB2-Yz~Dӊ6sݓ1U4pL&̴2rt gp5fƽyTbD>G:;ㆾ;MsPR~ -}[`PCǯ U roFz8}rY6ŵ +4P舅B"0*g٠C4Bs7=f-+`]HgyƭJP;OabroJ"7==Gm zhS+c^5'Y{JzL:pmnh&-!x6P;8Pxw-[&5ؤ;˝ - S/~;_+ }t(B:^@L{rYM-egZ9'׹؉ƪFFvRi0P po ^mO@~ -~ _0_Kz{*VCn9>uȨ$^ Z}\bfVw'Mv?#(]}(Tdr"n -Z2nmL8ZFe/ASsncvFrߛ r'Kz-z1ˊ[fAe 2FwRϔ,\P)]9}Yl+Mru2cdJf7V\[+(.uytip:tѪ -|1m.COɬT6}gzNqZYJ::^Io";BXKvf-¿<}y˾Q+aN*ƭ/0YV֯)',2G!?qk=a4]O:Tƴ6eU.rU}+*ѫJ~6Otʹs'/Ӣyn -a9We=oJ"Ou$,B'PXүؖ:5a^|>LA9lsXRwʹ8gWues-m -$Kv5.E^WfWZ-yyO:T 73goã;l褬~U`v s&Ȧn݆C*ŨhKffʧQ},pxόy鱠Za,i\[}NfZڦ[eΩH9nN΅V9VJy49)6[h_95SҍUeP}8Qʃ:r\\q&9*=y*9Et2<+TɃ͸> AḢA3Cs0k6l -{o}7},z7PݪsS*G2l"QR|xT}v^Rs;O iF3<2EYHFb4uk -r/H,ʄ?i1Zx[ zA0,O5XW,:V=uv=>h``Xv@ +.ߓ !ECUX5&@x"3!,C"E=d^TvM̷zs})/CjlO pЃ6jW'6s T PHZf2hhZwZSew%f2uQ|5_yfv\M^_0Aʌ}Pjޡpc(֫p8mv??K6.6 СgZ? (N0!@yXHV\T&[i#+N<ӄDko5{__`18_iT+ueg5|(yyLtmM>; qќok[IkuW|-P@ pb<Y$@h. sxUO¦ZI` -`PpIʷ= `&;پ.*u扣L56үRPh??֭# %~1@"i  -|8> >\\`?aE)z}:l݀G/23[W^k{xa}pD}磊bϽ_oطCS3  -<${Oߓ[ѷ^J%9NQ M}5r6i!szMJ>wnPmg[vʕ~'y{2}q̡F2|O! *)h 1x׮ D6Jϟ">8KђqoSH!s㛵6`Ig/z^ |?eRy7@7 W^"B*16VO쬷G↱9=JpN7ssb:WД PM hﻧ?%C{am+>KQ[XϬ#GK; Ͻdv$ E;mlt^yl禝^ s(MOQM=Á` _%{u7 q-3)*.OZ˄7:Yzw-$7cju~R]miD%B/PUDۇBCk pJ@?{;GhXDmo0,۳:@7|)Ů{¥Ņ&Mksj͘Y˞f+R ̉Nn\r]ȑС14 e.նhfB+ +v,F%{;o.7_e5Ub΂y0mCѽeܺ,ڝtH)>'ĐؠKȀuuϯЃ̚Fb70aYNmENbĶL'p}9M81FkeӀ 0ۧhn3>0?Ҡ$նL8/xgR2A#.+Ӎ৷KAN-tl7`m8 ͻ\VGh׻MϾ-ў`Oݧ0Nu}wd~]2Sބc& YQ4a}knmr oa4/OK'qMe#F>+GRS3N]LwRbwG -/w>bL_Sk, fE?ڍtU`lvpֹL"rKNujzs_vf ߽">_:6n_-ž[w _*^O)R -jF]!lw~|IlSѮ-ӻw>kh/obp*b\4./h^Mf{6~;M@i0 -uxrfxVvvZ6G Gsz-S:Lme?tSax7Jz5nXipӰW@0}n9nQ%YW6؍6.zq[ f:Z`:;GM?y)_FP<_R7+6եn@Ke -.XpF)m)_=")9 w0Xi ,$3-Q9<;eEY+-a UmVku z m.K4 -I]d3{ڰix_7}P:>~+׋SM pV4j9ܻ]!fYc"2M=ٱڣi -RrFŎ/Z.}`5 ΅]jc4̘?mw*om-Y({ԯ8#½R\;!3{c{_ns킉.ukX[-LlZ^ʂ%^4n(XWISi'a[3h0 )mw7+v/ׄxA8sĆ\RA{un)!lZBP}-hg?DXybI@Dt:s:@J hvOAXL ZegaPŜzwi[横f -fUNӤ䷟.;P/ب!{Omk#ZɎF$L9`O'.epPqUDݴ?&W\ R3gf.G -:PQ7s*Fwh>"J -"@&@F @|LMDt–@@zhݛlr9@4pv(x% =Z|B'U}5j(yu%@;@'PY7G)@l+ l > ՠc_!)I0UXq]L\X<vqIpe*ɻ-dQ -. ,U`͡  wd9_Pe - k % "ʇx -j'aD7Va>uttBC.=T -4ߜ -"iklj{-F 1E*& zTc!5@ؓ+vz-{W4u.Dz gY¦}>vΫ۠^^۵RurM\o0D?IEHo_$6񣳷o ivS(8b Re>N o`~oro] .='ZKxSw0/ݲ{N h29Z0@lR r8MP܂׳Z?˱G4X'R(/u ؕxڜ57sQz,ŷ]uNs".?2 `ڀZ^1Q~`:K2Q+[z]=TCs[N.-_ΫNپNMKMn͉3hnJ:۾3p О؅,C:z">W>. >TiOIL}kQ\{]G˔~oTXς6榥{ OJn5zWL{EaHנխ_~Of<ų<=*ݾO\Ź+0&;~_o0⳱26u>w}A^thJhQ:Q)un9plo]=eZ~1IFiV8]npl/{>\')ĤSnETG)W6ڽ![~,mL{N [wخ[ƽEftɐ.}ck]3a~i٤wͱS;T}5adJT֞mɹørP`:5'EG֯/mJ-̭x:lhm/]Eȸ ?Օ"x W[U?l|2Ηb_s/ήVa*A8bzP dgkZ[Dxf̝16ԬF=6:aSQk“ⳇ6tӵOokgBǞ|l9h ?Nݚ^٦Ri+cS!X/-{Q8qQA,;b+%5rO`|@ Kڎ v TԕL%7sNs* ,Цr7[Nsp,q+mGKK^+ZeX"&2?, !|fPhbŤnrV!"K[TYES.eIV.h]͊FS͏リ@]7?}QR@8]n{Wէu]+M:g\pΧ:QheFͲq/U^!ѭ9ϩw ޥbttItH^+a:T뱚 /jlz%q5Sl]9Ϭ3O&:!8'6[#hO2vyi(c y}l͹TUӬM'?,m*%U9,UxI)K3p,LJX)P_8nW7=|Ɣ T (T'NOp{2N뵘mU -\zVy)K\s'Q>"ve -_ˍhX<^> eÍYj5 o ܝߘ2@l٪50mC=Z=ʸf+2Ѫ`rjučiLʻ4(/#Q_ +uZtR&gMɁм3R`.F<w^ bP.ՍMu5yr뭨UKKT^F=6$-VDʹev + rW ĽYF>pFyiFp?f7 gSD'vAqNeֳ9)cVZ#2^e>2D8ˇΫmt -S^6''ng15.]@\Z\PWީs =z4;َثsL:PZUd=Gwc5/9 \sJ~RgWն[ޭ_OpɵˤgV~c~ ޶G&a'waRnHwhT|rD)B6iքxmԶǿ! ~m0HX`]Nks3S%lɌ #uƿb:dL٘7:Hv,el1艈CdW|mzk)p+L1o 1&w%ݙ@n:Y ÑqG'ER'N .ajdon=*P7d0POxWQBdp#pǾ'3/=GygO#3}OT%7#1\VrFqi:pa]7IJrLC[(t @>@ {G8%? wDi2[K 8H}y*otB+7LXCy5$HsH1 }X  =ck~A F56CAC1l/>m`1ׯ?lƢa@uΤ K o\w'7_Ȣ" +4> XhD HP+ڃ47V N{}e. yyn -*C` ao>b> -~qj\|@n+@ K871O~}!ld=u$Pמ5 I%T^)=>u/o -\vq?j*ZbQ~EEV3v6S7wosC9Jpy'') v S'pEGyF]v~}馝o`=О`'9%"ێ%E4dᝇx;mNwvMMy}k2,DX{'[8ڇϝw<_8t On -XUg^\@1lV -s6 b% UI^o9 r{ JD4%?р! (kker>pq~-tqf̗R?-@$h,&*CM{oTKrb;-tmr9906`Pjnݺy~O 6ȶu8g60%C_tSl2xe0߹᥺`r/@W5u+iXďx!' lmajV F8lΕ[Gnu''.z -.|6 "4r#st?kXZWe(ԍʀU@ ߬mm)׎apj!|^5Z/̊cD(B27VZ/'ثŢNOws=.3MO΅0۫o {G/6X_;MQho`gJǭ}+c9xH3箉6gR!iǜo5kLgm.bqvu93(cϻnNq97Gaé{<0kep7aE@OV`"0\`6=,֛nobѶSrN-S*-tWiD\8͌;N[(6 HbHV$)"A,,嬵׼sCw3PzJfN'.B`X->5[է?5/:iw@ŤGNseU9m;b0w6;Yn|^SXie~zÃizoy`bɆ>.=|Z2/i3Ɏ=ƲMi)V&_Fl @#IsBI^h^g\:\bEZ__oe3}CPxlsyFE*;/ ;>d; fޣ5ver[b|zB1܈gebDs/@6R*0Ν";Ι7&.z乳>2G<ꥋ4 oV纳>vxIS4nZ+}ht)Rh4ddlIZus˳jvWF>QQQL c)'-*ja y[,+Pƕ ==Q98V9Gⷈt6)dXa`^91m:"a{h&gݐhYf>rHʎsv"iM$:zGӞƝR{Jn^-18U -B6[6X׭Mi@ѥ=獦)vz \őοJlq;W<]pd-hIмӏ?+;&޽I-jg^SP~ߴY±WfgS~2}ȳ l1FؠНѧJmr;ҨY@`H%˯6$}Kž œ9OF e.`L'Gq3 &|0M>G+⇑8QY_ =A?fدٍS6jl[aX?؟/k.nu4$5>dz}}X޼mpeuig*LϾE˹줹[`Lp ʋFVvc@)ewPճQ{g,~aͿbοXUNgTtHũ"cݬLW./[f-]p;:3~=zrSUmtu hph0?IRfzzu}Y_UnZU\|+x+wY -w^-ώUMEmtq=vڈИBX%1Qw! Jt3!&lsV⮲4$,{.֘nuD(?ttVLY%!dN\<v JNEr7TGJ:}}P66GH:7yD1DF.W ;(1wVrCP)|}2}l.pPr}_&7-?`(:N>bP#Ɂ4'sP4\ ^QTJ_YL|L:e \` -z'6͜Tߵ2}1pxLGrC]6DNx.}\3IG -^/@(`߾:߻VWȻ'gY9yڅpR#YajK,DY ^x,m9?2d-Y)(桗1Z}cJ\S' `|x*U+2@|wf`/RX)8RXʕSh^;RuR(Z$sH>|2aNJOOϟc6S!X\0ODž0I>K2L>NBX7͟@aSL$R8n@  ։BB}vBBu M|=VH!pG2KI!/)_)DQ2-g ZӿsnRX@ÕS֯H.^7B -Oa#[`B'jH1=縷  `}-~7R - &`~c] _&q|J٣_ a^|(="EY=Ef]_SFw)LIaYRSu8xO@p]M:X.6KZYn7,l~f(խqf=*+'RS|h3LѶ E4E)Ek8Et) )Rw#KSf>?)|$Lڵ{дԕAP޷no_8[\ڋxzT.O>8(hHPO1XR4RHy)):_S*eRU)SQ%|:g,?|? -fĆ\}!\|.>9,A$ޔ+:$/@ug۬a">qn[lؤQdl$۹$=c<*3fpirF I+Cu -}saA\{#toY.Xj]l{E5* 24iƪif1!MrF$g~Y7W6!@ퟧ SVGMۙv?]yȔq0N-0_ut݉%wt ыe >˿AV%͘*K./G/Ju-:ܘ:Hwb>Qov%o=d/n@<v=\kL˃|ٙ] f358 -Yٟ` w_hwO1-[H3SVKUlZx>hWA/{z<js#,NLynJ9Nե9btQN"y`%GTߐ=A{a uݠw,0dEnw 3[J3E5]nPHq1rbuO:Zov%5 Éxԧy-܏VM2zXFsō3;厜E{.T: -I1mHL )6:%vX:W7t7&x4rHLbr,?#anl%"n?؟ ?_'bx⺣0wةHοϚ0( 깱 7rZ졮\*|l潇h{ã %$[nEoZhà\Ⱥmҵ9 |o]Ra -xFEˠq΃r_գ$~K -SZi+FZsnbIry=V1K+oOflUmgqzw< :[h|w;] F9BF=chY[]:30.ʯsWZ[T3HQ 5V0Mٷ{KuA|TIxOu,skد`UF2ɥje\ܽJ^x@|ݔcs{gX2t*:.ҶO~ =+~@.fk<`wFS*eG ֿH3a G)&h_uQoKRF'tlM/; xҨ|K4vaC|l4YT59/|ֽ3Hm6=l~ϴMqO.Y((<4(C8cnf|LѬuo{P_[|[*- -L{6QϱŻ۝@)5{ة_FmM-Pj:4#HfD5V:#~4 -{Z;il-I/B;;A|˕h|^tU-g -~r;R;(Ւ4hq41'o'A6Uĉ,*%a6"J8ʆ~OQF:Y) 37j"砓mn6=3c)Bs_b@=~Mb6?cL`lhNvN仩B<>4AkcdN4{1ґ**C8 K*ؗ-KHk%$6穜qvAYL}O671͠83|>qXo9ʧ}5rv nR0u)8hNP S'-Alڧ,ITsa$z35!yp)YF=Y}C!_=gvtl5*??Xb|%:|E D=&]8ع[|H(hnK&>f3{o9fwѺI"J%GkҮ?Ƭ7g_V*1Jfj0MN/o_ֵW.f/6ð L3}k=wNpnA]VUNQƯ jQOkc^kдKTѣCW:ܺM[=~\>dEgbJExjeTl8\oPۼL2FBbTuضGu~[֮3ëʷĸ~T3bM,k,*(8Tr(LG߿# \:ts\吽f~_E_ %\.WqYÕ oq[B^KFۅmI\B)d>b+yQ!HT7"Yn -L~|;Z_.R_2V)ƨm,a^(o>/_pvLֺrTZoOR))]t[++Kj7'U3+>2ǐ3 UhF>tx -|`)x:}`ňyg2s0ϹFƧ:"%m%d6Jx2E"&S0\YM}==E(ɧz~B2Iarxʤp -œ_)dL -U*肋9wm|[Ap0]~||b4 ,Iú y&?{Sgڛo@*kɥ+SX.qDzBawBB|4*t - @ ~Bd.NN!)$kx23a~֭~|8a^H2h($]RN5SxSxܦ0ps0qp74IKGf Vů^,HQ9v)pvkD:\eWZIW?f P{ą$ΤhyCh̤(UR$Y;)g)7vo{-Ws=sO u{~Go AMQ+a3K̓>v5M=Ol򍑀SV {bbH}ixYu*(n\,_F",_x;G2`gd̎NsZ22iP[vc#dr7<2Qן@]en"^P -Lp_;η#n ,w!ik0aR~]=+tGI` -S)r,@)qba咔(JԆ~ /<-f,k\+wgwkU-CqW\eQK[j^l'ѢB۹ YL)Vx6&pFF[ 7 )}70OA!( K3C]^Ňr+j'vRbm}F7Q9zU۲X~dHMmQ+U(,Mm:n.PG_RX8ŠWq~ @.Hn o4Si汭T_1; NZ=n x8ƢOr檳ԧhT? 8CRH1y)ܜ #,F~33[?!YIW sr50Ey,-q{F}>ȹIԝ<#1ܛVVQfC/D`i Y0R= -+'_;jMZ/nGg.w= disμoNжJu;_4aXAaj-qG.A?<Ѽ\ya!r4Śۥ~^UZ+jչTgfPFo/tYtnG"Q4`gOf1;ϓZg*Uz8|k!)""o[u=x; oWM[iƔjhOҰfyĵ@f8@ҬQHlJ5bYv|f g.ȮaOL -F=QmTM.]OBd%Z·^&dļlgRˆ WA1bM>͑^ }Ks U8Z+yқ1 P䁱nw2 j/<\ׂZ}$\ B6Tu~:Dv^7*Ji.)-#hI~g͌mF~;p:/9rMo$+)SB,9?bL#lpq'~ۻ .3b^)­T -.TZh.@ln,q@9޺"9Gg 퍫z,՗nM)=Ud&3fU(jPpČVSj@Y=ns"eg9\cϡ5%9Œvϙ(`B^ c"U|6HV6⧗|[#*sR~ʣ)S|ҎD$|: ynrRbd烒|siKlrh=F,þPrmh13]Qdm8/lFN V.{\ vjq|-);8D޾se3^zaSX*]DM T7&CiQ+"5uMF5@L><|K1omV'$?_$>%|NGcɻ&I'6&)kI* C2lI*fx9,a@c/Z]|L𢽸?J?~Q/މgP&Th|==mhh&p"ygL>IO{=I$xd`_wx(XH+VM8Izc|cv -7RF._?Cr2g -D b6sg>Lޝ`]&y+XlM~ד!y;s8kd/li<o=-Y5iFz򄔓>'8N>M>%4J>sSɇN[ɧI{xLD_ ?_鈼^.y'B };qu(/)(7@>Z -={B -K=xB5vB1PDH]n%su{a%rv|%@9eR̯aL8I3"A\;`0J -.hSfjap~vvs{IsY6߹+~//l\XM߅;Mؙ9pc^U;aulʶsDS;X9ӊVo36SV Y9qg ^f-7devY}8Sn?X gڻ4FMa$??D%E{+R_El=.9)U756d`\e=yk7{#_.t1kjJc,2;['Xɍs>FSCu.؞?xd~z& [ h0t[ڹ=waJӪw.m"Ix"/|R]7v'9p˃e=Naa>^G.XAi }y:o0>;x/`䱁g68CER,_=XN.~cr=SxrX^BS##7YT ef6*L++l>&ẝ| -^u;љ;f/VL?- ]_toP¦ 1>.i;Ŧ:Ѽ)^|ˀ[{JXڲ0ɻ/}m "xTw\\9*􋋄̜5O޴l30]wUL)z+:_ϋ0Vteuߟ7r0@u+n yȹcG-:(k:3gi<㏧YLZ.FJC>_?j/vg殷Mفeq=RNRݙdhTꇠ?ʧgm!W*@N~7,7Ըի1滐Mׄ.%%j - `F(B>xRnr79ٍ)I{Es~ csr*Bo烶xȫj)ۗ?V+2ϗ Eu$wZ] w5gmd4[Z` WC(۹ d5'b0yT膧[ǘl> {ʊTjm^ѹwT/tSu_ s~yu`{|%Ej=1$dE q^j9n{ABAa: _~?Lw{7iV1:ʾJ;"8{m? -= wTVR?X+io&R{"Qir6ndI?M`"?)+T%dI^KRHxJP?`cp*l h |z<)u},9ZQcV'fJRjl{ލ?d'ӬmOWzINӁtNɲ D?îP1Xf yԵh>P/hN'kkʬҢ1ɈI) -ƖkA,թ kbsK"8-ÂꍎhJGA1>CA8pZw`RNԪ&:^.aV Z3qd6rԌ psgl#:d{I2Z*<{gu!O꒻>;pMBtf㩜Yɢ}OL]G޿BzM2 ȔjEOX8z12ym3]7֐r?٧X4"{.>~&ka5~mv~L@>lUh)TSP -W~sIn[Oz;7Gv?j3؎YJ8x'lSu!wu5%aC|[.'A K~eXdJ -#K+`nQur~J[%Z{3\13+yg1~Q4(,ρ9*4/w,:eeȥbpx]&߳I<+e֖e꤃m' =7&z1v'J*¨WDNQWP[iyE1FɄ.0VG1xkU͎v?I 14$22'\ -[ "bkS6ύj(0q;VW7|9;kËWm>.5|XP -~s/N>y[]E$$Ki2 "O -|4wq?w q -I•Yk$ mNw -6a -!0a/=GA=Ilf`$`I3U$Iffh0d\i ?;,nP rLN2#1z/ɻw}&i肨bw_D~ ؂&JJ*bQ@'fp{ _~qsEH_8O Z1 ( Iޫ\!yf&n?[]'btGpKq_ch}Z=}5kv|mP[kf7RhR^TlX͍#l6&#:/Ov7K2v3W1~>%1~VuDQ'$;6}o2+]pnbᲀK_~~pp3?a~"~~ JB!͔o;i7x=L3fwHBNi*a8~Uyڟm2/~l91_{|a'<\lP4:mw1Vގ/aړs.e?'ii/J'i&c.=U5cظFnR44 ivǯV+-uX.;-y{^? H[ݕd]op]+'yqk[㹍$uB7h,%E{Q'r?Z/@!Rm\uNs=ަC=j -עd{gu*X!ht.ĵ9-+,/3X򉗬ۈ FqYOwy)΂}J8/?{wtX|<+:q WzQNDGдrۖkZ9NfŸ R kl:n (j߿4NY;вed:/Os9ŏK.Ze-|CP1>ðCwSf :SnR.$n8J+4 PpjxmtdR 5̐㮸;0MZ`p.|!; 617k1+J`8𷷔VЃG©6^V^sfQ6:-Y'-['2Хx܃ss /z禐糨^BMS:I A V] pBw ڂ}Vh=}}h/^Zi>IYqrǝ~@};>?'Nߩ?ik׆ dGvBԥV:`+ !+ -.E~n21_Hs*x* k0TSK͂]q{uwe?k!9y)֥ȳC6r\ZzF=߂D!o̝E3O5fpC\(?B[3-cy.ڝ>3ÊEcxN1~X=]jtxIF#'((޶)%M{[Pa>p?xxAG4l~W2뇁yܵghN;-*pw֜[m@ Dp0C]E]k>YWyNW8-v)O,Tt-wx  >7-^+U75A<Hfɾ¿?ntg{V#dp[~~ھ{T`\4FYCoQWWr2 բQ0u^%g*ᤞmń;uFdm|SJwJ/Qgrժ.{ ?}xU}IDg1e~^3NUm?DBN}R^%hybi,<3~N]lzIcF=:OK>m}oL%~J-Q-w]iah.mWe҄ig&45sX+TX3p;&ΌGjF7Mׂle{uuKQFSn3l9.y.-6K -eK_qױh2G S-cTCΈ5 -xK!qxj "th3}br΃w|evb4c( -dǟXļ je@?p=:o?'(ZylfxMoL{jN pEi)ծm^p*ArRH -xE7;4#.e\Q7ȧY*R 'A5m\7l; -ٮDw~O֓nȜT ',aDݡb! >?,Wd˽hAJV?YAsmRe9|"eK@+m#vbUk -\2U]))kã[Α&vYؗv}\/&CCݭM7z2t({ؠx7Il脧83"s>K:ZP C?O;=FbEcwZοYRiqi:Jc+UC^qG*#֘:NBOo~nDv{vk8.ŏF#jNa{j4 fLF弚m*ʣ$k6pЀ -'su}YmںT7?;93Ae5g(f%EvJ!uG,e<J`nAÍJF{_k׶ԸPq^9RĮ"lE>PJ9X˓?{ћNU̞ se]mg_iPoz:N><؞TNRJSK/hj*7tm҄//K|.>LqjX$b!_gd - jvYzD2濃kʃѓIo*Ot_0^{4A -ךOJH~&l_>JUK>/g5X|( X|f.py!py1=)L~N_f]d -a2o*7=Tڥ֥B(PZ)elm++^Wmn{a5KatTe!=~`W"q"3r [a~hBd$n9air͌!} 7jj6:frFVpi_B eb"1DD5I -|ŅATz-@AtqB46N }G>T0S;jaֲȥT>HK[g)3y;27ε߭T@t@tThyҁUg=t C aOߙUt4xІZ4jsT -FQQ x6US-Nh'ZO@Y7{X^Nn$y$>IWTᛃewx}. -0@z vp?=[r}/ :͓w&)WA 7a- 8"`=](V+#g|%^3E%ZŽ3YMx(SBɧav`YJsk@]xDAbpdžCPK@oO㏐1_~ .cߙE1yyH>*|?C1+@M>ymW請; >o? -?i@fLz.>Ff/_~?$ fg{)_(6y/ۧW_ɻv'|M{sq}!L|,?F]|G+fNxk5Nϫe(VKl Z]1QC}m/Cۃ^t6ܶSR(Y|r vY\sK|<%_kv:HuBqg%kp5w!YgݝNs<oXgzpC#P짹sPf/phgb&#lbf` 1S1r -%>?G|(Jqгf\*4өB.Qy.hu{R;砬v?sLWzSrPm]]Uc[f!v>^~tfC;ʹq1NIJ+'p$7C_s7/d)j>F-7қn=rّ J9*KTOi.o՞w9w`8s`%;i .J3i0UԼ8.W46˟evjIn `kͽWL-˕%Δ {^w|+Jhno:nz9zoo&2/<=i}8~f_vScfv1: +Z8pޗ+:q(EmaYXk1z#'݃rr3广0TY*Y5cSu =[ YF6| w/~oi/nR<!wI7Ⱦ9leRo1cǪEW{zεOߧgGyOwΤj foOfpj'u\?ssnL彌 k;*饰5z2ffC%?޳!VK FnPx5*ť5;U=y!\xjǼg_o=Fl >c/! Lg߻.͉zU٥zNUs٢rԹ-?iv\ݭ\jV,h\g5NE;!^fMblgڷXM'u]e3-Hт0.rSUnQ*-0~aŒM|nƮQŵ5`-TdհϳH٨R-||p\r'{p#`A_/*R#bN7[=[uΘ+m=Y/@ lrj3ݮvj[b-gly3rw -[H)KDSV(~m/-N vu7hЖ֠dK&E$Vcg.N5ܻYې~UM &S:zW[ZF+ns_,P.)wޜƫɪ<Ϧt>tfYˈ"`~Qƾªsă=` Į^gF= 0@BYD꽂bzKkW% tS,P_;hh~*z!~La5 2 -EԺ\^_6ڽ恣#s~fF~-8I}(Y} WyůӗYw8|]Ny(GT ˥W=S>e|}pL9ɌTȌA%fOSvsݏ j2&-گ|2}]ȧoB:i#o9xn.~Wg:ݳYwi/3Lj/m-մyYJ_/#*|e/Š)N} -vU%rKz#y>'$!` m碾yFO5GCa w#+3r.Yku0dt., a bj=b*GswmEOc7ai2Zx3T뵾=}7 ĹEurSiynVո;3Wᄚ|6KJIZbSFfiU֯tҳLtY@^Zɚ^VHCiG.h)"6,gGzrQN[8< ,=z۝+)(}HTkL͗CkZq{m?0;aDg-'Z=6x.K:hpIӎsグh*I!lĮ3rH.n@M~|Z$i'R,6ɾ^{;qaZgӺo^4ϵiD*B9ͦN~S~$xQe)[=t?4Q[d -Eᄄ QT?;Ypsq݁R{[ -wݵZxk*Nsj׌{n(E-44aN h=X= taݭ6KG]xkݖ|=,rf7ʠ́+E ykvKx,6qD%FVh$Po̓¼a([ZZ^w~_z)UUuV(U obXُ^~Zk %rDžk^dJҧ[[\׎m~bL=6]ꩆtATsP Vn<ˍ3.EL}@WŻ=C|XD~q'_zAC6ԙ~Ke{%ғLg!f$*wtE:naNœ],&`ě0/,Cy9ۿ>[f?* Ԏk -m0a=3FwVsF>ZIxorUp)f"fBN`{u GdU CډWpnChMmfdlII[I6ƻF*Jm"N X1?:sŃ:\+D=" -D 4Dh ""A"ת8ؗ6dKQ\e6z>v]ʗt+Fn8 "+BdȲ|R-'{*DުD}~Qb+5 Xo!j jQ!j!jx~wFQL+!~ڮv[To۬WYz{iv_[ "Ҙl`@tmԁh%/@q?v*Zcm؁rDu<"{bvG*-T  W1V- -iVW#-Ct{x+K/1@[hY$imK Zl,.uB %½ӿ3[OW%IWQG;Iz-`sO&lg mn]8I Wm;23vq+grvε$]$EsDX r;"_ءA~Â3` vms #G[|Y_ +?.৏C=1A,ehaJ1{j0 %u*T1Ԏ{ّ~kpNOܞ>6 ?Otu/ۛ&$oh"(ۣ$?G7^ZLoG)aw%q nt\o_mzEaٸ8uЗ8\`yFӜɧ( ւ y8qQp287I)w=-^ k3@ZUo[z;zn݈,Ë#I҅z0{O -G ⳇsMɍ,̽qwʜ73?n* 0yP1r]=Pk|{4w8~(9Bm3iK:`=hTZ rߡ..^ ߃%bۿy†Gk@K)|g.Ւ=3^^]cTׇPJ:CǾJ+O% 'm?[t;7[p*m񭃲]W}Uw tqSv'ț2葐#E -_z -u\mx'z$G#_]7F>wY"Zu=Sչ(eVj`Qի/1m/Իh/ -bGnLuB%f07+<=HKI!+_vGR q:trA[,%7;_תMuR%IEGo^?]gm9ߞzwҬl'So5{]m?>7$86 -H3fZy#qhei]FۆVDVKz8=c;˙ͷ?Tٜ:A u6xgAOi+nXWC#/L?MwtYar]Nݗ7YO}9>Ncw<{o6ґѴцLۘk!+[ -&$YCN\ĢM42KZwQ/Q==&Af%ͳ$/`fvʣsջ{#byŗREͅ=nZU; d&jU;kxU/-gh+f<g䌌(Xtk$@K.R*ͻqѡm=Wn1S)zoq%r<4EӲ2gGׄX0 -Xsli!oUT}3G%^Q&JgL}%2j-D/@6un~a_(/`\X{u"i'EgY_yN9AN{'$ò6A_)g)u@LN&~pe`R2pq)^^\qЃuPW&E&WHa҂aMJܙj\#gCI {eí;c]Š+ˡ_:\a."=쯱^𖲎;0qiAZSW~r RD؅!w>]Es°JՁVCc\Ow%!YbJ',;&"mw}j&䱩y,!>ȯ 2h&n>NW J*|yWbd3}kos83\3ePסBPQX ėuh?~9s[HH^ˊll ~aәX .\볔!zBQ#Xzl$ .+zgv' _v& u1;`?keJo-[]_.PbX0bYjA. -zTsْSt1F;;h^K۟ա'`}0_7]˷y˩v|y5kS94Pqev ki4#赭g* ڥ#'i(nl^uvn/#5|薻8=ۭ]68R]`8[kć5N_’z?l0cԫe_E9wDM7"UјZTq}NH4el}xR{xFfBw;BzWwyNOIͳbX@*x ƸJ PHѲb_V r銛I]_!zBН䛠1g'Yn /2%-y;n^M)gn8篝}״}\?thaa ڰ>SkLh(*#ʍkOZLބHߠQ+8WV%1ջ=6PngCԉF'x 7ʢ:V2j93Z]?^ahumWյȞRi94^Hr7|hׯOJڂ|U;O#3uz2-zfj ]P2L8R +5-+^\;gR7Υ*TBK!CK^s0#َZJA L{,]|ުMX%23 -|2Fze.Ǽd-Լa6^ 9Qxnfta#T $b8_D""󟽌 ;j"~ϭ2;u.<C}-Ǽb;? *D/o -Q~`1VmZ\8vT Pxp1Q͡8HKWS -O@Hpnќ袽\cf%8˄Ł 4+-he;+_X%'3exdSB9ƒ]4QRz\R~5rpp:7APӱ |zY@?O+`CxsP!BmȺBՄǙca˚4K Z}nD͐{]-͎0jS]khEɍ) bB[q?=A I{}xu u:Bװu -MӖF[MeuXa7׋-{5Ec֊_^. ǭmܛqi@D7=9@ ]!2@$.V rQXyl [<O_8o޲1V/ atgWےadH=y,lΦ;f 3T&aͧ =\얗)+t7nŞNrv~su^)/N ak8*~8.\n\4d?LֻV|'ov1 C=^ѠP)$}x8P#\68EQ {/:w5:ڥtqnGl *[vmsh3kzU ˪&4%hs#Ei%#gwRo}BݵFԼqFT ?D7{m Oo=жmisn [Aiӵ8cRYդfsV$zNWLߓE˛xBĝ.մŠ7'[Cg9nj| `(\+|hI5w t6% exM7HuヿMb҇vv>ik/ՙ/Q2iyDFmYkZ>F-WVI>%?ʱ/w 86u@`bu -.bʴ뜗xT''ݭ𔺳 -gµL=:jj3֐fE*iaOpOkEf&6ylQffc-.z5{y]U}雷ۭؐ#l1w5;_=Pպj93yf9X񼶼1=P43:_z^5ԣ1 -VvoWoӄ]Nzٌh%YNɛP|KY~᥉X%јk&xtgO͍ߤ8ٌ?}* 3F邘j#Yˣ)o[\6㥣u*HIRlI #qTV" 1אA/IXG/-@]% :{LXW0مg.>/]Dȼ&5U#9#;2Qkn#3J.^I,8;y!k;K>s2Wjjx-;.ecDN d\_>& T{I Wc֌؞0tz5Uvk{ z#J"(9'Q,f9G;g=ҳєV]8ll9 Kb?/q {7&¬1=*4׫ʼnJ&)˕k^WZᠺ 8^SiMOgrJH*V ujmJҽXdm֧)Qh4}z?VMdM -{”2,a66LfnvX8KUx`"Hg8uߒ%3FWf { >?VqFKG]ۻ3Tâ?>h9^u~"m2ґ˝SX5iZQoDžZFb{ۨGmWeXg7Wz#$G= U0[+O/mmL^}Ss(nP-lGCN>)d6(HמhI\I&^ KW[K -/2_ՌD?cq"V^x7]xXxa̿XZ!ЦB9;OB9|j]*HVJOm#*(V&3"]_ϽZ'O#X9ǘ° Jnuvt{MIb>8tc`+?9cG͘GNG{/N/~tڀ/⵷cl=iSoݭ7bQՅĦUQۘ]ӾP#BUPn)Rooj-_B" KI5+H/bd93 /l~VI<\rYbm,iXbZ}Dw;?_N:*MVb/t3^;ĵJԨrx%u::6-qW|RzeM|pOL0g7<n1Hn"UME>/#Z{ >i'%6uu;C]f^Ѣ!6$;iU0*[Ә.J*W­2J9Nkn8CL#3z`V6R7GR%d"*x.[`?E.}}|_ƙTmB!\KOwllߏJ`ˣ'w/K`$2iݭPwP\JL&vOFAWJ2Eh<|J2BbQjψ*J l.洆 wvClJk`6'XvF -SiQZӗ/Zp -Q#RR&/'Ko ^sguy[So\šnŸBvSӐ+TΉe+ON9oP WѠ!M.rV9*cT])ʷJsB F^ftoA`ܬ*Zq_\QN ʫ$2n Me7*!ni2_V  b#GHkg-g0I&V{cK3Bn2紨%!R!V+I3a$eACahFi_ -־gF&88q>ގgL ؾU 8]MH-7%$2_Q\ dx.WΎr}"2t?h4 -y$@C1Ґa|A3qdEup e7H[-]! .ų -pxz Cr~9M`l2DA~a MI9$ -Ϊu @@ڬ~ŇWm@^@>n@(k(q*J!b"PG>P vdj1q~ +AɻUN\'6=foP¯_my _ǧ) Chbd~$Y(K萞hՓȌRo*dڦRgcW=B}۷?neRT_t{Hv~NOo)6oz`^wm_[}}TilǬh<֡ ̂WR8&b_Y?50F:*;?:8$is -ܒvv_P55k:ם4]h9k|a&ng~DO=#2>:/B5%鸪a{B1#֞k{Bۚ^;a|aFG܆.ӽ|gO.#j&ى[XMX55VʿHPW$$j"$@=Yu9|хOZբn8{wXtcd6:kfqVR:""brT\3KdVUɛ䵃e-vtIY?_rL*~`l~TmPkwů.euğe{Pέv-t>f40][ܔXI_+Oxc渍Ga987ߦao:o$oʯ;F6N_I| ݖOKPNrƟS:~k,+S=&{xNʦ;>1`&/9ၳ9B9ٯ2>G5Fb w9z7җx#8bwPڦJ29Vsqn}sVnr]iɀiL2;wz_~._B? 7q'# muLӷ5@O0SRXNFmYcܒ ΧDScJ btnd=/.O //?=vk -|$O7-0)4wUe -ԥ*īö֣݁p-S3G'XzX᧍ -חգAhP- 4Ԛ#] ]__ Q4vMk؏x]3nwS{^??V{7v,;j=3MMdҲ',mF\.*u|ZȮ͆`Q>.k:y]UxgATvG:vF&q2l/~ˍ~˲Kh)L>PDD ]p71ZjoȰ"NG-T>SwZ\k|z=hv|n"/=wmcPǘ5{VVذ~kRY~/bUvE\0RquK">7ܬswLNӘUj}- ȉC?4ez qp28eQt`֫e_Yް~ޜ)VV8C[Skz\8&zatq?(zƓk6ySms+-z׫ +w*\keɠ`;ȈlT)ꅛ[tj2μtmO%@c0L{NkߌW׾~Â+K,L#Uscf)fUj櫵Nj0 6jJqb+{yym\<+U*cΰ[\~Rgհ'l+Pn:RWs d=ʆ}:25;+&Zny Օo [)—/NՕp?mfVoQaVzH[:}֕c>wb54vsUu>}ug$z"0O3^G٣]SWUݰP]!%':" ̍_0]f %F[np:]C=L1*VDKwk,2#!7 v5)˨hkcU D3[!IK\fMjL^o-;x;K|PpZUs.Dɐ6l4ݽBUrT^tCzl70>Ifgok㵶xNZuI 3jǔ`P Ge֬ZR{> ;|A* b0B4dOB,$dIXBHW0('Oޛ:W^jU#L2%YS&(*>=m8Fj ӳKWB*TnIx^+!FU_СŐT_^7 n^Oy y:bå7`9( }xdkӳ ,ќ5'GjKwSP碩F&aGnF+sfⓗb^hs>4sR)\*^,^g1#3=c?';h+|Wc˚yuK땛0uiNYuAܼmԕF\*#¨ۜ -[N6-pձ/{/ñMEo;:Y";"DzK6D9znZh~F+:5I.-A`}E(, dT4v1#3W]mĉ o >O7;,-fnϝI;7kGhэ拁i"ruI05M%XRVdRmAIHJjDqdH/`Qc1e v,CǬlo hK: - 2rbZZ +3wwS9 jyun`04ȖҝVY(i -.Ex][9}%\υt'3" -[VoW2J-,L~Rrĉ3PE6O3v t9e9hx]0XMQoX=x0g&9zf(fzO߬{K1} _|?b_7->mne}ZJ:N )C(5!/Nz15QGk׫U_̸ڪ:xmDg rUcᖹ׃x݉?娾f/%ybtKӓo~x;|~0.'k?Bg -/v nY|BQ~c^~h(2ۚW/;~ 9F8_,G;yn `iK^&uVW]\2wa 9Jڄ/d|zA5~? Uns ScӍ݂uDtovflŻO^UG(1 7[>]+-';{#yu/$Yhȟa>uǹA.ӺA6 -.;v'9{c>9:ظ3O5`dB8,wcfFm0?!;`lvr`ƒy/4)W?ݫ}a;)m9muiFKiCObY~4Fd+C@m Mi74%O|~80>~fN26~az-Hpۻ-.Suvi7ʏJM~s}\\, -$r'Zl<|MK<=0ҟ+2Ϯt!B/nMױ֩PCi7wݺ[3"HM#,384u(6M+czWvWҝvPuܼR}uxuN+L{Cmy3i5(-]֭3'[s5Tr~hA1 Kxc}Xnm;niԎ$⾺ u:˙wQ+ګIYz.æXkb^i3S_BO3A/xE>X-(}Oa-5=\.\y|8Cvh/8;U1LZ'y%^-xXKǧ[45/f0m4vP3q]PXWΕ^S׆jMyŔ:ճ>6owJѵM\LjɟcsL*˻8=ifŹ/TmԅkF?>m?FZͷ90)6;oBP0קRּc&vwnry"N&&6*U;b͊pܗR.hd5вt΢tqYf)[nF&R h6lWuru>}iuUTQ"x 6>5V`W,;_&[i5vtm̻BM1O1[Ӌ 0xe}|io,o#(]DSU{1ΔQ-Ck/vNawqA]'VVΗcޓj:T fK}ğ Yikȴr>V8x ~z+I^+ίH3˴z!R:oA#02yOүRM])及9Ň|(?4^ tvggLQՏy<oNuRna 95)QTyPsscķ -FfLI[EO fHu˓JP׭7_g /SPrH>\Qa0xLԢ];Nm{ЖrUg8ʕmsOn^ jF|xI`N[Jur=W&r鬤ߧ3F^}fDiBDDNl޸]7Lzg]rcZ#cn%3.> tOABK]Q})7TӋ[tX8MTbr*^Ce6[j$!&=Db/ !8g 7?98\siyMWKf}}f}'mf;>stream -+AC0X0uyUUbdE.v vÛѐN?]vP6L z߮t]c4)YiEITs"t6w/0&U>d| -eV# ) $',#P;rrױ:#c?ejLϹu -yShGIij b?BD#?}(ѽ2³)tY5M H*':G'WW?? (}tϋ4Cj&u>kQcN)YꮘiIl`t1})C? -LX^%, `j~ -ۯ ]Rg?|ɬnW7wOƏ+F>9P<:B,|0̂N!1_3^m3eA彎ZvU "Qz7hb1`";Na߸gړ Ugԭ}̌TJ#hZYjw{QMDvq<tU/B1j( ґON@rO > :%@tA,M37~c*6dWGF&qvTИQr7e1N΁8*v2v䚏lO\PopyzgOK;T8nP=BԬjS4׀K -PQԐI.UU#@ -}.cM3ZRBͻԯ5<:ŏ.vXdJUn LugLa~,@0p \cC`5@9`Zq8 =|Q\ή?^jzKLX_5`G߽\6o}Fj Xah9`;`, ؙuF%êv: eUW/%CQ`!̡D<`ɣцFC'spgpaՓ#EܢO} "b>j?,?Ҋ'':E_C\2w}C^5YVÔ6=*NLXEISURC -CD\CׁJ:@c 2Cް -HR@;$Zfx שv?9*skN^WO6 -&FfG"|RqJ ȸsydPPKmgҪ@iW@ae@iYmH=hPxt`GܴߵϐuU[5.+7{ Zu6ƋL{&@ U _ߛ8%xE;E%ER؛Sg.>H*Rbufoߔ/֯P{%LUBjs?ad1?slڔp?:ܼ/BmkUwWվ] P _9:_*;?_7k; -rI{52UBFۯ#ح}| s{%rJ.Ϝ/&/9^J'ieLjp'hi4ϸj>-1./\]FAGA7Apk]VX\rp9^ΔG'i!ϏFX[i>7;ِ'w~uq2²Gr" w^cɻ,:/Z⁺_̏] -xfyScWcg)`QQ34nlܢh>ӹvϰ:kJ,h8,%D6܏ {#_yIQ޷59<[n|06rSn6Ki<ǟC-2[(tm)1r cfFgP(xJ E{ 'aק}^r ?Zֽw+>뒶 -toLɮ7>ڻ{rJg0,eVaKA%z' g1̍8.AZҚnʬ)C0ѓ//w݊Psq͕_$,oidg.ŭ(CXOWPhZ4A;;v萏*VPns-A@f Mhկf>P^/Bq#M#Xi[հ4TVu>IL Igz{CP+mn) -ބYf[c  ~zN29k-bw/VGvU+0zUZr|%Za}fOsҡ{m}z -;wuam wn~0K߷Obhw_5FX^;nwmD: s3e׷EгѨg910K75=̆ !ǵX*BZk [\Z,M\*LE]޵"Jul[+ ÊUG؞]P~iƷAswi{Xj~Ⱥ{owA-Y}3n?3T!8 zxRT-8Vp0~7d)Zks/β1Ŗbcwboj >snyM<+u<}A8.kst"lQs%Ѩ8ǩ~\̻4Wlч®tnh >fL ~Ln7Q 醸}ih WښŕZW_o4y-Ba}nH>)= (`@>ުK~Y%OVWMu67UV9{K'%vѩW'm <'<*~/fZ/D FZ";§pR6Ǵw+=#c(NBD+?oҾ ' eӑ?R@)<yoG2cW0ȉ"s~G, H^yk[!jv 1L4o_wm^w5qrɗKc>V>cf^) -mFLWtfȚԼMkhME,sV0bL#SJ!속dqhZlpgg8ɶ!%7Ä\6-a|j>ig:6bkv%+3Uo v%hWK 4gȕZOϜ%>6H6: ƭ,i;')K01/j0f_#u9qoʶ2 \Ky]H2<Ï^êeuRsf -JL5[ȒC-^SSTlmB~08);QZvBi>Fx[<׋^R(QT¶fZ%mѥmǥɹ;gm -kԋV0nf3M/i4% -=n7Wcn;121adXackӫy&ڃG8H)Y^EQw:ls NxWߡjjU>A/siY|#1Ʌd]"/Y胏h~$ރPj !ڸG@ 2asa$K6 6Ei|ß 5SЮhY"iT>Ts߻9=>VeG̢*8?S?}St}K Fb\Kg Y %*rj n{2F8:NE}"_4ޝ`PiWRvki0ּ 1dKHr阯7VMbw  [?- #  X.Xˀ<1 2o, f [, =ʭ(0P]0fs[h(ش?}=^fjpVx -PP -tCl -KqԣKuЖ 6-oWp;E4h/HqٻuT;Ph$ DOSr/X!d{ Z l疪ڭ/DP$I ("Y9?Hu -c2ɨg `;Lӵ@w(}}o晞0Y0n4`!`k3W`H_쌦,1?@LSn>/usez' UfF -$3il€Y`W `Cp8UM9DKJp x0}ޫ͑w XX>AioAs'*3,uh&_/ 2rHԮ̰?Rc`wS@*X1"@4CbOh) xum9]%/Aqߡ>q۾gNV} - t|? ٬?*WN^N/ǡ(bin -H0t|P@uPC(]E82g$VnIp:DQ>z$db*b~ݿo?N+ڻ P: ԶMA\ /n@߾&Фhr@SsJh&H=?i 1D kMfʙI}s~XHs\} Mku[z0?2'zr":&a#X_͈ͦFp*mW[X+\N;oVuoْ'~!,-?<=tOJNdtͿ -mͤKUNcL?Zg7\Bx>(V^'>SǛe}̣Z@ElhvlVjmfbDȊYה\~3yIl0SA-c6wGZ9v g?F.>nl&x|f,6)C`O?"7RR3}a1U68UnԺel_K゜gjv˲aMpL];fX[\z4m,쪢2*X AF3{nv8yYޟ.8Doh"Ԗ_茋uiRFV\ٺ7Dh謨AyPٶԒqUl~`Ca'=}Dna;m<eլT/+Wn`M7iY -&BtnIJqf&Z-vp S -ippC酬>D#YWSOъVxu uFjv5[+*|S5uT\+R0J %&3RlO ǃ5GmOYaiq&ųXٟԉl4}b$Hg5˔lj*JGEey:TmTјK$1gƈ|d p&ƈlA7熽zmzk#%Waro_ c}8MuWbhm>U[Ju|ae2Lye)ϛ?xb`S{!'y)ܨ:qxd7r43nK]tz^2*E ^س1Ǝi`W}rf'o -@:lJcJ+Aнy| -\<;=5llyFtj~I#:T/hc:AS:zymoy[O/4ie7W=}~n}]йB_x.O!2SWa+vFsG>pf*,`MoDh@'7Egҙ *^d8ۖ^3^srQ'r ⢨GZzy4'? ֹhYᰕLx]޶r08֛ҵrCSo,,$ϔ[ufwN*yySo>6Ƕ(qǘX`Id *F=-22AFqHgRKNap2xY - P)s2,X[R&{W|~K&d|rTGWǴ\C Qh#X*9tQiV'ZbV7'h(0.4ډss*.7MѕOhӨh[965=VLK7,3-}rl3˝yt 2Zbvm5u=Gc7 w5m]R?0riR]_48e/Mjj7u\ -xUJbҩ/w=.2 |, >Z=ٽ=$eNig/\}A:JG^ax+!~D)D!oW`%~tU_rѣM;c!isO)C ϗ`A %RVЃgeN 2 fg.#XdO[鑸Ng"M!BƟVAX9' te 8# ๔B ;^ EcquB!Ih}|!%왪[_RWFN>ҫ.Jf;#` mwB@ vG2b1 @JS@W+ -QD{M7%:_HPjTeR+E}Zʒq|ݻ3̷51|.gg#4 օu)BϢ 6=1>M#*b8BsPX (<1Ke@'u"/R.:dJܪ7q\ɿjL(T:*{qǿ%AẀ|_0A邼 _HȌ8߱{E!(C#  ⁕sujmQ _(nԥ4;_Zn|3j@WF9YQ&`J)` 0e)Ƹ rV_7#<|3G.y{S*2J -?BGO:_+~ =>% XB^Gv5Ap\>47>sN569s |CXwױ,I=nsU̓k"@hO!SwqT_; -oP_ݲi1.m xmw?9ȽcD !%J1a*ݮ61+Z:zf"2^tnP7n߆JtOmm(I?7Hq 2@ - L 9]v F>ZwBҽΈݯe":z.kjڿ5jm7$w+BmW{5}ڗڱ@5PwXA etkOrL?'eSB41(F1fcܕ@چ: ǧj>~@my6gǭtnfohU7&E1֨XeDM,u8IFrZ?<>ߑK6Oܵr9Ix/g>4rfXoV7>?j$ kufB9&z?jDMv0PnQ6e&YvsY/u=GCqv_lY6jf\K~a~u?[!Xigp&H 3?ֲ -J; y'../S-1官-_=z\=>G͠Z_e:1i㭳FylM6hj!72gh7hZ9oFtzd˳[-n4V٧NO#FvS4jb=u nemwV/>O?;덴¡ﮍp쪡{ݜOWKmՓ?f.fqA+suGH'r&.xa@AH~O^{{t"v:tv6DcL{[]K_u$܀ֹM[9|9իzUvvmշ;k_Zm4񾙊V;}ak]d*N|:nvl{ `I+>`lPZ}y6Rh1-v5o^+ <;\nj.W?\:,wT3t :/wun'Sh̜Ӏ_wG:d۞=j㚛75U=u]mQ9lrrXs3 ˸{YLT'B_|g}C-6tAЀ&[׀ٚKv1y(`c%v -zr;]1;>[ݧd"^vch7=|6sv9Rܤ~"٤#u63kInLpg+S/WZ.B{̶N1{W)wOy Q䀭^XJjnq:ljֵZox)Jwyw&l\_P.s.n!LGvh8t_iQE4C'!Ϳ3F٦K61G)lu¾T j50GgitJ׫!匌ޫNx*pYhF% -^* x,ԼeVȭ9Q)FՔÜ8nZп]`G<7 70~vi9F5[9vJeXtU]=b5q)o ϐKnZ_>]k;,j&~Z%q0d^[5kv;̔F;F7R3*L3Prh$qt'a#y3%凥x4Xdxl)+5UK]?ؕڞ7_JYvh\L\]߸EߐjO&6k-ݏK~ELEMJYJ96e2rz-אh~s9y IH Ŧ++g1>qHvs&<*wjCq`l2Ҳܑ/z:kZE*Ka`bu/oM&Kg~؂H ^r]'ڋW;7ԄgNRN ( -`$a4ɓeiJPcˁbuJNk ] -;_+= -ٴ.ٸxPAuttp9΂ !T1{Rk-.;h dP(zrTumD*װ)vf9>R"7~G*4'_Ԭ S%=Av *~x81|i‹Q{r;Mxq&)na7#D|l_+|笧~Pz(,ՐwW@)@L-eUu< uO:?\_?A[ Mݹd9G u+x4:O3}Ah.ݏbk _'@cМ ]n_"=Z1s@'',mi6VkS=Rgcܼ< _}GDeCKDJ^ !epp=լq$Ӌ1qRz.`2`[nLfг4"Е#SA:_0 )2*4$=ȉ 澞DM2G:e>t}i -']B!K@@q 9}k|FםO ,x ɫƝsYj^3)#AJ'TD8$"?kP Z_dG )HB. h șlx2zS ju?䪴(a6}zvDx!?M~"юw(Ip|ۯtd;7Pa*y*M@"P{7 X~j{~?=տz%IFlh$?/wz>,UI=Fz@۽[6Z+/H:KBa$rh_9LO`dDMo1:ST.֦Vbo[jqgfTOAbi9J˞w㽣x K_ob]AOC?)5o]߽⭠y>^98Jsvwʬj1`æ^{[{yvz%a id}>mѝAw1_u ~٧RƇ1r;io=s;눳r+fjK[UO0g?mό+pS]DdUH&,7{(\|1_5F_j}}`wmY E4ѥ:xkئnph_ -ܿ ӿq Qsu{"15+/j>W>vЃ~+ȸ>؟wV%WSposZVj +KoXn DٯafG=rn_G|;~gtɊ{ I0+%jy}]Ohf۲M*PZfڡK~Wgo7tm@hTv9;Qsi!]ݶ\=t)m*|&JP(*1…jc5uTjq驦Ȑf!;6w={srW>(UyUCt]A+T/f1*/GC4r\2\Q1j3E~,B\K!hyl[գvKQ%KKВ.s3@.me9sL3Ē>XŨڴ襳\t)lO!rNaCc?gt -ׇG}njd7vw[_ :Zj<ǹa3J&#lQ.dnZׄ/LaG.xiil6a˸&ԃ~Rzڠzk4ŠsC/l -ku.ˏ72p Dǖj]++Yƣm0bQ-.B6PL]E2r׻+!p+AsNR -Ged+FY^탼,:Qeo&sD< .9="k޷W˷6rբT"Ô[S ;"GxP?hV -W=aaRNټ -_HAƒ\)]BiKV3# qċ{$A\Z^B#ziBGZD-4[ql5\6Qq>hn' a?Q{"%젔VUAG^ 5XƧ=\78YU<#2w?8yCs20\p}Jqcឋ`(P5qR(çc#w`_L4ȥ*c<}27v;H^x:.6xJd+**['dkr=:沈~`f*JSf* X*YajzSpvovbPu lW#Kq[Ww h] ?p \-t.|ZyG NTwj[N3]C&b4_6ί/e>㧲xr-SeO;"C0S)U\v&7!\NIf(Ͻϔ5j0R,\`M^˗Z%| )悔s(zSȓS/M:_j̰UyxW=Y\#ԲDX:?Ի+ |K;)]B13ss$(͆|t8zR;MA/S$Bg}3>F=F}<-#Ap zDbShM'{ON g"*G];'E9 6Jj*q-BK;NA -,qm#qPsyXy)ACVXCj],e̮WL;Yd͈xhtE,LBֿw>@<^Vk& _( -|UA]]m -p}Ƴ\]l%}Em%]?xڻș=* !\TF❲C{#sh@ V]lZ%}a}o*.cg<6\egزd7va̾[XdJ2YOWN%SzCzMT%.2X9$9ILT/5nڍb_@^3eP&p|:rٻf)3LHY-2?h4> 0uRai۾e:HؾTD{@0r -aySyC{WM(V,lËZ.zKxn} -6Ug0+S'b=cIG_-1[{Sr12It.IuBi}4.Jui/+~`~tج F+qګ|` |8 ipib0D6qLR^1d;&S%kh+4.,'?.IЉk_ٛu2^.nbb.bf6?]HRQsL)"X6F*>ck<UΪMk~ ~782^`8Gև}>`GJZW 9c_B*h||UsejP"f#rYH-B8\l|7dJ@*5@P& kՓ=nDbZDݱE@n  QWP& $(nFZVKw`7Q> !<ȕz4ݴ)o[6 S2 7B*G<]BP+ҙ=HPBUB+ _Bd#1PTHsZnG -9#1-n< Xe*nk.߭ԻGny?yR|!؁|uu 4q16l;t hKIMj\9M)0啺g}έXe.jS*iz24y s+/|{zz8 -]l,WKR3`.ج䀸Y(9\`ns-U^j]dx6_>e[:8O$?x8$$ᯂڧ9: x/NcR/5oS9liS -BU槚9OSPp|ZIL -gEou&rozON6(A@M .@|q]9D@RKK$78?0KU{2s&Www8rh쯞i'JҀgJw#?ۯ6oz; , 5 @Es5/dk5_6&z%f2[Ӡa憽ĺz>U@:>6[do$nB87 -tҍbgUJZ;`^+j#֩D,~c@:4@=ѹ:8!+*Le~OkIy[:]q D};tRsZֹ![|?pn3 ź޼\5=kj_Ԡ^6~c]^\qW}X.V˥ ^8yIhDJ?`V0kD $X!_#m3#N䡫ڼMu[itT9L%x68rוs򔜾J2,TWD˅pF5r`a?Y؎Tx_5}{5׵wT .&TYsШ\PL 顣4*NuEdyO詞V.n)lõXa4x c(2"u6(.a8e*QH"UDT:2GWUG<|stt\)ӴUbƮ{^z?ށrpd'ꙝ>1r4cjVZ&9]F7\ÊbI5j`BD6P24U2J=J~%'7e\S4}iYM;ř9X .Z,^رU(dUl+aA)ԻH6'kM;?p܉7ulR@MODk9Dyze,jq.Vmf߳NUG}.zЪZh=ezGJ12J֮les)mCZ"CċQZ5#WON~}-zq1q=w٭:EEuk_"AEs uz}gtvRUOnNFTJqx̴LiI7=gT;+ 4Z(S'g1ljèȃ^٪)Jtٖ'}+y|rYJf*xqJ*ŁWLh pT2pmy)lT-#O/l- Ӗ yY02;]+EZ)^5{ ޴4g#^IH5W"^C\}@"g7BY -^|-5ǹ%q sjduX1Xb`,0fzA<_A=*ym,2u0NFm8Hk1^!+˓š/U\-߶HӐ+loJQ(wܺ_[Fo?(w^NPwfQV!)ƚ/hЌ)ը)':5q97R"ɗn0peiVY~y [EJje4u$"ۡE:(2Bڔ:Hһ)WzkϟMq=j9znm*U -xLX`Xs x?䢎 P%}LLi~mxu kV!g Kו5'T4].G[@<c;Ji5ƮC8LLe$!̇ h2K!ηgw]r_==L:n}YҠw :6=v59jR(4⸐)n &* c?=6#CkۣfbQ\v=7#(O|_xƩ+`AKavzG[xXA14wsrrI/] )Xr܃CmrZ&[:OشDkP2*WxE H -8Q64 -oe5ڞ )nXDo=@uDv|S3 CJUPSPi=\> ҏŁ:=͈H[b1o2"iT|0x*lYIf)5rGq1 ֦8@Y y.d 3<*upݷi-PVR7`Ѫcx @D\-9˧Ė>%V)mǛ{ ,+ck&heRRVr݈#ʷF+B"'YP䰡IJ9sxX}@ 7;  r~#}AȠH$p)mj-kCծ9ErpF> b>v)F.Ne](orUҀX @Q,hKPLh9;bUWU9VD8l)חNP] -|7[yO9Zl:% ;Z7(G<@[,ZL@gK[Qh)݁>|,,~} -#5]_)^Y@L/Z{'⁅GŁ{I "?=)b?oU/O" l -XKPCz*`ƇY6#⩯-x~̛FcG|B,1``nk00 Ll$c -JrceġX{I!jځ1ɷtO6`y, جM06_!ҽZ p;p\e\wvo?,= Xjx+ymԉ(b:#c撇(:7ONˀ[TV \c -F:>KMj<zh6 TB9@@XChѡVPR)3u>WmH&,VB<9 -k3 L-5q\ -W$C4(@ZRK / 5ZJUKz:IoD)~zȎۊ<75Bo%'.=$7A#$_ϫC(@R@r,!P =~5@@L0ty[,Z/>\ʽn4]xa8fj Q,FA MJtnOzCRxntߖdam,}Kܲ[XXZXXXi#w51&uRrYb=?(!= {njYYmN6V[v]+ku0s):I2!9XWlw4#˨ }uV_+1%Lcbi@qaquW ΖFZUW܋ JNhmXD[12~?b -v;"v r9W}Q Wa \uOg9ŧM;g_qCcf sc܌64"NW> ;̩u7O݆껒?qf\wݛ&󵺜oW|-Ṁ[li&'{Ϡ&JeҎF-ԇƕ.yO.ӟJ!IwƆ:%zi,Tk]U߽EDZW/2r+I͖O+~q@ Sʏ:t<0wd%]'N}:柖ta͖zc6tV^z?e:Xf/VuU4ΧχXtx&duTtj9Md]=tKدǙjϫݚGe:`]Tg -sJaSדJkQSleܨ/תsn=7xQ&LKhmg][Sܦ6ˢauQէHeS}=ϖ0/NVnf ѨP0Eޮ;:ɏ.ܬ9ReKxC޲ë!I9>5*τv<©a ])1z?h189}PLlh2;:Yϐ(7+^vK@Ȑ5%Mθ^VA+sELɆpᢓA-N -C$-W=8$:mCv~֭[<_0>ӕ2G}L(ͳ[(/4[$wV,׀O -{Bm4]$y45ƼW:kZP.!y 2HR. L 1m?t *}F/ YuT_~R_%Τ})eoi)Qv-ᑍ ;'2`UggbzÒXFe<(GL&6#rM7$]5^/aGa5jmf߮pοL6kϩUݼvqZ2jY|iz+ RӧEZf0A\cdXr0S;Rn$K:oe<,NyGQ~W;N>ճup6 1 Uh6Y{=r)-VwҶRoluٽp更aX]L\{ vNQ$Ql8qߣW -v.VsLjh:E1~87Dzs+;Ѭh[|ԫ6wJ|& "uwfl|Ӱ%ZO&« a^L21x?(n *9ETc[M~8ţ򺴇2иMC/~rYwP?ƥ Wn-^ -3ʤlw- -:a!!T`~Cy@K.˼jҚX GB~ ,ߍeI$~VVs*'fUZ7QAMԧ0$9[ p! ޘf^^3!]⏰r$!Q,4˱_ -lHC]įb> ^oODDVrtpATӨ. /ke^HwIMp>2ȳWh${Cl@X,t\bjȀ|]m@\,Z,6c(Pqޗ` >ao$ƟeI1`niF%inٞ>i7$]ҸxpXa0<* =)SB2 DTjzd2FE@sX+h, byJƇ@>PtPP3)b˭[E_Ƿ^P,z*uTha".e&8:NCxGMp@C -t n*7U q>` -20Eg&U0;>(=p܎ tm3|cGZS -ܯr:.3tSmdxREc<.cʀ`-yw˫9`+3 8<s>u>CP/nr<}Iy'v:fR#A- ]WYu)]\mԪnOƟ/eoM?3"xrT |:? # KܢgKC_VOo';R(̓dn{95ZN9PxAFLO -IPru87~`vItrE%$D]q ac< ;^g4V|{ӋڦKH+\'%}uR_pb&jaLk@\ (l#%^Ɋ_be|`Q.\= K✎&h|ƿ!ʿ]--K R7|m1wo6I}@ק@΂Rv@{xӖ VIwoιTFW26" -&w*K(_mm7!o_jm)& nۂ8ncWEW`WM⟬$lAFLmn$ Hʟ kKz̘)w-WZv#ST>DZIBb]; -lšM dF)Ms囏6ݿui|k<<҂sO?8O8`{x[9rnѮ2NҾ", MwT߻x$kMߘ`Oz}i~*E/s(6zm\9^݋NzeoibijW؀j| %TNyo?>: -k+|xoQxJ~PJ_Vᇧ&[~hV%XF]{톋H~9\&l:>(,_{C#4@3zݥq*;%zlWϴujd/-Ͱ |;P%ay57wCǧAMDTׅؠ =l|)w10E]e֩_Ammt)[>ΒD^G겂6䩷IrWƬNCT -RxN%= Q2FaaM$?h N͖^z4jq,YͨyxW)By*hNv$=bޮ  ]~;Sv:?VXv玙5*SyiC melU6%rPW?rU$eJf>AKҽ,Me i!?r>CuܬCܬ7bs3zd6iNY涺V'fA)'[YLݗ\뿚NsΠ>Gh ڟpqLvTw[Zڹl>x̿0jvS?7\3) (>d%FZCN>)0&N.Ass{`ߚx®x\ٖZ$|G}??Ki Ϩhq*k\ՄWURmD~Ю뮐[tdDIvRƖ]*[sY^nZe:LM%mѫi" 0k^djj*V7UVVU1*+YvT3/}45C)cm)4Z҄Rf8sD|ٺ?P2mD{~kaͽ|Yz7z,ܢf~%U_H0 ƵK.!En♸ -#VNi('IHn>I(Y)R.ڱ/z@/oX(g hmwzU.x$N-<\Ne#mchSQl}GUN}PNmOd)+"QZB~O -VP[;\LKuc d:jfVA&~h50%=-6i;Ոso}=zԱTbե G]ɟ -e8JƇbv?yasM-wyY\P5.HΦ'`:C~@GPvEەō*ISJbjI,WX|EɀRv%nj{<9~r5EiQ4Ⲕ -pyJ+NXIBx}L7rctyھXwt,ș_ Ilbϧu|x.ϱ}@̡K=7((KbegZޗ~FjV oas|pipH۱-G>2vee/cC5v C}>OI!뒳W{ 6S^Z `NF%LȦfh1LxyL6Vx,GS`n]힤85%y'RD)qnva['t`KǎvBMHNe6ԋBJ -LεEGJC -ߖYjVL}mhJSU<\*BB MvU-ORSJ\";;{B'GyK9?o~A ?rSdpNMIްuf*.KoD)9*XCo~eÖެHY2i?[gVyN -q\)PtgBrsI5AW ;j\c}t/=DMѦY0Q5"ԡ=+ܡ4`Zݤ6Z(!@d!)33~~{MPr-%UE0i{;o ._QGrADnlqb4wElܱ,b ;N``BIJOjvf0yLqXV%c*հ| s/4{SyNmB(= ‚C[P{J<,̲u΋§ B`̍2qLylz[mENtr{s5_5{sa;߃̓ޕXW#& -{3 a W0GWמ%Ke!|򱜿Y03~|\_j+wj1nGIӌAfzkwh)05ũa]CM'I֝^e/OgT+4N9uW. ;& ^BXg@ &k/O$ S:B[Ub Yv?t JIm)" J7nč{8 pެ)S7'-k[[W %[~7=(?ǟy#Op\ş׸B -_)Pxk^)Qz%?2T=>T}%T` / -t(ȣc@aW,f{הLKuxٿ)̐8 -?H!(lү!hzGqIcZ/CY&.30Rz\oĿrt0 %@}huE '7P_J /ԘZZ#xʍL!L@8X\MÓ[[W~-ɜ$|ʭؙ;lwrl/|&X.6@?U`ag7nuMl sOM@Ug[o!Y*3d`:())&*?k- Mro$`q@iH$Zb s<~x>g֙{5r{N#puV; M I!I "noz/8M,@l}4.P -(-̀|*@*@n6ZpO,?֣k@&k'' I ;N̆o߼ۄ&nQPc;n[Ѐv;@/@/"&bnxTAp$)*9a 8IoHJm[i_?$%!ٝ,1&X{-Z\sŀYOqnm~bl$#Y'Ѷqe{O<ӫ'7U=z*Y׽+?J4Q{RtK"s>^&='8t,oS_chT?J֠r8_@JwbO=879k'տ|fΏc,3ݎ֎S6w]~ὺ2OX;3;՞-'a?hBkPk 6a7ߝ/􄉆Rソwx^)e|<ޜ28VW[ve>oϳOל-m75#nvZBrIpSdxowx?^%MJvJphbMXm3_lT YXnyvFl3rLK9(,{mi{K?*z<ˬK锨ޗk%| ƽ]5L ۬%6ee&ę&xm!WJP~zhu%=]sl Qufzݗ]}S  S rf?ǪʦaTUɕNŰ$}nDgIJJtw%~^MXm%N$O:<%vY;z҇>+r.E.@˫Ű5-*Glh6~EbknV9쒳e+3|}I{3%{)&{>M`wcK{Mq)[\AgO^ءM̹?pM 釹YɻC&w%ΖԹg%2_::ާ5 -㻈MV?=!Bhw}b>Syx4eײ%Y%\ogK.w2b>I.ޤ1eЉ6P|(I9ش=5\֬,O{m-9D ,zA?_I.$'ڜG,v̩'0px&SNJpVvYw<8P3V|Ӷ?0`jxmlˣQ իnUjeq j247ZPf$h>9VQJA]!ShE:L@vYK6>f%d>uyCѮ.DN;ĒxV]BG Wr߃סZu!9:y6Q}ޤOyFcDl+l+~L2[sH#eo#W 7 DcCG^uW4<~P-p/MjXDwNoaYI]-+;R }z]=)C qϢg/*,'ײg O@x/P$< -@*Wh+^hA5|ȎG|gTueǍ&b#,@A*a]~qբMqsKCf_JF@{4g:v]'q_u{*"ʩ1|&Nr^rIBYPijMXKOCXoǗ!DxRLN -ې7ViŐѢA?6h6HL3z- -g7yd$ OVo+#4-gq"17B!.H(LZW@cڙ/BsjmÉze/hf*Hf=6m95 -rg.%Dc@,Ǝz;J,/5ukRm./Ao&71_ OBP,Ü9Wlל؋v8Jo{any1}?(\ YCJ>9P {"O,O$x=خaYc]bsEXp>2_cKV -sIm{3VS6OMpWsbHLJÈJ;^O̦!Ęv)lkxݏGX<1h}WP)\Rz琍۸Joԁi&W$l -ޣ"|~{PK!r4*u2rՒˤo3z ,_ XX3&[+5ihD݀Q .K <x)8G䣂Y\y - -~lV)90(8 qE L^.Zi5-#xFEJD|u]>Ƃ)8F| *-wfA_1?r9vG -6O"r_Dڄk  4@,@ ":jbel@q]>hV** n@byA!*7%mLPhc³2E - nu-q^F7)1PV e[U*#Hˁ()NLi ϶ޫ yY)C br=d[jBԖwfDMpb"WEs?gk]K>,+ٞ蜗bvқtiyOKQ!CcQɴF`JdV.bJ‘BX^> Nh]̐N3VqBp^x׸Nv=!XL, 2i֖Nq gjIȲ?ʈm3 fobzٍ$^5V/+Tu X,^4`ֳk[=k {;' -Ng~F:c.jK!|l|rğƏϲ憎[Ί"Q e;Ӡu#6~w?vzptq8]s={@ \ r bbXi@ -  p|abQ,|C/D3,"s'XVLKQJ*A嚵0 qYoK! $۸!8\\{Y@o C- -Z"-8lKȫDNrwrve@0nqՋT=> }%J ‚uG NUߢ@`u:B z;du)feХn6eez ڸp6y@>7vSb<:Yq3j\}I -`VA9 CGpo%E 'k9 o(6`X0QX c^KpЯfk3Ms_[^8`$Oͦ~?{)+YX2` $8.3/ON/tu'|wd% 3MdK3gw˚xjܭ޺g逫gHHT}3> )gK?ھtAQd |'P sd:}K,sat/?yjf>|ph3wXi۵e@<OD v(om F8qc{ !cΒJB]AD^6(&jS ((Yv Ra ɻtwd۾cػ<¨}Bg s1ϋ1i};[ĘVp3jul:kGt'm!EϿɶklۀ^i_n]%#퓦tz%H Hvp|m@R͘ Y I qѯ\VIk4T*HPP#?9)P-Wm O)kζMfGa7ds -df2ۧ2j82U~\|!~_p~hՠFlj$B(AАnG o0OrՎ+3.t9GYXZcںWod$[xf%(b=n75p/쑛 mԮ(7/kB9zejf|(}wvԷp?J=֚x7ZVI36z`שo(glinftm0 -rWkk$_k'U|ŗێ2Y`Yl!f)Css{V=eӗP=Ŵ-oIOc9[v軜iI_Ot|stnm[2\ uG߇#Hog3?_rR5n]wס"[f-A;qUk^^!uM,ÎGX}}} P-wq,qomOl3P&l5z%Xգԭ7nܺjwwe[Չoͳ'p&P+nM[ُMh xZi -|.Ꮛwձ'GLuP Uc'*"3k-W ٪ٚٲ+5൪~nB?*c&/t{eh~22' -n;/<_bI2lN՚ٸ7jU&܆p<օ*v]v Iw%W^KJ~Rt[=-Q+y>ϯ9_r Ϛ=[nɵw[6 V{'vO;traH,V i6 h絆^;m3p\#*[=!,_Sf=<3cHmH˅f="r̭HD9թ).:_~:!T.wՏռVs}ן٪8C ,~:E2!ԓLڞV̳\O9V;% -%5TdvbΉ$3BծֈgE{\,gU3H*[-d -yzr!%)pBJy<<ÑHK Hx4md\(Ŵ^GlQc-=Bj0 w+^G"bP)}YSId'ItkN:au(ۘQS,/57I$Y=ZzDbE*os3 - kwiC$J4 ߵposE<֋^xɪiݢt-\[F F{,RU+[hr:aoᠲq*4um`&JEA: -/TT%(H) H5%9d rԆ<<;{`b΢Wс! i -?hZ(x6f^N`R4/"AvE`{mä'y$7 tqa[k5pCXl\#4ɝ&>Ļ .ƸMG+FR:)GA6w&d\?3;w,V +XB]ubd2)#f @Տb/Vɔ+b%Fn/U^a{tyd\ց<2\bs N{N@f[Lv8"xi=E[ -aP}=R}= ZTއXJe9 ϧ6aG0h:2Q*(t)ҚGQQB]vǶ`!6FxW双 ڠnD@߈vDnz}OZݴϟ{#7HwUٽy.L:8!ka{Fv H}R򓿬ۏT$6oH*`\a1̆\F3lf&Ҁin )iSpcD"XyD>o~Ad1z4 Ҩ2#o[;7Tc޾ҏimvui  pdpڋ518Ro~y+('+|Lǒ e큄eA8tHWP"Wc?(}8Vm҉NgmPa?em,A},KL,WWJFk22IO>hpB%]^\5bMƽ?m%sUk{qS*[ٗG)9ڼKfn;KRR-9jHo; - [O6NNh~@>x=x䍹Ul6 Ǯ̀({tʣQmG['/ulSn+v]]m`2 ڏk:Yx.#/#+ƾt!\c>ݲx(rt׬\ߐN=%v˴7oub쎰0'Q52h[jG=Ohu qנ@fh+H@hz}oZ~~_^fs&T]]򦮕ZɮTNTUVyEUub\񶉲3AeKJq8)PP8<ќIp%OfYRH*^m*o C&My0u{8N =_cZEDx'dV4LTfiawBn -4 y۬\=CϒRlsvnsq7e@.77:gM΁M2j({]4G݉XMTtw*^YNn@pYxqJĸTpՍ̲J Hl+ Y1CEz08c np~2Zb#i.QD^d5d28iGQ692i9u' >gs*19;v^cBS"OB$kiM|VQS(R" sp:H+>ł$T#>ibDu#4ZG8q{;5ei\ŒI*|?=AsQDU5$6ʭ|JRDSAr/BA'4GV+X$ˆ&s#%2%m.Awd_KŔXf60ׯXa V^420` -ĩ.kB(OCBӠ 9Z^ rIkj'$!KWbjAK$.o ΖMwi9&sZ07lTci"6+92OGP#P&WIE]EX!VCD.){Y\>-X0q{F}@t=Q^BXxpv3`V=+x&M@Ⱦba; -/kbOFwΤ甞U*jQ{J^ V&Yofs&݆q*auA_7d`ỮiQO"q݀5C@hdAxԙX?_tj57"hĜ>D1L ~v$yS[DS 9&2sKmL|m:蠁D!;E"|bq/lc+|}Z(__${h!TQ8r.N[x5WĚP:'%»Y봈.;8dXJ(Ёrl!wtk ?RA87ݏ+W|`iL m!aHH <񷟜;RwI,@J<͒͞dlvBhOxx>6.JYrL;8dA! 2J=L³ D U/S_@JէO췟\9_y"K PHiH^>䪝֝LDv=p#NiG f 4k%oRLo//@ Y ˀw38:_D)]j5/feÃljzQ.I<ڈh~ڄQVZ~o>)A2p N0ҫ%L}:L#b&>z&,-H"<dB h"/yQԴJg -qt.p=ve]L 6'Xp'}'oiJy -Xl/0S i""qX 'u>A"һmLn 8QWwV190iY@p I ׄxP.{"Rf^,qH'I,]`rkx3?j6rU>"&>+%b:D D{7.ExSusww>$ -<@M@$E'60K?k~ |_AtʚjT=wIq_I"oa@(vh,D.TsP}R *Vr WY۠HC~%~HTFzo [f 7r}g(&++ }B&sիh -mIeR$ 9p@p& V 0Ӄ&g˛W:>yk'Ӭ&(QsXKz-pWnBW{n~4$FFs^RG{ULesb[,枴]Qz䴮vc_Nywr)zDžՓucf_ B?{\_~j!{jBtYB؏^m?ZѫgT a?zs -aȨ{h\9Oi5L (d݈4l/mVh -N #f4;]zyE~rNYG WP}8ƕY)+6=Ki.[k;θgg,Rq5#(DžaJRiZ\ESTflKvKor'2gQ[/WzP7Y(ڶᦱV0gsݴޫµQ -B=ٮ9YI\Z-𞚼/o_t!W=Cد{*_PECaD^ 26] s6\{{^7RFg6VDiF\|Ǐy[ѵBXMD>Rg``(l89J3Mbڴe9$7QePho~k  -DWB!7Ql0%rw,=bA, urj(qաX]#YHuye[Ưīv]{lBw7}P<|!~b3|n7=g^s8`mqun@"Iؖ3ۖ_~s-).7_(HQΡ i^Drq'lǮVK{.y6 gJs-:IjD^G ̔D5S>$$8e~sJ01_w&%?6i+2'⋣/I:F$V?Cl_xH/C̋%/urոIjwlw5Q+|d=mi/!psOc+ދ*ٔWگ3#u:,K֬5.SFZ0 ݙbWC@3~ktV76kf6N=9Xv\'akN%3->|TNi +e覽QwAS?𪌷!篥/JE7/y7КDŽnCݦԤItFd UrDmlRYy=%<7ѹ/D:/_7-,dV&NQU_w\_-v6T`+U:h=hNw-Z+kvϗSfjxϓu+^z6Μ"g&ٺ?uˬ<X2l^9ei'ٻmc%/7-ٿ|U/ _\{8,^~^AVl].{?s-՜U+}4r|*lsɹ>@?!{G}~Th{E?;0rLxvWVWf#S}15;b&gَqV4$N6Z~jm/Mvs,>/F=掫y7>Љ#ʸ$Z -k|[sqlA}8*B|O @D7jT}r-NE:%ƴEZ.me>CQN4Gmؖ> m> cYN*J -]95sVեUbn<sn\"蹮 _jW/_ٞF[f؞tՠ;[*"1cD땓j.MsP7Ѱg%fIOUl~B؏~2[twR-cAN_;7 FTѢzϸJN osдZ1X~^Z< -#JwE [gvBaeZnBū; _s$Z*Brlu]Ŋ-fNw+;SrnII? >m|\|.*Z>S``{_xK˗%{n+c8ii2FeV^-%v33uFȇCDfi?ޖ!4\oO~s?4Co~sp{H!7>o E~s-ͥloh_hfZH!/}4Iv.TXwQ.ڲzyq少,5unN3ʻiVު~ |wIY퐌k_ڐ#Şюr!܍mUklK?$msw]u>wg#{vͫzM߃|6(~핡i0}ŃKB^hvHߴ7%gy#BS9*WO},n،z\Ka:-ic> ']IW?=2ti=:`dE"霖i9u^#Ӓdrd}:_4'8m^uw>S=8iz|sH3 z[sn6^SiBsuWg/!?uOWKŵGIڛ3[^ gJq/Iw;=V+ݗv@zIv<6D[8saZ3SyoznjsS^ ہ6`bƴ7(4ނsδ m`ٸ ZXMo7fA8툕wYaqs:@އa+V%:Sq=P>7A4D]{yTS6Nt=[IlgR a7mYQFyJJFRc[? !,x$}} {%Z| $|xh|aUՉcY{=9 4Bڼ6laK HDΥ4rU}\p"{ ag>!'\WTgpU4hMu -KE,h6cueKÅa?!*W }!CPM{Ff96t[jyĤӌ{#S"A[+a6w84dFMM*k=S у8wzH6(c9ga빤'Rx>m]9ioFOz]i"JTg } - 7;Kiz%3 It7't]pyhS(H}tHP} f*ґؖ=9b5GBgVjNErVleEw_0N#2b+"w*ҩZqW{`߈7O3~\*+Zb[Oj(@u4Ǒ}n[U^#K=Co> ;50?ǵ-/KL9~=KǛnwR[*mGBhl"|ͅJjeߚn4ϹaS_BA4Z ]-y/ 3[LT;}}M=+7L0_"O+3y#_|K8g*Z$:H[s/ԙ/0z}L+C99ji-},FWwSA}:9fpg[͇#yZ}1Aٶ9b*W[쌬7d<͍yc<ˆ8~j6mBߟΊ -}^u|H4pE.|QSn]fzj }ՋٮLn-+4/%L=ގ -b󟁀;o|~B(beJ%#yENeَ?6uQn.S{6kuF7&$q:\GŔbVCz1‚ EÐf[wN-B)hKݯ/` cghmyu^o~:,T=hc⨷]d$R3k:IԒ>#!q -{( NtXSf1??xtSongc7a OR-iY)墧xUɀf0O +-nK0#3[դ+GeZpYobf,`DjS>S6Ʌnv<D+0weZ1lJ5z \I<2?.y?'ɂ){Rd5\33nޠT]wVɪkŏBQH?5aWeJ]J1W|_Oz:duL-/3Fx;jz 4Z>+]^;&bG.*ە &1cnI\v)k'7Li2Ԣ)?$5`9YBcĭy/[\6V =E՛kVO^ö,:ц7Z̋0lbnĵ$(Yv?;_|NL 1$Zެ}aqS\}mvoRukoNU]@Mj^%eu+5IeqZFS|Zl1 Κ/I -)hwjӛk-ɵfh3P&fek#eU][X0%'a;s5)s݃ /ͤ}bN҇6Bd",7E3*p| U W>;xәXIEHh"UjQe|sa_}n)xH} Ѿ!n~IQ -atY~R̐{dox{"rkDF|Փ׫淔Wx/XU݅+ӑO߉I~-hۓ0wTMùe,L)fTݛ -qqd,TCvqxI9ap#9ZR;_ƾ#Z{Sg_Љe]j$g^$w{hbƱ)5t(&=Ռ[Z5J^zoe9~o#t}x-ofa (S0Q$EN)벛ZZJkg%ױM 3|ZwKH[fJ{?~~|]JZXd#_\Xee fJM^pV)k>+w60ݽ< -j&akc!Z b9C'C|~|Z}fad|rni'yxXg}~*sB6*IpZ'TS6-Ǔ1rF0eZGSmȥt nBߟ?@34 Y?@Ro _f́h[C˯3M[~a! ˑOWa@Wuk;2ޝ G9zUխ]j[ f6VU7xs*g9Ĭ?|60>3!Q+ia -/p-szʳV;״8svY9oBbf1Zu(Ye'eGׁOW;Hs83p ̑~(}*fd LݮJvzU[ƒ9N+fdieKb^ |@zt/ i^'{m:{c掹x7V戥ŭ~u:Nژ - B؟=|engHp|]c}l&ڞ3%ҖTЀc}\KU67,řh_ו똩g>[jT<%ɭ;G¾Kل/>v} W"NB}t>ɪYw"g{caчp嫚b騐 >[O6p<ɬ ms]euqY5=*zg#Մo ,MZzmYiOaT%aوiC B~>Fΐl/!ѫ< {A#nEo yLUEE!lPQ{TDA@A{z%o*:92s]yF@;s9AgL:{?3\Wlvqv^!~c-*@u|!ߗC`l;R8W@߉OQ#{lOx8J`o$nS6kœ7V{oWw0eM<i;i 3>7TnT'~ GܚB2W>rtoێao}hZ[L?iGUnk(c`ϭ:s[[nr(JThPձ/,|L`GO;`k5X7F6*lI+񘸮ߕ8sm,a-@.@~ V>C:SghܯJb~WztNݯr(waR8<υjBd{U^ l9A9Qj!@Q`pOpN*BMՈE -ELkE -gY~Ra{)c"\_*#CW|oټ5xҚL7BƏ=gE/ɳ6VAEN[˸b}j% F|eݿ3]DhUlˎ=.2"6[dJj(5+~NWp)g_n\Ewnmxӭ0xYƪy:~G:evIeo)7JI$3bʝ~Vs*.cd0rn/a8IJ{ղd:Fw+8R3L{M4OE<ʀ" +!A =sD -?.R -J^3<f{}b࠳~gwإ<;x{l./{ m=z @9~4wLRc Q L*G{65tr?(gMP_>ʰqbC0b$tU-%te{fX=ٓעޏ nT*8$=lDJ;߀5 -P>/ tw ܕkZWF6ׂ -gJf'p1պ0I+y Z9{ĵ -,bq|FN|-͛3.)wOi랊qrvB8K!yZaQ0|;(;%U('< NeO~n_j*8\uue;} tcM!N tƦ ؤ/ bHiQkPfW }6c#7cq/A7qickĽ#$HViw.;:T~m*ʽL10-yH\o]:R&/@ Ǣ?oߚ ijq}~!&+لBhE:=_Ҡؾ?|e^gocy^66hxB.UϽruha}:(&0 {(i&(9*i}ͽ\މ"{93.+Eջusڧwzp;mT.=s3|!7F&RT*<^g2W(,.r1Sbpߒr~iwJ)Ñ'pâ0|[Uu4K @:BLHp wg*Ty>|dsf^j5sRCu y5,گ`4rD5{I -wiמMy0 ^SpϷ@zv"ƶYqg xT>Vswڛ+7oqݑƁYl{]&?m4,d&[Ir9e"w|!(KbJX5[u(Eg{ލϋ|f]Vh*F4)Uu{5nmk ֯.=-zqL}aPz (6Y+q>a?EzZN'pOG~b%),ylSJeKE7Q?"ɒ>Yȵ2:N8]ԷP98S-5f VoGp7>q^c}i};Wo^kJV:^`6`~3/2hFg:Loce $ίʃsN"_~vOKIM;G#)o9™yVfG]n.܍ʹsfXK+PN #{ig6ȳƊbȪm:8,vTO؉n pV6&ZCsGҩRH0qn UfbX2Ֆ|p7˟u c=;`YxؔY:wÙ,˅<պomZ/dwM -mg-˝b䌖]=z6.@ΐ_( ;<6hJgMլCՂ{U|.N0E?GwUmP8cI -='h,Vq7eTW\sgk.ݤc:/dpVeJ͛ds#U0u5FG0%gj}hVHe/\ J!u(l JܸYrI(V__eyemdٵ ӳ2NMџGygSS3{!lڇ@~a9b|&xIL"Venr:w~FCĽ/|$P)e4ej~nߟrpMk}lf`~ EzyEp4L%7UYyHd&: לwJ MV'gRp$fѩ$nLĖ~/ -NvP4w@I򠄶 yP^؟>娷x V7)+ק)`hH /d|8ۍ_4X~ Psa7X]|E1nTC<\d)^4YuC |_5"1h>^u9TN*/ -&;EEQmA$~̿J!eU][hIc-5oLPr0f_'ֺ]"CeU7+-e5a w -NGcJeyE&Rӣ{)}zVqڴ/4fԾyIM>Ezz$P.$ -YL87?6+wnstF fDWZվ*}94,M+XqRddReTeḰbQT`L -wedj\wVYZMj:eM;+pQ_%y=4F.yuAyO|7 fk9[!lJ)Eh(O2eI[Ҙf< Ż,R&XT; =RaƘGl>_Js|"oYXJZUsT{ϋN$"rY]Enb :߽&3V |f{1}^_Ȍn嘙=jL k2<CpQGh>wY܏1ȗym$U>:I^2IVoeS_˺YqtA8+MZ]57/n,GI0rjg XУgh]3F/u'1},Yl9j37f_k>Yo WH I܅A"G !wKpN⋠t{Naǚ|o/:c o7qx/_.bW!/VW=['1$c0$"9}$G{F#L/,F3w =?(!Ze1 vrٻuWɟWWN9``y5 1=֥ 1=EtXʕ>vEu6py]JB`';X'PJ[yt'w'HFZjĥ}8G8U= DKJG!3*Da o78^/?[I81pg[t [+GQjҥ2  p; =L:UEgX.EK>\"X_QڻFB?R>~} ۜ3>|/ J*UVNjqm72=_ea&f 16:H39<}^*= H2ﵱ/X>)҉)=3؅s7j"ѧS`mUӋ3| ӝO~:X++gDWetwA8.{kO# nf=c]2kZ0W&.6̖3~΢#eg8spyim䈃4kM"} c-ķSyy)OGmd먾yy; \R ƬտO5Mˍ3󊸲uT K}j[l'0Ks.iЬv~JR5*?+Mtc×0S eR|ŀރ\+~mjWϨ wlѻn%)@Aa(X ɫJxJ}~"~jQ7H79K^*u9mԒ}4Ī{SSX}pY~CN.O&~.<(%n/Cz7b8^tA){t4Nwnj;ۨ ++2:ᵻn$]ސKAQfك%?5]> (z/(/³9o!{e:獶ǛnE$c+.;5i5l\2j?ȿo;ؿ-ќQj|!<:Ϲͦ]06*V2Y;uihe %%'{oh*?rJ&򣼄'7mC^5`Uf -rOi2pN~IXhOws]MΗw쾺_u_VBnTL7hiǢ -a J%dRg~\C6lϢ~ -v~>. D2v`[.G.k_~O=i$Zz3եV99K2^g+OWc5AKkvʗA=Z֧}1"_MugY88 ljyd9}r`;v^W.OJok{>/#/h\.'p9j1'Nɉt`$&(uP<߲K?% y{PT@ޡE(,T#}Qq"5DX$CPTd70Re;gczBCt<)Y IJ#/q_|m\ ou9/znѧȯ=ƚ uwd#H<]]7J Ib -cn b7_%hņӂc(q=Ʈh?7}UgNkgT) ${|պKaD_6hj`4sīt)+"(<.:aE:y A*4scO;w.ꑝ[ݨ{Z{fE,_eӋ1 -kOj {fқNfVgO -.ܭ!.iώRRQ^3$W9-jmm9ą oхx(@]3Ge{{pOi-( ȿ/dlDmjkCwjxRŠSܺUQ,|!'MլaM:g|v9v)Oqf$v#HЗx،_nSg2OGr^?VOash3NoOVNg{#.|;5:IjӬ4&W|Pķc\Sǡ٣0\Nb娋sLi8X ߵ6Mue$[OS`by$<>09XcʢQvja[tڵvgd6NgEU{mc5[ե^C_n.Hzp'4#s?v=cpΩgN[̻* 4}lLC!F7s/յZjkXr -ɷlYOn9p9(Au&@~G)ρ|' -j^T'4@ f.V dgrlj -rd*>ss`ߔ&l;_Tۦk _ (M]4?cP^c?]A@[ 3`UP`p_` -|sàm@NF$)9QU\GfeZZ;U۞{{:^L'\J!P.Q cP(t$Ge7k ^[mh`R7gl L^[2g{i"wt%(m?@6PX*p4+|v}EckhA[+ m#Xnw&Yv6.f,rS_OJK>O0N E]KUE>}l`787(7('X4_;p~QUd16(e|si.(+yyd0293̔sު|V/|IʦpK-wρ-/^P">wRkj''|Gewn|\mxző/=vBk#Ր}Ƙ$H؃?N,3dO j jrB.01='^EC3FzRYzܰfkwX0,_ٹO mpg֛Sˋ&~oQ8:\|OZ<o2]e>d¶&rܞ_F]LO)BZUf|]&xʪ ~n>6݈4O?#|sLi%5|?<XsCddvݚg^P 3XV܊Hgk~<%![ԆB>zY)7#PtApE2sFr.Y|V.-mdd9eّ6D*XpsyZ(4"?7|yϦG{?\rңф9 |-Ok}LWW|U^gec v=(mͫxxm]]N9Ol(5l/>+wVE Xd%~?/}t*䆗[K.#{KKu$3.ڽ1½QϐvAnΑ*벶s=VbXgץ:߼{Wfo3|!(MBQ>lsAԋD!K;9g Ȧxcr m*j$Emy8'%#\WYx,eRM9dddn6ϛ?ls' -loI} πC~{eūw48.tm[nZܿɫw8  홽Z8BEOBVMoz!pEѢ#C(ƶJ{o * ?Tx * /۱2%5y.T]J*[_H\4ԔИI/thMxۇkzdkREړFi%_fE ) E ٓo's5[ۃz=ux2ab kֽ\lݾL';f\eàbbr"ߓE@-EZCxv( @hV2TaV`råO4&+A~l{Crӓehflr3 -YZI;T(ؑ5܎dWKoDM|%52q=w~9?XN2A|6/ -vnf,"^~Tb^Jaow Tx戩[㗁[A{[k#?6<iۍ5[7Pfg7*iܗ*-w:IJ)}0njp1e&SsMaسڰ6&;;p-zomeO}{Lz0Л:'z-I=\zGl\@k}{8ʅy9v=?L>yCH=GM41/Q%sfڨx뫌ux۝.L@_Vǽ㥀w7&C'YF y9=Ј_\ȎP&gRX -Qr ȺgpJO/h -^f -ĮUȪ?{Y?40wyUG}(V ҄;%<^sL!3ybV^Q-gX({>x|8N#8Aguٯj҂Nмn\5+X@ȧo4ȷG['3E tЩ)š }31X*sh 5Yeiu*f67ި4޸wC@nXCх rt(uICCnN9V_2O_*Е<N}m4#hK!vUfc`\l )xPmM?s;/luJnoW / / aU9;}=(4Cm1ȗ#nPvM]AL;9j밥БyYwl[^~˟';=?z痠-P(Ч&($#TJy-g>6 =57)lgmhO7VwGm|Γh;9Mݴ2X,4A:p=@jX^s~!O.q>Gb/>stream -^*M|O~5v;Zbc-=JNLc0ly`kp۲Üo׬Z)D3Va{7ӛ -+ _Cd;T[N\ef"Ag57+=5hM^7w> -bjuRnJsYÉ_Bs|[~'^uI&8#'V_p=,Ǘ~-~z/S*kKK1_hJRU.we_үspK۝[XhT(.@vNgK}Db6u֯ŕ~ LedhlDdEG(ȍ_k;;-_,Ŏ  <Sz~Źg ˖Zcmr'k>`%csmrbdi^oNqV*Z-N4e^95HMM="~T_/JFS}i5vV}IkF; -bVq$5aDe=vSw/Q-RRW'!K蓲ߝ%]fGf?ũS~tepwTrqJUTfϪTu+2 .ӭ^uq\u< DG~ S+? -q%MT]Ӭ#M~d[A~fV2{BoS 8/:p~'6S wrj5tyvFEH,թ H>ra/WAY*+@[x<ޣ>-R##WY5J[FJ5[I}ȩ(w( ^Kaw=l*isMoV;> \}TjI)#o9^ v~iJ.sY3vx?ӭR:Ք ;3͡%u^Zuo̚$Ft:AQ-]"Ƚ5I l3:oi;*:[ մz}[;Y -Wu츧m#V}7j%6hMTjloA oF%DžmHaȶʃeKzxCU~N~ Wy-n-`V8Y{wŪ]\esQH]1Ԯ|ב޾㌛_UXx1ffU *6ZtWބG vݹ"Եn`BlSٹ3+m1DFU{[̋3z:[fTO&vӑ\xu7-FB埍ϚH5D!|_/sJbP׫/vw>?~֘O -{ݕ5ssm&ºXIo[+ז7bA3jˮx!YRZ#X廴X, _)IദAaTb'%m\%y#'bd UUp))}Ԑ蛽R pKH ϗ{G9 ev">S]&ҥ^4N$8ؓG/Lmʹ~d~)G[+@8 b,aglfÆG'>Om,\Z-؉7S_n`vW! a rt9)' G_ W - I(D ^=BgAE>4x1ƃkSYw -~oܯl^;@y@w*qdSGAr 3eVݯp*;od}EvB1RF.|3P< SlM.|w^»oafcSu.%@Zz$hG!''r-HLc1RWl(43r)]M -S`V5smi#(eu$i 㻶uF -vroe -]Re@Pr}(g}Yi'{/tK~Zt#[_ 6XOftMiU^d"/H\r@ve#5GPQGw : -e4@#/)V} ׮:Es-!1 Ap;Tգ.V5kzGlnؿ ;;. lz rg`yфzR*DY?+B3Z{2>eAPȣ8--Q,y֌פK挩viTѶVĕJAq:lj[h/wj^2hV;\X<6U RPR\雴z'xscTO+njb6S3#DijMI}`n~R7^낽l_2 }~%[UfR_uSVJ\bW3Mn,W)O\`7`M/(5plhOf1v8q3o4E0*3ܜԿPD ~@^(~쎖ͅYl6w|1>G'*yYg¨90y2emu,rdUPqg+LN/8EK,=ܐ~.4PY/߅#|rnqC5'7bO۱Yl ǰM/43<%~‡nh/#,j~<\t/ `1=bO;#X\nz9@ -h=4JKwrw -.^_jj`ms ZމC ZV~,uW"dқqo!w^= )w@VySxZcL݌.=xe=>[P߱o9}2^p:W_D0y[ffSjofn#K_l+WKLI=:'W  -[](BЪO|/\BF?x SޔΫO.LFyv.0;0cj_siR?>Ǚ}wvGC䁪yrӪrj`Q"< -k@IۈL,~s]u{ptY/ sc"eEK)2ŌU)Mj;,:SЩU3=T7ƃ+w|%pT߷s0,?-qSk~fw;T)HDϽ6)}.@lY4'G:ehq)Q,}cvj=0 -d׌iS*umyTRxEٖ[ %m1a#/: ۈzᓾfn FP«6ļz;J4 -^aZDb֏蓝9h،zIcslJL8@SowјӠyy]a<\wOӕ'M t'b\y9Pc685#`^ɫY>'L%GAzBY&or$+CZ{ǎK*cD{D'/y=;foueRMCuEu -֓[j!:?HyWiͶV[#po`x{%Ҙ*yc:hv|Gdx3G,vMUljH -#^:YcsfZ;SGZjiQwT -T>t8*GPǠOIV/}1 کU#shnԬ/K8FZ~6r;∭뤃ԎXc _eѸz۪-2US,'`Srg\ov^iXk3v,÷X٦R*UnHNEƼ˖>.aTT8"P.]})<ՇOA\MI x6wUHULV0r!Fȃucytߏ)TΨ(=)lƧԳ75] wC@GuE&Uρߚt4n[gy4 JC6rL9, -J"=XDKAb&t&K4oy:Z,]PmeMj 81iߘeSCDjtFV,lER"^:uRRV1s !fI?Y-_Hz?mn3ў\rJmrB;QAdb΀Q0;*@F ok -] }7!19=ޗ~@E%zOqGakk,`XeP]KguEj&@[ ,6(H9ײ$$*!z^3 <ج*?B(tol6><v:&/ `} (@лtt7KhއdhC ^;<{ΣZۿbʼr&@O 0CWL*O}֠S5(`S@oYCvvaoO,Wf]NYO蛏k?= --]:~+ -v8xpфMΡ 5w& p8[N4(M7ܹ>Q#{+w,oozlcpȌk?}&S^RSoD x(ӷ`c2sЋ -QL3Q N_;gaCY% Ql -OE]wv:5/Q'yTjpwP0~wa+._gɿSYf o@A<B?e-{^bjL]J=ۄ(\=^HXjh\#- &n?=nR( ɡK=CfFAyw]p2_A>Ʋ}@L {(#yz3ϚWn%Ee.2ڒep&Ǚ,͏uy:9AQn4 ihvr/MDz>>)eS莰ß-+VNSto"gV~PW2sbI zZGT|%OZ#_E#+:1 o:guduz@Ŀ$j+dIN }.=sty{rSu6'?NIj>t)>yW~%Vu5X=^Jq7J}hP ϫrpR Z۫Io*ȦҞЋlEظYK|]>+ i>R>.ٍR6jx:tn$-ErB'`{.: @Iv苝cن\N-}X5]/pI]B5,'9˳1:xÞmjm@S96nS -m vJ5ɫW?H)ID9+LhCsPxT/C6^Bm@6&ZuR共'OI΍Gtv1PרtVJ֙Dwl yqM"޳֮@-ĵHKRH>%144ш^wg2ǬvSn杴wTFlo`50C\L ؒR;2"1,Pc6V̛}xYmiw;_rۆ~9_ak{jp''ty/gyy5Z b03 =sv|%-QSC$rTrmҽEcܚB{ʷZN"*D]mHVhuG]OFƪ ztr3{><-pT"A{QZF:tdh}hFMd̍X.)Xr7)D_oA& >׬+h/B=woYM&^25«Ж|iRTINf4ZCMz';L)GsY-pZ!+i)aKHիMywtv !L,62h]9B)v^1CDfKvWo5Vzw#RJ?,F҂Iݑr6r&0sF|5f?H3/d9_f<!y_䷙:u59̳?VoPya~U[}Z thK(lk~5_ܔ/M) t0g3YpX"J"JGN_u/j! y9M4s-cӛe!4*R\/¶+L83%3D&ք^fLjp. m8V[WԼʣaV 0ʦr.3߿ -a8*pPr K<G7K_l.9k\N(2}LsGޕ 9΀&β%?H O2֩ TQJ+̉,(aנDGZ.g+,8G:"#"%KIz 9}.͟N#(N -@Z WkP(Qc! oU'j -6 B *E^{nr -=XbS aVHhI#L?cs7E+7`X^9F@@C4#qǰ)8b>KL-E NA͗uigMo=}{TgWG"t`9?yhɈ B'(߄= -QPmhukJ],fSa %vv~4G:tQŰ}b=[b ji wvhuC j7 +NI#ٶX_-F3 1=Ip)KJQe7;5\3]I6G'2܊Y `l4{K`tO=_;<gAX q9?w2A)L͎vX>L\}/Qs ۋg ccȉ:I/NNl>\/?-}m/BTi̜/uky#-t=k9f;n}6JKCٮT _Wju_y 07`νm=A.9ŵ1CDYT*!kB9!w,n;nԌЄ~w"SfY+goC{ϸ]x,ևXx0+ˤe-Pf2\}O|I%Elďžso+.k΃q{4i]zɆ|g5ҫVbc 5`Tw>ttY˅5D%4:eϯ ~ ߝFy9*I{F=9b~-v0A6qyx.+\htԼse!ȳ|mMfZsN Z12C|7[$@s(t~wvBPm9CK&5. Xv8/As r:,Pa^Ktj2Ŝ'(_}E~v| 眲[+ P@1H *a1}/]>ݧZ+9uslàJ3S]̕8RhjuS=&qv&7ƾ=\o0k؝CǖC(}x -7uz䪵 PlyO[hp2!r.w D=?Ȝ*@YmYO8gS|n .R0"ΛL#m~S&1~mڏW|/݁;SZ{A:O sUH\%fD.+͠o|Ӽ2Z0{L7~SǍ-UsSkOO0?rzd^vz7\e?M_݅2 Ѓ\92>.Lj{1 ;M*3ʰȭR'P6\o-}62<;=B c=A !BWnF܌|VǯmDof|@I%)LpG4~^N/I&]${:DwmP ʵtdﻧ.nFKZݞ3JFC cm] #+ND߽aH~z%~.u:EM!j<,0yv@0PWeیlP 7;7F&5;hYjt IYnD.K07VI~9'Kwqgu7mAgJjy7B-y-XV=+[';8}kkĺS"s隗O<> u+ҫA}tz-n*onܽ6ZNYq/y.v$~kL)RK.|1xc c/Ia_mgi8I{i:loUh찢C:Ow4j`}hq׵󫡜I5x:Zn[ˏp9%\` ,UʁȥWG#OVk6uW^w".5vҙF;{g 'yDmIMU'kr9RFD>K#Q9|!%]w;g_hjqi \+@n~5Αm#-7Wː/ƹ^ԚȌ1bT!uL#4G곈+}S.:st=.đ7K^SVyg-[B٠lMwWf-7w:&9tjpԱb?c'&S'xT\*lnI{1(`ē}h>ZOyYiȠrsdtxN'ǧ!q1』jZsbw9s w_g -%gw{@Q_Jh#۪StVUrRm[ g<>+8) -/&'J]ھ,߱]Yh\L(rinN{T3*z-MeNZVoY)u5h*Efr>Y^$ܺIwJNxQ?TRayrCJ,-nm#*9+ىԛJŋLxwsStI̹oUd$iwqęԎvFV/J:+z,䮅SR&Eܱ -tQPcH7wћK[W̙qRghU<NRvٖ]ꂐ:L ZpwkL֪7:8jTvEt"zό|ihStMjmR:^Q _+ σë/6X]n'kkP\eB`zː)Ϻ -R+2W &Cg>]nUd;ٹwsB&j ppܫfQ!ólwr.r;:]qۋ3- -ڿѨ38M3b ɑ 4'0 N,-qzK}eʘ@hD5FH_/:d-eL -E5E߬$ѿl@ãA|$ln,1A8l{7 ^ey9 9f}F sBᏟro"EwdPM@' -?tIY^kG!<""(( DϻkUO\iI!`0ƜOFoUW_Xgf;} BDX'PӉU/-3\pOqm/W S ^Y+kg -`R\ONF`^3=b }2|lwxngbJ/*Pe68{2=eCD7B712w6efeV蛰bK<@۷*oعC88U$!t^(UE F'Fg[$;6Ą bƃ1QH _>݁ - -, a udSk?BYå,9kļp\w/.[@xd+ ls]UnX^SͻD8Ǭu׃a]c;;{l R80[L*u{}R^[ƒ"^sp4Eaum2?bHEqX*Yn@6P)3TAY|۾>tᒊ -ito9hFm[ @ fgSjo%5+!uզ-R,mz+4yuOF-Ihݾ -.V}8|I6hr˺1TF.4nZpni7gb 5f̙sWxpMom"X$g֯//N;?6balQߌSiu~Ad_n)e7dvڿd_@h2Գ'+zq _¼3Y*蜵&l^dSkYΩM}z-&yO 1vU}cwMs*'#l=rEMKJM8/^y듕33kΓ۽;s'"rgGx^+{8ݏÀSKR*[>+h?Y%ywh5NGd:;O%-'ݓ]W`\wna5S("˂*PJsjrnsvu0`a$u=4gpFq McMyӽ ~2JbbcݞXMcz.N(0q~,[8Cݻı>\Of9e>QF؞c<^w^?Ò޵!yCkGY;Wcob2KLʱgj#gV i=lDAT3_O*m(Z$2#֛[-jx.Aa~j4膸w6 wl#=56~=5 U~pHܱ0{LkcBO!F S[8C}V~С;R1vwuR=ՓIkl]?h"d>{3|2 ga73*vn2Wd7\6?-NR]]Zs %F[}?]cb&JR4K3ugO>O>ݎ";eDjM̬(Lӏ⹅KhY U8b<=3Uydε]+t^?k1+||(&}&9 -0/i7 -}R?mOSW?xn\+E!\zCzkkMj U_gRUPU'?a)sb7RkEbQ1;?'hhvR 0{u{Vv?6 lk,.L8Vj<֪?UjA+P>^A.n2e&M˸8W?@`0D&^ݦsrՏZl}C;Q;aFzZ bU{~lL<*x)|g-!_ePvw]j*ݼ4g}%qP-g:6kf_ b ݸ|#Pz#iT+V>ǰl - *a" \^J)aFCnͨn6rQ]*U[R<C%7(X7Z -gfrLT6o3DܼJGF6yU>]6{4Έb.d -O!bx1 J6w2tfgȦ8i gϺ?;'6uzzMMtUnsB_Mdqk2;ژ4*{JbܫszɭmS++̰2Ǎʓ?~v -egM@P7>;c`ovyE`HdJѣ׵BQJxEgxf[#VXo#,銴\(8;f^R2'Ig -͎e6Prhp|{^axV#}j?_t}xmnɮύgwﲛ%W_]jPܦϴmȝfAl+81?eey37~٬~oXoMe]W\H*hNcw*7kԦx#Ý+ڭ뎖'gLgC~$?/Vyfݺn˸Q>jٹ:܈T].X˛S_+שFg{i=qn.ڊ.ɪvMC^Ygk@ݗF9r-HK̴qn]qj2uٝzZ}FJj}j+=Z}Y#h75e^ v.6*] Ni&λ*^V7KJ@\uάP5X\܏I+[:f8]+ǝF.-lS]2܊7Q:+G\8R6=:>t+X/ka=T1#EY_@bHw7Cp\S_4[(_^ImpRXy Cd9R6Q6I)IήtqI.u)"PhTWfIGxz`xKi+I%oS'o6D5Az{*k]7rj&zFabx˩;wsûoh #-]MFʹ [BcJ `ݑxzqsauNL# Ȓ -ɗPڋ{dC$ݪV[u&b -Xm{vV[VLUH.eA~p!DZFg}.M8R -,i~ڌpCc1;'lZ^@&ݪ?5ļcs7qJfu $4ouS7 `ʟN!] DψrI<ȫen[,GB2Aɓ0<ӞfQ~E~-gwΙO;&熹!nY9lk+;14wF5*d$m=̋8O )OӋYj0b?՟|7oIw<mVtY:^.'-oW;*fxMKXz: ҍԹ]*PҍPK\aS>f(#:n &UKo?h,nİ N8җd(7gÊڐԸ#$ֈW*yk.}DlMtdd~mt}I!d #`n4n fnqZC R; -zJx@Ѿ4s:o wVhҤGބiVL*W*Ȫ63)s;SOqlRt"Fh\_Aoa.f;jt܍ݽSY_{o9TkvZϏqbqlRZzjk{WO%/U߹4Ym{7q븗G&Sag{AGtu׉֬yk40=5W*;u(]VN1Z\ 7{W~g#;d>V"<=ny@{Y?DIG)y@1X@$߫ !H@2^C'0'#3 12T8/~sEhB ГMZ=0\@ fV ;d b68@ HnЯ8}|_g_\fYG@>(V+2S\`cRXi~Dw/\WG< -<B!(Ncةl;!`g8XhMae1bd<+BG(Ca n:%<7v.S`6S*DGvTK [󬾴 -V4}E=C(@Up:ǜDi&dݱ½b.uO8`>7jtF81|Kc/MQ;Lzf2͵yS%KD\ J>Ձ?ucJf/Ɠ{dX~`fvpҔ -#tgw[ޥoCns򦽬zЈ{Եl7͞ Z]Q/ކ+#iJ]~\uYǩ.S8*^tɢ#]s2jvIdgOE:q{Gh NKZ?wKӽb_v8+O=ݾ n'Ϟ^W:fUasoP@6PcsY^(*s,#$y:G~O?C-8̂Y y4=h$' -xISDVC|ؑ[#)xSܹ6ո.o wSLOUk^GRЯ2-$"{p4Ip!TS'|pkԟoȠWn. KEkPNA.Otl\=_?};JAw*ʀo˫"m5f|泈'Q)M:ؠMxDjm -/<۞nc}.OH Pl~IV]q -T6$65W~e_/h/V)sY񵓽xRDhjUw1 -n%W.=bjIeMnߗIoՕn^w:G%5[s6> 6Xp g56͚?5m4שyohifjƾT՚Vflt*UL h eW{Bờ6PhڤJCua.5I2G5:6-tJt?6*~T??8m}܄0MΕ4v{VݷccY>Ul=zGq5ϓRB4ۼT[s%>9J'Pm[F㡌/DC-, kq+fu>e3ҭ+ʱ666ueMbws-Z ;<oWYkBU -M$,j+q4WQW8ZZ{j&|+ͼp~Veo`=,Kj Hfٍ +u799f굢d@?xu-X}Um*}T*Fa>\󾵙+eO̭֩m6†n51b*4 -Tw3@D'Iv|2B,6@xhr_vx$ILbEt=(0X]#6?x* W"TS>(¢iҦ՝PfLyxqyz6rщɶ3Qt\>oZ-Y"0b,8N$tHTrRzقX/lzMAHZBm) /| uU1ԯ@$ Q,T>2O>p||x9xcg/@lg1mBZC8 -At1; er2"o5ޗ2/S؁TeqI>/T鶒OHmB MP #:ϋ΁@ -/gd49x/Xt_Ui9'8@34@+,@>48tbYjkHR<)mAVCB VbpZoRr`2NmbE]c>rfz](te! -@5iPJV|P7@Zn | R?CBs[ڄ..!k^zC7]L]罶?8{.@0\oh~W# J@k\%GN`{雫8 ŵW6ˮDEd,hV!V#*v<7ֽ8rR{—{>ofk̛y|_]˸U/UX/?%k6Vy=9Ͻ}ld&N59X9}Y - d 8&+2|G-v,⽤eɵˮ<.5:ʜwKSZ{mRcdiBdGV>6 FE/L^a$A3])X$ .Ƌgˋi{EbiN5Έi@ -G֬K)Xp!w_jl؇}`d!mtvg_Q܎n݁*u(NӅey]m;HؼʄMjC߱}4tCrR&{LfWk՞h'^Y#~\F7m$pw4FY;N>`5%N7#l}S_xeU -M螽uf?vƩ'{}[2op{XGEAO^GN7PNn݇W#%t&m,[_xk5(yfCރ͛ˊ\]Y/?kߜҟÿD) +GjgF'w}YD9 SugSXi/K.TL GqGXcs|p],Ň2|Yl> -<<"|My)om"`,`\y[.jZ 0p9b# -w{~]%Z+kƺƬ۟KNK\s.V=WǟmY z<^$%]iz`2C=Zq# -Gjٿ;g}4_N妾=}>/rfGgo<gW,["7-Ȋ%zֵL#@zwHwLa2:3 S, 5crꐟrKvʽdo>Yxn`w{ה׳g믻I\Sj.7%wwfKfJf)RpHH\.Cz:W0TŤ)t`j!KWgt{L(W^D9s餐r& -g_^g-_Zf{5x@Ec{Q fI_< -^&lx(>f=gΜ~{XkH;;hmoȞA{ Yd&o:ݬ-ܸ -ҕ-+՘=ڙԣmKpPԤIlܑ;9CePg|;n- ,[?5{ D_Hw%]튱;YѧHϖ=Gb`KʅB!~:&PL+rt')kH.=oj֊ک>s>/hQr8omChR6eaM΋{EiAî4el0<O!M=wdZb)2úRlh8T'ݴ`׫ju{x?ƄShkV5_~JFN3lǗ\wҊqqvwYdeT_$ӳdP -_ϰq5Kf.8Q*վค4cMGV{zM%Mԯ6UHh,kCcmr_ؽٕ}S`kq[R;(lj<>B.W~@.^<BY yN,Ut`͹2{ VO#⳶bMZ0|MZv5~WWV{<~*n_ȧ<^nGu'0 !'BMWc5c7l^ǽGl 6rY0 W깋YV -,5 Ro#_K!KQ(\@|r?y˟G},CBn=2! -Wl/xs&(l`ZVy4խ<>{ҳʖeT\v!?H!t(h~gl^&_v^n<1p zX[|P*N!(2- HBE;-\rv)KU8!oALBWbpx/!7a_ tk"kKa7<$ -z/qQ-QͭKX~rp]Q%3ְL@KCA V0uo'k;}s4hђ2lc_$YȢ)XSʓ3OIũq:T?N&N)b\i8}8qzelqV9&޳MމsdN 2μZ@.N2387;7CG%xQO1?m~x 0nT S]@;(M /ov^^|i,*_ Z4buFM:G%|L&^dz'Pky  U87njYØ-&.&yEE=M54@akqτxt G<w,'ɎLU+2+@ ɸ}+ϻ$CoI&~GR_}zM'3h^J4|#hl4;N8ht|o^iH4s@iI&]GIV Йwov@IB l=E^^}|'oU3vݺ;-ݿW跌YP8z#-㗳?nvjp_$Y7ugpd@"-q#OJܗnNw6" r I骦VriO:^@״-wJuS|=ŭ A,@9f@] xDmOzY|oT|D,ߡk0K׻<+ד|P3Gr+uאּ+VK[օݰVݎ}(9kyiEWK ̳P$X񟙬9J:Ԟ'_2mQjJYkWv|Kd"]o>o\]i zL?P7<@ ѧD Bpȏi.z] Jl)>D+^ 8D/xʂ[b $'J$6!VLOr>ﵟzT~_>2;P7~@Vlm˝Q6U:<+pzc#-amqĢ$]_|e@=igad.| { Fc"X)m<ig/׉ruWK+8Jcro6{c٤YN_jf7%.uBt2XXr֒!QixNV~ jaHLN>nN칻9vwz׿-2UITZj66׻mFZ$L@5ab]bg(|hTĬ>00a߆-V24<_$r}?M۶\As@Sy<ߘ x$ ;E3ܵ'i^Mw쎷bnlTYn9qۀ`m~T -}r =-ѦLqD/_9`GA.qv> .z3ey<|Z" -+NVCa"\86ȫX~M"GVxSYSu]XwnU^O*5 -y*O/_$5s̯>lO3+<̍wKcykn)xɖ uoj ,USV-' -R*~-{C)YwfחIH>wDr1e`X-0s E.?Zz5s|5ʾ^ʹ+ѧӸTQNwFԾHRŻeE¬&ݤE>%?H_S5Z?/~K&̏.?A*`>pdGSC ~+awk2mKMLPN&_PĔlD#b0[ -!.B}ᅛїRq=q էcҁ??NSvR8xqm,D5~?.AzEA*r'2!R $2!Yry8]ߟe_ϩ2M!.G/(W_i ut\Vh/cǙp|܉fz8!~¾fS HpJJ_6dHLjZ湅޵ٜwދ(w>Yva!/9p}rJ3rŃLmma8QX.k2f<0w/k @8_w诮@e.ʌJP鮦U)mͮ >)hM [gӗ}=MZ7Fի~2Ζ,ؗ?ܶk~Zŷî>A7*c>roo w -`9'}Y땃I(U2'4'ֽ` 0fk+ xNm`zLnmF>w\${$N//'tZajr4BTTF .Z~#{p5(}2[`6L>Oj\%wJfz-9:("ɬp&:Am)' 4 e˺›xow{7{[[ .&|lԓ:Tlϫ(epVyWXɹ۽!܄+ &V4ppT1(Hl^ݺ|lǻ#J'!J'M 1ɽŭ~Ǎ6-srj03Ek|>-p= MyN"HKp #dn3 `;& 'hI (7PbNCd5ϵZG -:6|IXYaU 4Wv㣻ry1 Z@=0(QXWWqmTAUu:6L> .FB@5sF+'cu{`n I4lN'7;ǾLDhybǕRS4^O4pw27T Is; -!d/ˍs4NuagZu\lVs֣3 ٬3Wk][S[{?q_ ΆCϋ1BfጫXH&Q%X{Eϔrqd CաfAl:&Xn˘6 F.?H?51(CKPJx_TUgR9lJ8k6#(a8:r1K1ƫT=.9q,;Dh԰t(4*P^ gRMd{eIWnry4/:g,거Γt?) =,@˳vEa巳Ig$w8x/z2Hmp+)f;%'ŁnŃ Τ־ ih`lSD[</3 -f_ğ_=Nq&Sd]X%IƉb)qf X#N8,0`U<qAq\ l% 'D e_MK{ۿ,A Sݷ8it^ܚSl=v6Իpqj8)ฉStH`)VӀLEu?7b/¯ҢRxz4>i>@-O>'Ы4 D+'g:O[ğ -^Uq"Tr̍zm:cLsk?*yy>m7{6z%cNtmYreCdʵ ɨm?ɘ+XkLp2+d:FE*@!)5b"|.Ur3:6s[Gʔz#0}|qC.,{Ѯ WVt bs$~mIV|,Mla%ًշGgW!v.Hߒ -F7{benPD.T8 0_bz֔k Yny9#s`jr`\|I&Ap g_K_ \徿B(%Yo  YB6-Fą&ZzG_V.^jgǧ˜U8.x~a:דz'SKA.{SkqqK]P$ngvbԇۥp KwMjA>m嵒c'{K>>88d`o/nߺܞ-/fquН1k#0Y?8b -nhNӻh}pY%nw a%HQ&o=]P  -3^1GL4^)j@ 5uK݀;N{ٻK!Jsgy܁nv].f뜽Y>{Nd#AfcNSpx6y#7o?$0ц G~T ozz_N_zOQz= fMut)ge/*ShiK>z`{6Y2S9& Macf(cO1đڨlc}pa `A_}+˙}V=-^:|O gvk=ټ7.9}"~{ْҝ,#jmu<<z,4MxAfyX4bRUk[.54 W<~o}p]k>|U?>|PWpFvUw?g ?rcα2\?GI=Pi1ߺetQZ'`|KlhA:淈^a+3A4}Q0/zTKQTY>R4+EG{lEyی&sT' mJ`sVeuNLkiw,Wsn _Cl pA,j,u'z[o~_)zLבtI|TYH ZHzi{+]Cne\O]}=&xY^_[[^FUkq˘RɌ\Y)ޡZx"O_eX{8'f}&LVxR- -lW{ϷCt2\咭wvf1>{~_eK[Rاwe;P5IPJ9,ʵR!&S=ªK=fN )~%>L6]쬻 ~q5rͤ1$siXag XZ{źur۩zJ{W2BF28/KEx/w#j84$ի2XC`%v2Z VM[ 6ڼ^s|ϛヽAc{l˶] hgѼ[:LJf0ﳢf"R ~_|$dP%Msc8 ̜ v&صOҮ/^ѭ7^'KiتǾz/R_0N?y:v_bts,,;>}Tm7tcBju=Sä]m"yZX3eZw8R[]l> 9= we7($WtZZwnt6}h+VkٿYh;K{]BFuX)SV#SP+-K:μkZ VYݳ%dz๋i*ZTʉ)ٰRgyd'Bm@ ۻ]l/lp|_-)y7Wo%ElmjLV{<4zcU^0h/M4mA+#SNufi_WR(}yd_Wr;dvܓIQI[I)@Wu{wEȶܠ(Z{5:Z.*4_mK|uF"h&s -Ks -琓gThVM@*<KnN_[)d[ze&px@j[_LIXE.XK:R Dt:^iR=xTRg$3Ѻanxr֬Y̬5w ʷ8@ATn! 1\B4Di6 ܝ#DW*S8Ge= U ĢՒ7_/Fr+77xւsye* **h}>~dȀlƅ8J\a 1d{{C ]tZ>_lA;׾^ -v2vB|f@4ܹCL 7ukN 36#ABL -mgZ{U/ECOIS>ı%qwK+]p]kkBs \DZX`V<8(w pyűb_V @ f _7qr=dQ ㄖqRV@]:8^g9űUݗ 8;qc612GSnѦ"Hl((G/'6@y.iXuŕW"$N|#N<'Ʀ' ; DF0rhH eb:Vn:(WY?HxVޡNa=' DX&;m@-'5@eG3hfK6Nkun -X}?O1K8S.a)y#v6\}f֫DgFaC:i=8Q3Hn -Sov'ld@MY%аJZHys<vp_系{H`T@CެhK>Ytn;{[ֿH2OF FI[t>GrP7x9e鰚NbBDŽߡ!oUj2ؖt3N˵o6F{_B]lowo6a^JI.e7F8Әj/usz-}.Gj 16qݝZC}auuEݱ4]NenъgOV׺U|ֳy8?O;_$9c|6w%8V>vf_cTh-;[w;-Z%#&kԆu,ţZ(1?\;,z5YuTcLO'^3lBڇ -ta2mBCxnBV7ImX;|Oћ%8?7|L|i]o64rdX;؈V0~νc]=2 Ýt:Z&Te&t|2V -1|< G(zlTK?/bސmym9mKmc6vhzAlAMʝ00u<7_.*MzX7vصc;IOJWЯYac ggj<.lo>?x/Ġ9m_,V.vn>rK|i3;F/w&wcal2:>%Tᨏ჻vBoПisK{_ÃF7ɷu\]S]=/T9zw qmu8ѰD8NԖ;1<jeJcӹ*vF1?*P96vo()a*J!+{%g|ը[٧OL [jj+WfV=I-03p}`d2⫭קͰ5媚Φ٤\XgBW>-CYkeVJC!-IC1npn%ڀw9"ˣ*=͹2W~,&)|mHVUks}8whLr?szmmN^KS^T5q6gaaԻ4[ !GT^[Gp3 sR~g%yy#qS4MPeH ]ahBT3f|Kuok̝r 'TTrߒNxs5! nL~.ޖ3VPOޥ_UfNz.Ҟ^UvwO(<;ŌR2;m޾]>Sw kf7^9R\ם5tֿ ~??ܳ9ٕwql%Cu3KARp ^ڧ B˪f˪rpJi2F[|9 u˶NW h -hgu|ġ]kU*SFUJjZ_־g$NeG?6|׎6*-^SpSlTwL5GO752r*K%"rAr ϯ&fV2nsncoOL8e*wkhc}q}3zM4κUUd_xGw7M# 'ĪCx7Ѥ}3Aݥ$b@,Nx3q#W+Ӷ\\~6;Rl/i=5c?YעQ;`Y^+sy&PbApt 뤵O8 pvN1ju<.ob2oMZC*ZϣڪB إ_ob+ߘ-/މh7գZG5.[ -/g֫j[) yP!tJt Q^qAǂlQ m:e %Fl>sow3 1Yq\[=t:z-K:}4VUPY'?T]DZkCyKѓ27džپٙF|DU̙ԡ錯1kZU%H?Wë5Y~/WmjhJ JJ+չA/ ,A\קkNi݈ -c:v%f[ƓsK)XfY0MSۜɄи6c_Wq-M&~>= տX8Hm7o@ƙn^s[e2S:go_rVwul<=s6믜esyPA]hCNҫqp{< -pK\ ٫ʒb -_KAX)XlczcЮO>jJdmRZMY3K-|gLg\ -6@scpL b?jAčCĽGHAD _ՉdVo[pG:Î5NfI ܀һ=Ԡ85T!u &N0"1ЯBT4E\0|D>QjQQY(XCTH jFeaSڸۿ OoԻvo]?)f6ZqZ>Vaaeo>yHyW>[h^C?bu8=I:s+N:Nȋ]' ;''F_A.{WzE({CQ3~L&^Y`G].Prkb˵K:eNT/091,O_8;jy(z8ɻ? ɛfޓr-$ҩ~͖iw/gUK;4:#t'-cv9fy`Y-rv 6õǫWn!MFu|X|3I?B+ {xGGxu=!{ʣ1׏u{k~nnv;?එM_8!qXa=Y\P[:?5[tpwVњ{8r?ۿ<[o;)M뙩3d~jk7GRo{\Ho<+owaDKadƋ\Qʳh$8֯1RWN682dm'`j)g_033vgfEgx720摉wNK:4(,*'岒6b17*0[ݰա5`!˓hlrmL<3Q*|ׇԾͿ|QpsATL D0NdjД:Y7.Z?讧v~N=Fkz51 UKLL|b4+KU2crw5*[mc2:{ʼn+{q3AAyG,.:!l'W j,ۍvL/]`-ceG-\t?*P0Yq Bh#X;=ǶÍMV7k"?fxGYA1Lr>FKd!)N2v_X,zÍQ]+Wq4tHmɿlA C{Z/F*^\"{H>y&2,UwjFAQU[ϸSgrs- 84 ΣLOvۙFzӕ)hC9mh*[*n1u^SיzLp#*b%-9o{rTtjdE`/Zɵ%B=w0R3W!"aE j ׯh)k+@x{~BeqФcQD"մ- - <e!lOwFؾ -u;~;}ˈSTSwR=BjCe_G]d8-PEMUC%n%G/Gd*ٵ$'qn~@b%AS c>P_.n/$ «"tvJvQ:2OBx*;Ju9 sߔJ0Zy7$Iuq=3}VtfBv1b8.8")+L &}:-_ELr?`I#5LN >en:pb<mhxhzdH3,,(xsQVᢣL . JKқ#IU㝾д.o6[n Uf$sX$)X'>|1z?=&glJ::tІ]t TV K {Zw+Ww/>W93 -X٧sL -L.hJ(K.>%~9(c]Z BNt\w+l3Q#J,β޽%El ‰^dRe^dtH2Ab) Q@ll&ܛP'N>Eew7ӇƢ!fEe3#.pΥۉ y;ֹ0$3$wJsK& AG* 0 .o!x^icaPaP`0(v;&7һ -(跨﹯wKI->lV. , - -mih͗YZhDNVהCr? -yDb$4N#~>@ຉ~d%ca$n![T6:[V^/-λYϚË s+Eכ trtIb>Tܼ,9=ug(֣ii/xr`CsfBkqWks<~6/?&2.W4aع.ae/Mr˶hVH˦#}ԾMNh۬O#L V.gK F> -tۓɡ<˻ P0 i tk&GwW46u%e  צO24@k!j_n>\4nL&?:T=@겵nሽUTf\ߢ]8w>U. -[nM-|t5GDk&mdfY}gN9#jb֭DA*欪dRUNj3SPe,ś䃃?$aW'UwE6Xܨ}v:_ޏmnQ[̩&޳VJz\hTU -CWvHsM/Olw?`V_%+`cD~=`@JjH᥈ďJ^-rc.Y\Iܙ?`ti%ĨgkW3Bj6 2}ʇKg-*8G -Aa]Haݸdyfe5bP#P0R7_!}!H ]2VFe[»5-sk?|^m]=T~f~[8e(f:\vp [8;+B5儥<_B_([qU9+쥙yꮠ?M@ڨGBv"ubyWr@.\ \Wr/Sy ,7{PĜĢJEٞMG<6EqBQ!IkTd m{rix j `5iSuR)ͧO=Y8F(ev$;H^ed1)c#jӷ#8+/~{NEx1) ?#!bwŋ.%ZK5:=ޔdpU}mڰɫR҃Ir4LEKyis_|IQxdA&՛KcM׷[KWU+]tv SxD#y,3y](==)y!?3zoOg6#ul`> -%Ѱ :M4<fí>+Hd"\Yuz,Yδ\gKP>[ci=>S?dWW'08iO@ۨTt]O!A=:cx{"n]|tN%>iKcd$F"հðgS68L;|x83Wv&mq8ވ?ɻ%O+5>kA5-|pҋ/Lf*ڽ1辒skߘ1]Ea^yX/Mnpi)mC4z;i<o.:Ӭ-jt.tRC -j.jQw;`-j#<3CD9WݦIsy\$ѶyyNe1i8R* WkNiNڼn{ -{]]ǭ ^ְhr$. S/Q뚡DYĨr1/ %W(M1fVϑIRKѾ=zgt>|gE`Tog!tJuۗT<'f$Vff~ZP[bogo۽8 $+ -\gjC?d?M[e30b!*H1w@&qX5o}йKv#}ؚmڜiljl+ƺ7E״nvmlջ&Kg:$\RyZe&^6SN-9-Ӝr3k3*hNSIA&ξFXf5h|?^+EΊfnLZ-shP(U)K+&i?ctt4h*tVnSMXνe4`p%w ҹ=RGc7vF: JO;Pݥr̈B(4˯:o6wP.ghc^CZ=Q9TdrTɅs~@RBKRB )a*e9:::XJ#^G,4Vz^^|c̼ <2{'&9`9G3VP I)@dҔi5}I -}~5)~|((}Vz'W%1+~'ϔ)n,p((s׍pg1mȌUNO C-fR+GLnmbc>o< nq>V1+WY"2)(}(~YinIsCG[qݐ^SOΝ|]—GK*8=c, fIE*sj, -X&G8с{{zV8K*vLlwh o5H|vlh(ڡ]d4pqI,š0(ce8?`F,*06huc ztL]puJmr'dDl^WG}&w,bW`A=6Ɛdfȧ>&Ez9z6j͆aaEP*ۛ\7g? En*:w9Gt؁(vU10r0a879H]镘 M;}ll\+IkZ'󎟭ϷN}))%tOaNaǙS ΢6sb/ /iari(>i.pXӑ ͉ *Nj`wŐnew:z/[]eJAл[=Km:CcL:+4qI[ -~ӜG]4qMFycjI}ap^x2AEc۵fֺXΫt7-4qM q rO 6 ֳUf-;ȵ칯GFxJC˧$'E>'vĝ^ą-~mdmbuTN΢kѠFTg:۾_ j\ ]+w*K5Z);nEePeÌVw$[ܼt2B$~;U]"}XB6BBU^G4 %A펵z6J9GJ}STK ^%w.VSD.$(9&,8 f5?)C|u>؁|uK/ϪA_#l乐Vsk)>^L)AiLxboRWr9-,TsNd 5) 6q?H"C8zR 1K4ә~cX6uQ9\B3'"@Xy(NX(T'UOaaRq,b E י ``l/xpәl[u ęToeۨGݾMekn` -z?=(":: V~FU&N@m -#@4Ehh @ j%eE}`t|: - BܤlwrS6ڦmJʧ)um+[O'v~K? n Wu-XV;[^{1$'O>ĪIBBTJI3)V#% JoyѶ&~q&ĺjtls`h QIB^8 SKLY¡ -ۖWR|32L# wW'ejw{n╠1Qv-^w$}M3J|)%'Hc2eyW4b6E~dpv'5^4X<d?kU?H1K;N~S9CK=yyLzqJirH//)Ӿs6="< y$IM#lp߳[LEpڵ1ڗ[DF$NN`K'D #{Is;Gr -jx@?BQ4-um_9K!ybRTzPQ(yD<;2Og-vO^MU>ogc4mVk#-{-! ozr1\ner|pc+?d'O?<+?h -٨zza@1;\3( `0B" _w?ڿ[˃pҢ,%?q ?ZX'Dz^\W} 3*ZPZvuoSA,Oݲoij3 :}:8[e hQgbNj暕J~!!K_BI.7N%V y6Hfxlڙp G?>-]4hƔ֜#[IDUd{ ;|+C&=vy3VUnTz7vzvʧek*hgc_bmVO OmmZ [r*>h2TqFe췃 #  /5"P̅fT;޾~HJ3MB{Į jo@**tH<)rzҡ^? -pY-ɂSUMSIm;(nc1fw zgG?QC5U5M%BO8L"K|+<%xvΉ*!#rAÃ^zh|@m*w{$8iZqBz2 hΝ-w\X qVCҬL&;KJnl}"VPCxoИoNwRatP"3=3M ǰQ\~jĚF_zLQFz5^hHuRP O[Qn)`xFfx~?xi>\p^78"ܓɀ?3sef8><3/K 1vCwe5= 4<د7^Fz2jk䐓$,؇(o茰s*q[\:ӂ8koSl[n3>zZ4f;tFwJ? /{sFr#49zъDh4YOCNE1p a5+Vۅw e΋V^[th[hnQ/Es/&> 4F$(V +,ͼ Tx+ALT CŞx5j=+g -vwRt7loou[wvڍnt -v \M8b,]wy'|T6뭻[r<:.2Ѹ 00H4<+*TX\+xtu] n9Sչb74ZUl:6/hՄդ֭FFlmohWӣ2~C64k~+I/i -SSaxJL@]Φ}ujWmT6XcJ<%n4\sիM.#aןל]ex$6fBB®fA>S$3"T捘C<[Ee_&DkvJ'DZ6GMs&ZH+>`n4\4mƩnugh*^&}]%\"S/?_M2{-,Hu7`*Jrp~S*Нb&"$n - JCU˝TY_JS>ʽr;[2bѷxD"<^N -w^)`X+`j]-}T? -6 ׶"E>NS}zaoc|tecSn .(>OG>3% W".QnN91yraL8g9ᐹ#7{>|V*e\*F[!vV w%(g]N'FDf+$\'TPrgסEfUn&dk{/[6LO"' i2:-t蔞oS @'@'랁v|xYN[63Y3$K"'F`qtLVAMb+jٌ0;8S H9/c@WȔ!tgZE@7~tSu;t4xE$e[NվX.OG%dm!t-S`$ZA5i>(HOrKfyP,yL*Q -OEev@g}ε\mXX=Z`|*8`~RU GU>'oHs&咫V|xܚHLslc)/G6@v @X^S3LKLz[zU=f>z{_C -MTk8*Ж:iRF߃aVsF/'uPvt0IJ}`0kU `gp//[m{) -  l"BH'?`WBEni.0O-~x/ֻUs1kq߇ϻ-oVFDD=_gAD$!u6'ߒ]0o$a̿:g/HS $Կ/"ZVcRϿ?~럞O;ki'̨ E>F`){#R%NQB̓cRJzܣzpP+VL$O JwJ:/!iЧ6-𭂃#f^u|%cIJq2r35̫ ˑ/&/is䕑16Б8a1 ف}_IM%OMϹ2u1=*xQovr .hW?y];<~4!k=wy[[}6;ZEnՕf˸p4D/Kf3o8Ͼ;ӱKYNEmrxk!6t:le$bY9Q~kAeoo۹sQ -1@ J}+TKfX][LKiaRO{- Jr1!ۣxȍ~s?=e{Y :gu4*Z}T^.ӝNZybNpl]8޼Nc 3/~|w%y. sjr.t^=u:dq[n{/UOFsk2I# ՉM5K611C'l:1v1T@Flr9h{UcՂIƭ+~fp/ɻx&/^>D -!3Ϋ.x>pS.߯vƸk8q)?#ˆἾ[_W֗">A-8A%86Qm4WV,B滾K=~yp;sqZi}eK`x MA`ep<2p~Qk[̢W۰i)\D;c%JcL2L^{{jxE߽ ->qlp#oAjGdzd617ؾ75U `-9S A9T<⭞Vƽ֍z7N^KADV2:ЭrO7ezrwOg qns;8m5eprOOCk<:grl,߅Qa`OK4w3$Z3Xu*2>9([ʯ%SgBaH\C*ˇ(3/Q'Ol.֘/nrd[ Nꦱ2~OiίOMSu];<[iБivIJN]Wm$RX%P%~Wax^ox w_4=5Zbm t5u-ǴgUlm5@IB!L)bq! bi] kMq||8.NNnpbc`k4fqdt/sޡZu.p+,63/ /F7zUH8dFhݞ;8Ԁ,w{ pS:_c#½,ܛ`;tqK->3.%tn2_.;oQý39g(gVDTRX,{=C -ѐ˻4S㒳{53 _;swKEP4U $ -6 )PY̬Zd1{u嬷Nqd17}ڮ,=/3mW&nFp`O@{W,n| 4>nAΐEH>dSiI@uGSbLgѓ^ "@$g !D'ETXho:^>^r,mA7j%t%W=pߢr?7aQGͦWeqXng]p&0R_ɡݧ3@Xsy 'APQY=^k2x}XX_ZAmu|a%밝"ʘw{O d/{*Yc]>59,XAh:sdÍ>9i>FXN B?l皪L{}%D (0aNo^]knlSJBSj9fJ^j )s$+6Rc -^l/maXZ3yn鲳+9"퓷eM^yFڻZ2tQlnΕX(*qeQ:C -(-#DғG8,GNE_ዄ5Gx_tL1#b}) q>\]{_W4R~{nRS͡.ё-).L$xCƱ(7{AVQl|pd2% biw>'key#3L+m+FeǷmT;ZdS*P'P 0KK휮S{.qaBX[~\m~,f2gg+bĬ;j%C$5"!߸/v색@npI [&f:K<;}*Qb^ - T#EfYC=xVNƃ`4OvG2o'a殼)z -)IFdA/vܖi֩b *COǐ޶?~GhF>WCRR /A]>">|Hm|_g!Lx\ϫ_鶆h!\}T@4\p|&t#xB_0<<tV<&M` Q\X!5L bkϲ|yg0`&x]+^o>`/ppN% D^-q*L`'s'*7ivoX[619| .z+t~Qh=8n?iT:|n2kT˜.+F癣&UÌrݍ&, -<#5(GOR7 |F| - LV@l7 Ɨd -$D?ߺ%3O(@HIИ]>THnF**A~|}B/2»x׵~WPW0*0IE@N@G qAq hX((I(~;y/(f. 8P:3;+9/4s;0y0ybwSzyaMLZ༻V{[Om?šwn{[Oޕ@PE-B N0[[0 ?oG<|߯lOhŒQs#dS?F032oGbxGo摽QB'k6<“~2U6/!%#|L 9Ίv[w}v n>nH#Z^t'zY ,tz.q{f~Ǻ@GQ ؟qI1#A6v=1}uNnky.(p=RS*'fOWۘZwޏTfc}n\MpܸP`QxPҤIsGGúk_V>?n 㑏AZ 8gCzvvH;mVM`ç&j2`qӅtɜK5g#9R_xIko撺\r]\wH [ϬiX\CRPFښ"]c* 6=u0y:b03/xp@Jfwa({~Д{ez%T%s "Xs]r؏3lxZ +D7ek-!Q\A߿ɒC>AцP#F'}{QQ zt˨?e軽 6eR]_n-x+yehwl%7H9B;x;#־F\cyVex[d^Yw?6oV[82{Һ]7? B4 {͛`ǛLlֳ[6G9nv(wt4Ffۇ[̀qzIڍG:e_/PhKyhԴ"{k`zPkB7Xѱ1rVcjLlU&I/~l3q]e1g+s4B) --w6fĔ Za5G(="zHW<6r*6ymk~F}ʦ{X+ kG.Ŋ˙K{C}ǞPf>:LlOO w谏^g\rǒY26rfmXYyܳ݉vv/͝=y*>ho |Xo[ٙb- ʓWZ?Y>hbcj] LrԸKN陭E{YVu=ªsG灣8۰2؞JJ~+:v|XˌYC=_p#T澤&3>L&}b_>| -4'E0dMK}DAezsUfcy&YwhA9;Oy[b -7p{08k*ZiKj^ƩA6)^gR[NE[Wo|aB1[,i;ji%k}RᥨӮ:j|FR #*wI&Өz]+= ZGTTqZ._.4]BkԚ޲άc-Z_ˍTڅιyCɢ]\ -FlhpFlFQVͫsJbQ! H{̖iOIG {~&^ x'{.ܽ>*( ǿچ[R:CSK`Se/=)e_zuhU  pZX, -qgK!VBZO˱pU2ܚbDž\Qɦp=KfE&!Ù^ڰϳvĸtQ:l~c%HKyznVͦ3V R1mN7=x(2-EQPMe~6x}𐯏`μ:KN\]rE)-z8,躺@:-ۖݥ: uͷ?>,ކkb'T,_i&}wU}LxVWAO~TtùhRULhMʖk+͑Y=9ޥf/*!8ux)q}0q( 0̭bHj򢑷_[4BdR:Y8C/ebCA21>h.A rL% EJ3I0TKOy2sKiz&="J,43m69l[Dzҍ@gӄC q~g' @ ҚL~odkw*vvQyUp_9K02lV!?"}CTtF,C#8C F2't+4kHke3hlr0O9xN-BڃԉoU jpQ5_aoԳ1տ0[cue܈KIo8oE)&*uU?1#[>ip^E}'~8FnOjV;+޷MB~ -;u`<?GLfnl-_0?hn? -EE(W@~l6u|ǖ -L-M^XtIQ?g`wHeO Gs3EeѤ4LIuq$~X 8a3YI&ǘQ9]&+3`s!3&21jMyx/xȟg=L}^ky7ɜϵ39t?#J(/WM/ulĢi$ddl2q8ޖ.ژ\\Q31 |tRa>Ш?ҸM^ CݹYմ㒣>^[i5sz܏)}qb&<}oRep5vÀ΃.=PȤ^\D9;/R7 -_pkV{[+d&;cj1ݒSZfXBGs){ZnV엗;Wc9ɪ&{ִ0Vrz_T=dl e1Lkގz6]fcO ,F{%[0 \ xQ#q}QITPk GTky]g\\*`Cмj3ws|-L`Y6S~1] J.G5m#_6{d&t(TJu*j~4:|MzB๐~̮ l{Ѐ4fZV= tM/N~+T==q\ݑx6WPP!vӎ}dFjAieTkQcqԟV(=KAp-s7q|svVBur[ՑV%,d$7,IjZbmmblg@rH,͒Zٕk'LhR8Pd|1A`.l6/ %lHGݭ5[[Gh,{F {ڑ/(W.=%ĒAJkJt{`lq%OUŶbiCiSE;h [u4F%Ǿe~yO:nxkA;r~Ƕ-Aeݵ4e*FEw޳- -d/a.MEQ3^lSK:sjK%SmśSx]cl{J7N}%޲IuMXe{mғSQp;MTxJAϙBjڤjx9K掘I͔"yKvғXY6~?Glj4bn"o<ݧؙʲv Yd2hGX5dǕnSΗ:m+]vtowVOhlX iS VS {'͡HzGLkk7l= `>t~elJyA -syvή/+KHS -=5 m !J'=^[s,+X_pbkQH[9=L8v_ۛ_LH]#9fLGW<:1a>5:HgP(P&;8G. 8" endstream endobj 72 0 obj <>stream -7?> Dg*"Q^?r "./P30 ; ,>LܪOQٝdT}`Ewҭ3 F k|O(=U -`(4(gZrPTYi(Z7c:@1UM.{Rab 14fA} 1F'u#A)ĝrys4]U}BJRTYRy6A}B ;@> ֥f$KaMrO]oѢI[5xK٣p&W=Kjٹ|{zK~ `l0 J{Y!`}'PfD,Ӏ ޳cڥwW&+/IR@7̀OD6EdtK@3` |#tar8v\No(d|)|`\`k:p }8χgoKg0T.[,؋ٌ'U"zrW!;1|wp1A[QȀ GT׺[[ ?0Q@% lv[=x ̖1#fnVC*"7e˴϶~1fQQO TA5_wF@2%&iMrqrY#@{A9 W1L654^].{89[h]d;ECF&7GmaNo'~|V~~g**ÁZI[uJ瀺m>'P 45Џ%oC÷:ImE'Pu9G󮯯;TSk7՞^oQ/$"JU9{fpH d~i -sחUa fn{!ijˊ6/=oL).3q9k[9H[/~\Տ'fR㶥!WGf|35,O -:1-z -vIrqJw-.TE|뭡W}E82 ֧Q?3ٕ?A?`g81{&;cĄkȏ/8~s58Oc*6sekU|/CffPNщEcegsf[xVq/ࣸWwPpGs.fLd7]C׵wZ1SMX\V?1{r gj>@=k 9bQv :Ѹ&N퇧|*4c<|rP}hbCScbw1z^?;A<7X_ҟ?t4Ojj~ !12fW ۿh?Ց-Y|Н[氛]ou[u ASSo=e:O^pG֧܂e) 6*f̡> +Ov+cwnn6;nHUi 1ĞB̩PZ^nI g轧+w#rZD`^@| l>ViqMѼ^XBqt'Gs/uE[שּׁZ]zk!h}8VWrfG謚{쟼"ܹ7"; d5GeJV^Va'\ JlyvEmiu̱5~pkMyO&[e Czӱvs[:9O)OR#Qn#czy)kkܫ;dw^mÓnNo-粕@c+J~sm rgVN}mƮ ?lZ{UAo8՝fVPW۫{sjOzgkAF#.W6l6\GVJ_j;,V㨜r؃5ceZXiY<%.;{L25Tnx?WFnuyv[Zk|mjɀMѓsg>3N%:mrdXSl,VJNkKw陵kl%qmx`Z_iGӒEe[1Fc -a1ay'hSo>Ѻ+WiV]T -*?)yscGd͹ګ2jeWIO4z4{Asn8e_['V/XK:{t f_0Ea]&LE )7L'4oN}QY[˵cKs{oC6>x}gJaQj %dt2W?|ߣou1A TrѫIGV JF~ҼYsZBYڮ0KߚQ!Y`UY*? +(yJfYLueIz -.>}wE4f_S& Oh\ -rT#(j&c%Em/*<*ՀWjum}[j-dDEJ1+SR(]^>W\Cvf992D |k o& -l!Za1-?@MSv"2q'ڃA0e~/8 X\gMnqdvz|S1>gt,-il` !/\٠r8 .<x9R_bêbB+SPRˌ?>7dlytW3g7ĥZ{QU^*`O:oT!{\nvܜ=27;Dny$;:rO|zep{ذh=`i͏\1"mska0ztc`PCg1ssiNeE;(y_ؙ8\P:-R,6Ovj*/~l8kwXvee npBlnTg.R=t/Wn\P^eש!NV,^ita1jB͓J)Ӽb^&Sl7 DX,Gf0f!x$"?,hbu]։I]6Fh$ ~gxx}n %y˗+}4+sG)- cC۳YBiN:zQ --3t*AV4/ CoWm[R6y -~&zTDDK8; -7w -CO$QRJ~ ʭv^d?0#A}X! _:`RLn$Jo&}5;qG@LyL ץ\._[YcnT˘hZd~@LO&=|8 Y;$` 6v\{~瀽"؛S0zd Oz7qJ_,ó|Ԙ!(ܚLkD8oG@H)psSr-K nrx@@ j -d`Xt \;Tc7cs&_Q?%]V<^!nc^=Jčc燫5{4(ޞbگ0mMЯx=q.]KwȆj7W ϱN{OEhiyǾ{מݐưa8غg)t򲤻<9R"EĮw\(V27puDoy⯞@f,sҧ=HӗWWܗ[zs/YYeZŵjMZ{[aV6o]zꉗs\'PSuzvZWcgc?a֏%3*odb~ LjhaYJۯ,CdyO^8U5t da\Ws>3vN%vz:U!;4(t⦠OmH͊Z\8xQ9ތ?ӎYm;㒷>v~kklQti0/qYy.^̣F(> * .kE+OC?3UXء2LJSźgQ%$8^|8cw)/fbo3+.Z7vk?_\SņlCBݗudm }%,J Г ko5tN>UڥTd* 3.KДܞM.υ(+F+TI]nCRf(f3kyåOBfMhjqUԽQcfPgYVؓLެtZASy?ʋj(JMEpiAVoyX?F?"O_7!'uZ}Ao6+R|Hly/Vi5-e_ͬ¦nLa] ϋIlWI/:-ܮ*&(f_ -_hU|\J[Oi 7+̲ ^9xeFE,? yP}~ZGJڝb[ezQڶXS7ϻH DOXPBn k//>]ܘ'rٔ9=.lO`v9L MܛKf64K3u;zDȸnv}5[N-T̂04/jjTK#8VǤQAarvf^I>]ܬ88vSrYǃx eÙ"ͭ)ͭQE{]k!MP"捡gնˡH<ӥv',Z!F7/*?8Wk-{5 --]4D#}'US oz_G!5ԽuB(,O2u'H~ ;AW6W/ӹml~ni3t(-!;bWpX\&0m~z~Oh tSb٥[v%Ipv>n`B->>/8VAh7]rU &qӬLuL0:lG(ݦB -l; .xE:kjCCrDLyAv2)&7oSD" Ll2^b66m-WXYa]n-t@nX63İ6}/[dlˡI}PBndggLl42䜥&]_t|>SsըZm{ -' 7kG\xe8խ*q-lV:Sob])DuJ ߷]^ܲ4U3݈4ᴨRiI:|E'DirO5z5Xۗx┶Ȣzz.Em|Qҹ[ 9R $MV3Y˱;Z#~f;ȩ#[Y%X፧B‘U`4Jz_ 2eFnt/7\ۯoW]nk:X[<}%N24޹#c|8xNZXW2@I݄;N0n0eZ8 _0e1UTf*w@%le[ KSM2PLfrܹr_ҏl -_zYLl5Du 5VQv-HV-HYNBZ*+z`5;u   'y!|Fލ?^px+/֓s&[FMz޸%ɓzsjKL78s!Lm@⼇\gָRBO"(0j Z^Y}H %2Vɬ'x\16h@L(MKV-rϹ++ZS;B%~( \=f.C:O -!`(+|@S*LTF ==A'`'(Z t7e7YmS㢑0Ehrf^nFҪ%*Qzs˄. tɗ]l 9'tW%=!@52\Bpݟ%1(%of3~sب_-5@+Jk&׊ vR*.o,{y=o9h9vQyvyJՐ Z> ~X ` s E[=%2y_LVڀh'ӇQE]q;_oC#'b=Nn?t*-.De`xum]g+`yn" $p:r rǟoC?9rJ٭\o: GX{e4S:bvK8N:AdNϵ -<]D4r:5?ܯkI5 &lDN?a}PoT\be0C2Z2,gO/g 7|-_􆏂N*}UH)@R,h{@  Q^vѧnGaoܱn?ҕmFN#dceU7O'77@b۶ƀҭj@C<P8T4SKX\_~xM0ۿߌo?^7*3bnoq89!o?o -W_a_G>~es/. -QWkϿ/_Aj=I<6IGa:vQvνWl7dk乭q;87h;voOu+wdoJ_^Xv_T:!;7ݽkrWܑv‘-{+ڛ08 𼴈Bi:x^l(d:)LWZWH2*ˊ>\O{~ثK"+E|BX\Zy^ EDẵzp!_m͠MG?kdո -ZG =*|emcԗ7W}wo09<[Ku]{T%OԸt DȌ܌D =: Z3W{vwVv3YDv~ WU -.6}7Ov[~^CƯ| i9ZJ/6KAyďyi 2#V+6efݙ]cF[ΙWXXLۥ"7 l*R+YMHWzZ}rքVܘa_U8&2\}:W㓖 .͏ܴB}3Q|dBH,9R5N!#Iz44 ,ÒiqlL,@V.pmW}Z꾳Tw%%`a9"/|˯͚h6 -BgL>t+;ؼ:Ƞlp~ʿSjdsX"5Exͨ5NkZ};?p'|v054ޫhT*OQlz2rs $/Y^XR9bܙdH rmsҵs뾯Wݥ治Ws#v2+{(Z:.[ІMZhs3skaTs)钫XߏF zɪ wuuEB4mVJq@V{Hv-%tues>S&v28% fK[/1Sӽ#i鹖,ap3Busp4Yh)J0b>t<^vDͫ.:4' ҝQEUJ/ZX[3+5 -~ج:O* )pOXA1(Z{ɯZAKZj?e332cWSq:qT'6ZÐZn>W4֚&glvFj֊{+ܭev#m@Zq٨c.uPKotXi+d-Rvؙ 㧔.|]ӋAia0jb)z| |/nWꇨ9}Nc,JN-Irfg;Wby tąYA+Aj.=z?0Wl\3c+E{Pta bjPJOoJր:7/N1&X弩.f3o[A/HfJ_fXt:'gx(@Sf)^j/4 -7y2l|R&C툡1c2+O4ۏVL-O^M%qOW,mM+~_{f4 }9hoD(όJ egu%=i%7 )0r&.1iW&PGwVhS).&'P{!'O;pCe&W`!ċ ȫ[> b5hjݨ>2rAWٔx_Ԋb/$x}^ރDB ָH^ѝEJ]5Y?2:[]N5*m$1TEBK -6 |8.8tdȎ0S/ 9=vPL-P?pv^hYkfiqW 3h2IfȒP~zSIse{UkVz*"2b ~+%f:N~'VcL. A-թXme江%YfLCh?3!iMA| fy-=vp;* OjO)MR> ✌rT7h󉔖=9 Rg9ТY& -M]![ Wbf˙fwl4tm1W -lrl.Եd7tM1cF#]H/@jAR ykVz*AґSF_<kbQ\X=|}}h~aUc/nQ-yuS- iEiL,+KMKB_fg2ZJ$}OjT&{`>CzCY`9:` nO `dAR`l~|}j -SuȭcdXtJUjBPYvX*q9RTE5¡B*ILt)$H` ,7[ -p<3r{'`]``qNP76|iWh^ɍN#Op!z9=G֝fOHB5]M:  $ЬVA |~`R F DQz<I,~^?e(07\ï od#OI~e۞&7Qw("&HEiTK - u;d\؂I&FI  p Ȋd)> )1H8<7SN,CL ˬH^1/)H S -|ʟWP/`:N  N FF&@ZPP7j6O~$?;KWK|]QoO qZw1/i~<(iĤik} $.v0S0a$3-3c'{8;0LKЕT|u} hsJL2c} w:./ }h}\F=}ܶ?WewɫPp \g,n; ==Ln`\{Tb+@?K <\ciPccɇGB˻#Ǜ'A74Ga#7hy^L?Zw'w/u$y=nyj&^ԌIDџ֖O| ܔw _EuZ ^v `o>΁O䧀*Vm66|,I#F+mi z^d;m >zƟ䄯x~P(:wbS-(;HeQfRoTI7iA5V:w-ދ˶r~k놸uܼ+e%䒕 .}=y:qpׯu+(_y0@ԱwR.+.^`p>oi 'n0Lh= -y2+v^ݜݐ~;G[Fh7XQ ߠ~wzQ?X.+s̏g:<ը՚0 |w:.3Gʃ_zm:uZDT14\=Pl -Ӊ2ЧoMl8}k |گk?WAn'Rx[f),BLٹ -O'vatzx11#7Frzz28ͷ[Vҗy>O,\QV4w7r5طt^e+ZdzƔ7TxS$$Q򠎇{xjmrϾtʥz=1ԛuLuu&E3A&*C7$6Mc]XKxnuPQ2#C:ՓwP͎VW=]XLu/y f':zaeZKm;V WO_zJ+X=M}4 vm6^ -U'Q_UW6F>"M,XDIA OůZaDb/ umgX9*/vvK51<bL6Q Jml>N7.CVupT0JCPQvg>߬*9Q`d%.,HIURϽ3V;9ߎ8c"8l:*Su:nnx-[Y"Ŋ̲kJ. \.U);ԱO&_{F~rBļ^݌ܐ 9ț) 6:.;7:k#lE夆aV^gƐ` z-K33Oy}ӡr4$Dx"Ðb&%ϒggЫZ- ݪ6DӣjC=kcі7$gV8.R]T6 -CrNAvR!u /daR\9b!??;B -`k^;خZ~z~˨vj{ў[dң=VtVu \2#u %r`|$P[! l!WGt9#mRxx -YREgEgKˋ%V-6j8'3o{elU|ê zoT _UqY%FvQqD?r-/Um%g,e8ұBgŽ@tfg p:u$_Zj첵񰍶`ze㰹,㐯8:Yf ~LJZ<ۙm`8Z7Ntㅋੱ'bcca|@*Fx:.uLe6/VőF;,4E3Y6/ü;lL_JՁ U%Ǘf9( l&޶O{ -J8!>)كPT# -RYz +83G{%/WËYM8P,fo)X2, - |W%ܕ j^q?j0Y^xE{-*;}j*{$u,KL<W1"~'Y7l;_`$a6>b]Ȥ }= )MM=azJ&-8o.~Eէ~]ҔuĒۼRlݴcj?k|Rz!آHn;6;X|Z6鎞FJzA= -q)R<ǥ Z.gu;`Lb6^ -֯ -:58!(/]n^;IQt4%C򀥻CABRZNd̊fhSh ;;d!.DdV7e #xJSUzI[.B8F ~m <ͺ_κeGBG@{SXP% @[r=A/h>lP?%x'ڡPI~^N_-_v#jCOrZTd8u3Teu3s:Itk0@kvF˖~V<<&[`YX'-'u5s`MN̫c**& -`z. QLL*,Fc`s ůXVYx0`liyN0VVUbP R~҄ -U9 -6GH#A1J0|6SxGK~ڄVna pa:'ypu'rIR^r9ґa꩜ϸٜ\Y fr 4R6uf)⩬L8GO>D@ - V   ( y%ӀP+֔ܿ\5vQc4Bd9믊 Ż~)Mr QR/Ac`T5}H`H@L- ())IIF3m@风Z)וR 8xs3/UsUrpO{u"+1GI,!N~ZI?~;};3 l C 0I0H`20< -}~Ci@O);SDtc<)U` /54<2?>B${À}!$ಡ -89t=V.c.`o `0 ؽF8|VϒΚ[|zrBe$卡Ԧ? _/~#>6ܯ w0cɟ4EI|OcW3~dG娛ȍVRr(Cߘhk ˩П#U_G'opßޏ5Bɥk7rzL 3 l;^Ir Z$s{4:i`9)"⧋YA݉mm _|ܯo봿*S ȃr+р|B (+Eo+0~ݶM+^doFlyk8>&!{3YjXY\ -9Ղ:㩴]9s?DM8H7ZW?bڿo|ꘫ!n^]48uzj>cLJ?؏^]nH|&U ntl<&핗Zˀ/`_9MACK?ydҊR|<uw~.7rzl]uqj_B+n6*.-қXd4{٬x%6Ӊ,HxMTW 7rqdFz,7m׼,w'8WHNј8جDmӫe< i}{:\t0H˘iF+ =5jyCFkz=\wB}1S򵃌gd#V -֎k5~[n:>zz|mg{9vZ:_|].zWks8 =Q]H+NQS׺S-Bd:ʪю] jP҃z=WesX&4S 5]t;!U!@kmU=iTyYy!3TİAM ZW#m_S~$VXSȢ 6^(U2׉bbTRK--w@m+he?%dkX-Pʓ.#giC4gb¦*F=tzO Ҏm{ -Sj1).mkq#WsvvlyR*LqPMlu1x]Xt<F6Uh8$ׄ-[)2nJ =;#; -!"W -ʍ+ŕPPPfW2kCZsu_ԻrfuSduHADU,H!LHꏻx֑t|hnqb5R3mO믽smU*E$g-!})f AImf=Wٿ)Ρ]DXٺΦЁDuRsxOYzwwuƆCދKZ6?4^pj)I%Ik>˄brJ ?(2O -1΋{txzQ!Eqg ' bĵ.HtBzZxq8ZS]I6 /""I_}Z5WUg=O; ^'1OXXza襹ZMMSwAa`HyN5Uax?.ݺ/\yuĊ7t=Qxnat6}v#JN;w5+ -;Q`5c c~y`tvrdjd;Ev&뼟_OnN[MxNqڐ黕]c2&0O|ooIޱeƴôâW/-\@QEWoxm%c[018~@3:S~W&@fw3f͛v> n0Pڴ%ϵwDK++eF'{opF}d T-0~dMʀ(] 6* f Y>C<ڀɣ- ʛ9ߒFR[^F`pfaF;ඐb%VMUŌ\ARK"ѝ  -1!^2 ÆhW!H))GO_1 L$2+-" qYE[_p2H̆|lTu\H|,ESk -coE!T r:B!i(4{xP7@>Ru@-ēR^_e -$Lޯܴ7>*1cӀ./>le +m>CE:*Ĩ%(6|˽Ŗ໿/6jYMo>~t9F~| F&݃؜jq@iNy nJ5 -tv7LjjGSV˓C6[`7|?_?#k|f6tdP:́#9'Yf~Lx"s^ϮcG1귉q?{x MZn/X XZC*fjf `ry` *@r)녧-A>v gRɒ8 `#B*u<5XGᚻT撁c}+lvn:k}+/;Soc*N](ak~TyXO(C z.Mv":ݥwr;f3Zlo{_ {Gbq*$ĘssϒIs~qJW y N[}tFoYd |;e~up=(מh7Ksy ;EڮE3Oջr7y[kR'Vsd?X݌N RXxOe_ZW]-~79ԵF! RڦC5&/ոtsbcasL!U\56aaC=2|,?ku^[j>bM#d=f;fѐ|iM\ -qZ}O ˬzWc]m\zu1XO׮ Ǎ''NPNTA&V\F_wueNJ_#~ -;pSO9fm\ `1k7*,ntyzj 5 CZǘs:U?Xʢ̄ d +5$rlO7j֬ݛZ~R[1t8|1*^N^_k.֚UTs_*4u4 -)n-Gj>SzВMXq%)c`gR沝ɚ+76BшXߏ ==4O49놻Ônu"+uْ];dIQ`D=LjUsvg -1S! ?XO7ѓ$g6 -alzG,+8ku4uz:ed3k0Gؔk(F򦍻8W蟫H7X([]KΩY66wk/\1漥mgΫwBU@y~BqtZ+gȮ(&ؙ%GF@_rEX-*]gG3~{/dWH6c/>e{c뱍^c=_~R*]ҿ%тi2ϖ^/imLD ލ2f=Rr|f|E5(8y~2_^&/|>Zv5{ iχtĤޣBJKZkzAȹ?X%< K!yJOcc3c5YCS*~u+rE`/6d$yL+v5*Er|蒔=Hud~ӻmݰebX,Vυ}hr|IU+γm7&2UͳLTRڣpU_hp'2}~DI$:"O@LE@t1 8s'Wynf (ຈv_eZ^lZLUW-`pM2nE-`NrԒ2}@h"S# B" # duS2Y@r>hYZQz.~/{,3iK"mN:Cz>e炵uq!ܟ߀'P@BeU58@2D^s@l -;@2 -ZWl2(8FGIY}(-Eݸ(g\&,V4:F 0P_! J|M k .i(85]IO!vg@iЅ Ԥ -t} h݃oDOB$ -{HVΪgynbrfV *= /+ -p:7NqmT3`o0) -M|EG vCLܡܩ&Շf_ˈq{Nv\up%3GmVd_0e jpsC D8GGUQn8p$YuAo.0gzovwwdFZ)5(NGx"S4_0/O|'2O)6]ͿC<§}|{҂ghtH-껶e:QQ #<;^4?K  k@9 n'ar8q8[VoX@ ͜3<- NyY%,6{o4'O fm_% -.Yr7 -[ @@Û+3@lɆ㚸34FSͱL':Jy~UboZŸ̆?J7>?:N# -6*΀V#HqȯFqn`Б!Z4C }XZ_?3%~U F,fsq ^ ~to;aT,T,SSq:\p0{meQR[CPۮ"$ +8uOۖFoōRA=oԕ}ᚩ.+[&M4lwZE`]3RN':Xί-x,L! 'c;OS|Rۼ0ZW?>~Y]nO΃v,h @?rڼ9};Ew,S(FTS2KCkEkNΝw;nblۮj2~or7m`q\.WHMg -h?y_n6=8w5}eYWMm/1[nQ\7)>S a/XѝT]VwηP7auBYhNor@^Jλ7:Hjノ\*A] aTJ5ߩʰzm&UGb6ξ׺Z֊ʻ'-v\FԲ.nʥ]Q8VΡ| A݊@ڋIևb~GJYEFn\|7<_^e(#{7v7`y=]fZgװ|aC5?"Z6/,Y=/nr@wm;^c{#ofu譲|e/Sf\2crcg .dyR™-{j']E\%fݶ=k=}š˘NxUȝy= "} d.wJ\6TOanJ@:*4RIY6pMQ90DqNiwt- i+z8Tߏvvm,|݋{ABz?8m NOe ʚզl5c 8CLt]+vuҚN7u5 T_P%ї i!FI`hl*~4aD 2rq~[OJto1EkGnɧH!fR߆Ϗj=-=2V-An!GyP"U"SnZyO]rL|zfr&۰"gp9m9ujz̖^"Z\YOT,Czxmټ(N4;n?H^:~}߅Q!lL2scpE9eUsf?du%XӠ{DNsNɾK==XEvk-\ ^+xZ3%\(VXUnk~׼C{{ɞy58[`$C(8IONfplIe:N7*JSb!43Ee+ߔL5M2kJn ޽WZu2"gOKS#-M[Pix&sj9532 QKTtө^-Aʬ/EM}{xaSUVܒr+5^N=Cj&4Yyl'~ Jel!<*UUjCklM;(z«&lb|rtJ%gN̗ԚY9}"WN޹LY3Ʌ4p:#wH`)y5^N.Uv;c)BOdk -1rBS ёkY~ԫg'Ccpqq[:L<{Q:-)Op+Dq} Q0B{zIc,&-ORT>S(_pNP{6\;FՌ-[VE`r}dÎ;Ʃ2O%| -2``[%kq"D 3Xo_lA֨rL@t\&{ܯ8f3wORoN&$T:'H^&vkK3) b|z 7 KL q<[sDx8|<_e e9 -c|Fhuuod{!Г.6"=\on!u 'Ax!VM@02P>#wuG+}r8\.X5d1I;BG,bJ)r=} ̷̐ߌ' D+x JbGqL@,U@&ph.ulu; x4ìdTchZIbo眶4h/A'WoR%FNb}W!fc@ {N\= Ț2֥h0  /o72%Z>o>cH q]:v-xK#lb(`S!)@b\괸&=P'7bl;z-vJ쳋C/{m㔟]Zj~E޲8OJ|(c`E̒:ܾlHȀq9 ±xVQ C춀0K 1/Uj=@{),xԪ0;x3ﻨ.>iˉIlHP1ϚS vO_ e}d ldw5l0~m Xe+!`"h+8̤ܽܮ@0S. V]Hި>'~' u^BoR "7X;/x^0_%ޠQ -.0)m?cg$)bE M}+mzg/o{rkF="n g 'acQD@)p1]YLk:M)|2gˊm2=cC4GfopGdך[:a@V3@7Z@= -\+m1 Nz̬5%QQY  k),F__:'f6$Cn1VSK@=>POYLh4$>JҳH'ݚd4S>hM$EYbZwW%3$6|CLns0:0fO&  L -qm_u dViz=8͏i}Fݡos7෉R96[j&-N6D-Yvidr'57\&IONB<}{Wu`O]_rp-Ѽn#4fæ3dlԈzؙE#z` t<o/a"}ZW'ӓEu739J/tG\vwz} ~9iw8{gϴ,cYj"N?޴ dӫ= @<:_=Zz+:~۾&m&4 -4n3_Oa-(W"Y=qqPq -{hxK.ҎuP PnVHOI* kۍIHQ,/voQZp%鵨(J$MJ(&'3^l#N)lY3pl=l`,vؓ2F@"s 'QAD$C૚EZ¹}Nτ]o0+[-iq$sJ$mGzXʞ r*.ኗk}vh8OjS գ;"'mN$ 1_#4 /v;R +s.Lhm"ZàGG30O~]%%3Hy^P8K}ZF 8N6j}␱/1kD_oLl7<=wK1 \+z/NfyGL':0'Q})/^gB/pphmJOͼ%C)VERgN;ty]KSʏgU0u!XݬZ!H3)!vh  ,XMTCfxcq!Sڧ>6WU\Y5uihA"O;;z$Қ@Ǩ5HsT_&H7x\׃Ϙ( u  .H5y76\N.n;5=;>Xm-]PZ~|&AnFp)H\b-hz"y} +/P$#TEN9+3vVLj [>!\p99wY7+ɛdҠ~! lmnЛM?UQ%Ъ@tyXttH?*mvKm5-Tg%5AD_qfW׋C6yW#ݖue -h:oHo@uLj }=TAw#DL|.e&'=YnÍ 0U4\+Cv=^ΕX9(^Z;/@!&=|*9{1ce*XGfxU`E0EJg@``F;A`C6W`۴lj@<& -yhl`|x~hש*|6uߓҮ4%YW*Zb}e $ !.'GP9_G.-:7 -zoHļ x&\';,Uɝy%춍Rv>nM:zڽX[gɅIh u HmdD{qDy}\'y -b—\'nBBl>na#@ …JA16i_Tyl$Oۭ젺)v[1qmsh@>^?%=G@ ;  %9r&0HC瀴5)p] z-͊XyCW+Vn` -dH[f=O&]z-B̑hLzހ^'sP*9BAX(EqP\3efHQ)hga.ҵʚӠӉe<VR|LE^4o&H%ȼ.}Y` vm NlzoVzBX~e 9؝I@Wϳttzs-SxƼwzizY5b]XOH ֱ 'Jguac{"`AЂ/(?sem000ݒy ;cEޜťc09هHU8>0zY(! ް.(7o;76=qWFKK%ǥS=z?bɼb Hi"E>k T%K~a6Nm? -Mo<C t5!ާP֊œ W\ 3{Xt2E=PJR.܆]" 3/wHݿ> 2I睧oc .1H8qmI3γȲwM [<[PSH#an'f6KE' 7z)@sѻP"1_r@Ɩ:Zʢ?f#R_l(l ߲eyߥ)0h F>9fiTn'nVύ^Jώ$U0Ըutgzk#k"D2c/J4öwa5[h\wk4LL{{E?r{U[Ep eMjz3V`v nn~fJ5mgHhxͯ&INbÜnyU|}o2볺Kxq1p|ӥ|.2Fr~X~o^[=Ozߞm'o϶9"a( 8u8cNgv$sm2^_>ߗ+nWɐ'>hX3Jb()I JJR!y\̑$LRL}K硏mL> iW6AuJiP0@T:S>(_S%h4qfRTnZ(fɷ DpZ2jMc[y!5MU#$h%yL¼mS o_RAvK˝'3}GFs[L;G/ -~Ymmа\+@cCi!j_oh1&+QBR\(R*OY8~¢zشQ&KZ9)TFʶM~o5x&qW}ҭ}@>4V¢ƢDɅwcߍEx> K[4_(P~B /_(P~B /_(P.ŽmVxn0b/_(P{^@~ij#XMֲMkXP/_(P~\>l%P,q,{.j0۰ <=NހUW l,flKWΚIeH16KƘ=1Xchi_q_~Bw;>ڊ[SX kCi6ݽt1'ZNA}bI'&/IzoY]fK02aU+`0C (&pNOsv95e!}aZ @,8  e53'6/^@X:.d|ϛڙTlffb1M¼/½GSP)4kK?L;^Qk?ð3>4NY-pv07'O]fӪ֟ ǹl:Ѵ:d̓pOGB;lT#'Q/_(PKuhQvUS*uaa(X0i=P& 27b)S,?l8]]f#7*u[ ү҆_qfa;;:>T~D4X5e(NFkK<׫ W:-Nzo(bb 45*mFO+R_aR6eY8~f~Ϥ_(P(1:Ba)(t f:?}$GXr;Qp˧g߇vqC*~|B tiR3֧Y2K>R mDWA rcsĢ&!-|cT6XG423D}}(Iȝ6T}xp[ vWڰ5!$d?s U:st9fVT<}j ͬ/BǬ -VJIIF0lp6Bdak]i} ybeۦ*59NsѡPT2~ M8(I -+nRc%eODeH% -ZPޔTx{/P W%Cǜ_v{dm2zsm@#$?YߐuL_ |#϶m\b'ҋd'/JKH#;d0Fl -4JR7R&9AgpQ73ЋU?rp繷'1=3-Ng",WqFkcՁԋ{=XΡbI}1-ݨs𧎤«3vQ++QBV*q!5<*ԣ_XD'_(o}}zGl5ْMޢX7fPe$RRɏ5†M:I\no. -~fzU|q1`h.f%h-o @8oO# TL uA?xl:rJpX*)YAC|dG7:[pTTlmٓR# E!p0q~ZIbd}@ n/ȟPt{jj~ -<3'9 AhD~Tsx//d#jv <lS-;*ddLR9Chy9 7X9èF=VŃ1#ā1b ] q[ ]يLA|8VWpRn;SlHvt8l8و]oޠ~*z\TT"s{8iiWSPBAnh;f:N߁\fOnt tۤ/%0TsfׄL &9=9I=K3ΰ[ZnF,F6a_G٠]R?IL/*zJ:[ R7GYJdqE@آ )RGqaz=G&\IoX9=G*=3rWrPC$q}Ya$j9!M"_X ˍG%7Pg/e4jrF*}jvè(Ni_aP݅r㜾`(cfaA$&J y#Y5E>yNjbGt b,6;8#W} ?,T뙮0e'u]PHz/XYC]Uϩ?WHju!rEܔkqo-80Ѭdi q'1hԆfxF <_[zo7[>PH.D0|Ku j/sz/'>˔ÕJi)dy1e MPJRRJ!cQ")ל( :掇bv, ~\ 㸔I o3(~ʏYT:l)R3[[ojQy|E5c@|,I2 \|hb´Lp ɅZueMw~׬zBKS&Ͽ-8>LJ%i^T(F|Q{-.;3pwpI#J-9~V!&iڊK@PN9_+:0wbThLWgCyߋ,)lbOu EfDuHBSd-O}Y4W]6T0=Yl24^QNؖKk{ѶcšXYQnl\hiDW8jƲXɖ]1cA*Z"T[0oƯ{(i wgM]dA%Qڽ6LX4݄+km W0grmH'sHe%U>W]KFHCS,7rUJ#O/Ѡ{N4٨h^C=>Gd$#ke/Er{^R U晉G,%2]"flN;G8LYݠDSoIik S4ػW52p]ԛLL:w_(}`qڟU^5ֆqmE|E S2B -T L&^j`i*8-.Tv,N ٫vwVvB?'b хBP֐*q˴9صxF,|̌՝`KmSY~6X!AW_/jRe bgu^ :f4\UA{*,wgJ㠤A+Ǹ&Qgub:+\s;%_(\S_ZOnڨ8?:ܩ9\~4\i;(J %"rRHg7#\ }RӐ5i嵋U6yfCA!wGZcgƼ2lF6MA$z g8$ ~<1,le W}YB=+|.:JC@sY PhF@!fM1s<>)RIZPrP46:}kX)_mDEm>R|Purf#sJ`d (XAVT|컇`*8s[z#DT``5&cǹA -]K֚ˁ)99ʯr] -5,Fv8yPM n18cz£2<̬~@J|cah^UՌ11g>ׄLnTl1;MMrrq?E_CmM\)dH`0!}`]rդ쫏˟(K~|UX+Ǧ2nA@\bƢ}>̢|\t9[hx6uIH1S)DIw8m[eE|I{YDg˺OJ!QR,v&4SWT+S /NͿPPbj^$Iw;\;sZ!wgbvL )F,mMPOzآMs -L2kIG;dq_REx®h$ta;ӝ&zI$3vDM*L!RDQצ5huh]Z +q ;&$ӏzejZlQMjr=cbn;'P/y콑^7[e+uZe&I|gm ){Y郞Y6zEڏQ2'(g Z =Y۩}P`cb| m$sŘ;sJi"r9xXogK`reVjͧgZ'_g =nXr򗩅ԚW66t8^ ft M1g)_NBykFG#jZ"DTWݯ'p&}>N lIE-}3f4(Se${X=b̊P(7Nm+V*)ɉ-JNYfܔUxC ͩsq\o`=O+:IQC5cl1์UٍI-QFecb5H;Y): 3|Sch/,(ZkzQaYT]7-Ɉ2i ;]7a~îg}}莌,pH)Yt2̭*^a(ajt `iah RKKԔvEiÓKク渏̆Mz7Lvki~+znk84cc= :_P~BA߫@6P-v=qgY}2dNv -A𼷙Z{G-ʧe oW;DYF笰cLƩx7aЮN/PPr^#rAP_hּ+_GN[?伞mNJ|N# b-&v3:珩=Ufa:?44:4;x2N͉D󿵵LbΪ7O_'aOOz[OȑxKώ{;Zef;S$)3b p}Cuv:Fيxt^dU]D!KMV0:mb:1ٮV34m\HX$FSs6n,fq}2ߎfid{:m9p]D"//>g|+v:oAѿ1LO:9>j_x3ZoY ੶X}W+٦vmaP찃"^&>QRwtk:?:,kC*v)gBNO]t. k F2ЧdPM7?.k -Qq!xNr+4!'@d&H7*O ,Uܥ4.!.Mvo;E"&Sa÷8rFD]\ĸ퀨/65{{{{AG41h`ןnp_Y&7ah3v~89o@]F<9,vm0;! WJgvEزEk8Q9Fd[KU`[ "O 'WȒwy1]@KkưW*oLTjW-N2^B(JE^sQ< "6`,"bK=p&-n+Fol4)5p*[ëUuboj,lme]ؑJN4Ge@]Izh:fp6pT}>tꃍl1}dp^5X;EbswrW\z%(:G>0]T?1iMi6.j˶#~̃Ė`qF\VXw|ablZSsj04d:cCsX6-^ƖFўD$pQƂ.X&^ufCA sb ץȭm"#c\bAlj-Kp ,uRm_\I?+a֡&[UC]8+NN;6сZ6@@{uGl]FǎȀs=>)[^r(LuT+;CB3VT>}xo)PV[cNDE.GYۥX%.|*Q"*֎s#֞C+նezA@)Ռ]/Ԣ ]zF ղֳu(Bݥ2Z@Wtr,-nNwεHh*o,n6m[] -IJ~.ԍxC6^9KUGrijT9&sz*2B(Oj:w%c!!iu@sH6h@ܲN16L sݸ,?:h^wX0"($r jU 4kNg؉hugy묹gA!8OIyl8*t,ZMۃO12+;ɦC%QGxOӈ!]SqXDxAQ@O90'Zׅqt rN>["Ǥ"bkRl0I5]~+A ؚفf[sdS޵QSu\wr?-M?J&;pd T[hPn@nU##Y (6 ,,7EvP;g@Ǩk@R;?Ph\Zo@JA䊎PNU* ()`︁m~ħ (i%!kP M=4}VS:EPִ c>ϛ_*byTR\3+-qИ0 -EF`b8Asf5V -8u7JbTzfZc&>bŔC~rށtcp_" }b/+)@2423\R/˽MKƮ$> 9Ќ ) -S?Up:Ɣ$JIy'EFOp(ϝ+7B9ds냔9jńwl˓B4]m1b^0_'qC` 1.Q w\o=NY7"ւ(kk)ԩ'1OǻwnxaF`2"2?':Wd;?T) wqhgy6WjyfUx'G!gAkUPBmlG?&D/&a1#үlHsdTuu6{Z.gC{4S|%)d4/A=yo|7嘫~%(ϳX#>Ƚ"l[eI=I)<-z?{^=߹?xp/h80- -k -eXѓhI$t_g4Ic 8]ίhOTKg;%L଼GJ},?2fwTY-bL&tbs:\*PWQ\PM`{vy}ݧyu߁1D{p_#n _юٜ0,֔c)`s -)%W~9}P& rbGG ES]Z5v%3DDxP,qb*uK0NN=2[v<"1%IF Bumkb85M0\⃇A<㹦$7)-7 >գ>r^ĦpL*vG(.Jw\ȅ2|lyn8l[Y8 ldYb1%s}߻Dȗd(B'Jb. S87 B{1~u<;.9veO1½=6Z;>(cG_Cd0 } e&WtJs" /W^*JIׄ˻,PDA)_3 :J-yЂ("v"|`v3t<tMÎSvuٛn`UX:H@w%Ju0{[e2\|bd ]uIwǡOfÊTF(gpxO9Y‡Q[PvLDD.~*0KԁuO8[rEMwk`i%0S0sL*-ys['j -=E` -:51bNO2Ax%2̘#qg?1V+;iToA4x; Q'bJ~lw1)Y;ń*fD-#½cӉ-Yƞ+mz#C {<2+-YGk} ̵Zн9A8aVޫ{#CCĈ-ϹSpE$BgV,7.FYeQ[3YUDzx:ЗzIKZtN;HVs_ -!"ơ]k\0 QgR`]./'+lk5IJ! Y/_ -]|/a!sr I66lr0G -Yh7!ƄOuCs:qo5~̽ۦҤeWg` V=7VWCEEfׇ*0N" F1IP -ƹc>H 4KS "piIFP<` P<;! p 9hR8I?r)c9=|N]z) x=Y -G*4}vn>Gzģ7.Tg@E8` aG%5DpR`jw:yDRpyG 7qLwX'ѨLH.~ZliFLfL>T%x-YoGbq!w/şL~Z,zDy7%VDmbo -C"{ Q.^T~t*C 5-I%ΛC]Rugu{[C0:6" -qXZ.BC^o)~*ZyNJuE񳫢o8|,W2BQ^{XDxXwҫl(Ѿu||C.z:f;R{K]w!tJqw圻jTDWJxQ8@D-,搔_X; %+PX,G=W8{nwDqPX Ga':qb'3v@4 [!>, ǸʘJr^[ yŗ1|lߗےZ-9eL+aELL<,3l  -T FK1Mome=RrHDv⽩#>51D_M(qð7.p|#lG;KogƿfSb`w)3EEIՂvhbᔣFh4b4r*W%Fn宇Ir⻠=%*)IS[P(aȂ-ڿ,155'j2PՈQi^%64)@}<(QtWS'C ]Socv׃+ -U冴ĶV;|@gBExMZ2 -$PWּ S2&NN}#)}"C9Q#ڴ%=98 &+V'A?q+\(mRϼ]7ڊ:1Ta )qJ/lh/wfQnjI*SDlK(c%V=]v/CFM8Z?%4%>Ҕ(E'\S -i=0%2KkF;7.[Vt{㏇/u{^F_E<`i`M@=Ye2;5аPl]Ɵ%?H[fH^X 3ﱑo;z's#ߒǫ/!JewݫB AK H޿u_aXӤX!Ĉ%=}jӼ)]_="qN8>`) ])D)@veP5?s_`غY?濏`n, zcM~Řw0V0v<^g޽wG:qYROE"J~ -Pl .f<8Uxmp@U6SH"w@OW2+T 6=ДODG74#n="hw*g6ަ|rM$VSٔN75_BS>ڔ`]R3b]Ti%sP~žJ7UEJ7 %Ot흾~^w4Wa?׏C~R2Kݫ}v TrYw|JIH~K|_@@ /z׏M·׏Ÿ3ˏxO H@%KӔ^G6ߓPL_?Q#~|*ZyC"ž~Ԁ -†]O]z_?`Wdz +{ +ܑ #\;]}_]X_{{O_?~յO>88'p8lF2M`Ĺs͵kUc<+QL; '.-â*kT׆ LR:(jڳD)5y5V\^>eAQYy{ҦyN\n]ȤVNTLvQTrԳQ4)QWvVu }jeկbUO Qm.Kz|NeU> -l;ۚfŗWMz> yR]/JB90'j̈́9)bpX W@}Tc1\ zЅ["Eeox98?3r8s{z}A)Is ?$# -7V[BGA,d%ZCBRJ -wQɌzXMmnUޡm97 }(K âgp.Q* +o5r[!T{T[oF nk>kp1,v0VT^FB+#m}i /lj`|EasBJ-]L92>YfSki)f6x+`Fˌ(Xsr52&M 0ڂz蟀+{ϐgfU|@͚gț}Jfm##*!3%eHX %c?P)c+C Bc V?-`I;)Ѱ,'âd%Z ^Q3܀` x}@ZFVO]4bٴzt'kS mXƠh_O%,>ճbLKf> "I5c5 srٺ&OaPo`qO Yc$O-n~CĽk(H:䈃 "Bw/.X4cKɟoe-J׬Ucnm?57T<"C,Az* 6`o󱪴Eh75 8fSN hL&ZzX >ڻZA)ٓJlnHZ"2Rl+aT[)n/?@y$ c&!(o3 HMj?/aّxl&c3>"$l4  -+#@𘡫я]4e@l5VReL nmO]&}]6 P?F,E+}iفlg!f)9m*_[ @cɊTI/ AD2R2c'f8U 3Lqb}$ab_aSJUe,}i4-&u<5q.h&9NKn'U'Ov[J=~\'&-Xn"-k ~u@^Z A^9saUswH Py0'Y7p)Et-hQ㷤Eg<+lƵiGU."e^Џ3_ݜ(;wŸbP"8#]"EOZ g:ÏUHw}fYti qbZ>X`׵XaWEkI,nÆ`k;X j]nt5@Ax #, V/=A,2B"["@o  N'R$R㱮/ACcn p" _2/\DRh波-BRNߛ>[}X磟v,-йeZ|Pt#`lzt2G@yx͓݀1<%M ,UUG#MH|4}eN*6rY&iE<[r?{fM}Cb62NckfPgD Hqґ#cdfcdMȱn0nMi+ʤSo"C|,oN\g³P n(L"JQX[,i3l|z)=fDdWQbU4B7k_ftraGz+z+*̖d4Xdٴ=+th hľD٫$3ʾk"QBw 4>K[‹ vW4[@G`,.ۈݮ2uF:O {/HXnHF; Fsl+ -T+ -:`_8;H8G b}]#D7oI8CDcWuEBK`) =I108E+,-^܍N`$UstibQYoҒw:e`t ޟC,ms*ߞPk\Mxs0h~Pk46;2Dc+4ؼLcX3p1-K *ily~"] bBphw=ŘCFx#)cU{a؜_\Ɓ$XY>\~?mU0sDlr"QWxszrg)Ox)a,SPv!E2^^};7 YIpe7(c ["14MfKph3ەL.? ꫵXP3XTG=Zhr'auc%2L {4bIdZˤX I@e&aS Bݖk^] 7w0sbKVIRPdžPf]:/Vݨ,ܲF -u7 svҁAh_vM("XShlkeu9 4.7Zќ zҬt+yp#17RiaA#AKJF'z<ӢԲۍ+W: -\i>,+F4ƈQầ0AxIM5Sǡ>Ӷ,'Z6z9inE^*2w̙Ph݃<-0Ma]U+W{l7GeܯI/*c` ]q;Fǽ()qQl4p0Xx";ts xҐ{b] 5 *'\cߑKˡ8bi |L:RhV>ݎˁ cU @ $0©c]]QN)0x5͕Y#VD" ˆ^D(z;dn<6u̙%6\ul17;  %=0Nf"̒ɴ]S hPSiyU?9ux)PRi­“r!o*5&. f$AA0gJ4=ZDI2zۼ --XS e ``'i5l`;%D*)؜t`f -׽F](mKMvuLVI1 -fT-TE  -4@ʐ`+-^ -,,mD.Kȫ2QOuo-h07l/"(bԦ4'GTB*M ¼8W mz=<8 2~KS|(,iS Γl2 q:@^EYqL`vo 톔lcr's& (4Qc6\̩bxL[dƾaNj Y+5G=gq -,Q'b3F -2T5Y|X(a5DN@ct7a=d<ܿeDoR; -t80m2CTII4@&3} *7_V`Fož`eFD"SԜІ9Lu9.%bh-:&uKFp%"eK  ׮ CkX ?'V;R(prPRq^g)mל:bג׋' z1{RtO(t0ϙ*梏urs**7ǩ7PtZp*>\Вˁ3^T/;0׏P܁+;oClϸ-\; -tJ!+ɮ\XEn@lq 9 -%MC1ʁ2Ts*I'oTtg F8305~ Ne1(I ;Fs62&-D/#ü HW^v"JnSZv]N@V?>n:LCN@cn7:%J^7%N@"^vxۋOgpޠLN ,GK?_ N,GIggNipҴ  -Xi9`|P29oN@|(uہҒ*:l:Z! Nȯ3pUil$PX'ut]말 w| t<:uGu33I57 -,Ò~pHR[&A^q3HUPK"|Td؞<ߝj1f0\ -әX|t/e2փ͗BZ4Obou*@+J B10Lp۰^L`/b.Jqeblo:ij ǦeXpl0-0w~])ĨIM.ht jbzQa/ZU%'Cal$biZ92LyxM6#/NaauP*Tfnሥ`f?OYikxXU-! +U|'eU\$| H܅SnLQJQ{GRГ2V;jT%J1E7BoKۣ8uAa#Ԫܪ*Al<lj;g~ȵ$[~?\""#"##~؆ZI ׯ4[/5-؏SO\"}a|5+ʳg`h]v~fyG~ ݀?*a&:li|j-&|t1My5i(T0 ą[\?H}Ҙ/N;bE{?)AZ%A({(A#[khg}| :M z7?`3|<'o\KaWDɼ6;%tӣ>؉fiS&{M9s(le*Oa?N½#Y-s;lxw)fy 6'ڥ":jnI\O*}"?fR㵃WnYp/6w/>s󷮿wjݸ~=+[\{aqC/ޚ++?ca:iYqx5cit5!e0bJ\UU/MR]RKA2!IbOv;eeN{c.5.蟘IHrgz=L<ǰIEJh xCeʼ085xSLƘyu/8L!?UљW~|鯉&ޫ{(;k{i +*҉+NOhāAKSe7loAS> Ǐȿvb LOHO~2Ns6kk4'iz1g"O e>gbE?:r>S.bNsx[Taڗh[fЎNP~YyETmBOFJ"U^n |r#8|b%'9?9ׂ~~&Y#9c[olvBOiRx r=z߄̸9bv楜b!;7wg]}C!UN'ǬXp*~;fk9 G+=AGe36 R0&x icb0Pfi#jU*\-I-DzE_;}1_{ cB=)mfmO/o86)ʇP$H.F BpRuvUXv"W!tg|1LVNݰco79~u\965vNܾw';Hy} ?B߼9'>.LTcO8:IW8{|}kJf^gٕېOrYo3mLV~z`%i]D?Flȼ|+ч3ONnDC?<xHduTI.xpb;'ֿ~'Xq񫎲Ҭ~١Rgr,u&UsKQKLsZtz>(Q~SMܟ^.gYٖjq oeFF8$řUT% xu>uDۆOPβ R~~ -^Kͭ׫ZuA.;g]Z7H mw$GDwmI&Pg;W"s,_7A]»M]vqBA]?wr]|O({D:B5wYT =خdDv-3OVnbSbghI%֜c8yI^lJ^|FÒKK]Z~}2 +5 {dMzۃ{~ޯ]ټ͛>`e]DtIXL%8Dl? {ۿ5?\fPq.ά.>?b<{F3~'6&K <7~4On̹x7_ߺ|ۿ8w;oaڅ+B.0X& Nzn/-~^ 9/LyTt ƦvudC?agw_o=c/o{rOwlq/{g\RPg>իt#eMڋAL)k_A@ (!K$(=pRkIkJn򟏒J0`ݽ#c_FAf]z CrTGgUOx̼yP1Y=TGwz|BŃ2w|9-/+ܦv\Ÿn)`q-&8i X1 k,"yaP y=GyyS6r@1 fu|*~AZ5˻,-io*΅&VGGMt=Ůց#6Fxfޞ"zMwf{t!~:(Yߜ}M龻+4OQw9:;q7NԽ_؛KK_V[Q!@>+Pbʪ$WǫgP -!c; ʶWqrá]:YAIF= yz3x>bicQV_hw_>Nn{wcP7LnYd^."׊CV$)Vn6ZV\:yItXҧfPD.^H>]ڵ4Po&@_d/Jzop>R뜭1䎟 -˻G&dbL+ --X4 ӗ?7V!cD#Yzgl@d\N‡IxPO™< ՇۏNQul9OAL?yA ?: A7Q${>oNxXM -)k}/\<U161=0եVc}15ث&ibީ\;C30qThbҝ 5GS9[cy5}vVW7k/u8Ockǧy8u|[;>^6 DHpKLƚc(3qdK!b\t56Ij:0Elm6:t@#3ώ|^j43Uz=`zT/qQIefBO祈C0܇tAR'/B!"<Ĥ]W_ -9t]Ẵ1rUEo_|t5:ozʽC\G~> GAK#.Yp|}8W豤6?9~<TRF]$wS)-1K>ݔD/T$Zr,Q&z"CD腊DWyG>U+RAo9{U%GC= -duupKGo0GCb u$)~]ItɚW[Qw*Cǿ=8Y=N\Q穱Z -29rr8JUHH B^#ѱ4Jka_%}qT*ӽ*r uj8 %ҹ5+ɸ~Zjv ZB.ru틧b:\e *ĜRiɵGxQmӋqM] %NAA$$>hS !<{ -js׆&~}MP!NVܕ#xL񇽓[6(?޿ps9JU|a_/_Z/P|q0}y> ⟨]~atlB4QهL#}Iy=⼿l~s)џ|1}l'V0_*'9>=,p_`˃{7\8T:"etGaϦFؑC?@kTؓ?MMkx=DXw $ϟ?،OMH~!ϟY?h|y;a}Aa,{*kX{ TeL{@p0=y4Q@ G?('~ [X9on>{~JNo04YHzehl 8ˆd^s~t>j8* -29?sC}Ō}= q<'/wF.dx97zI7Y]%ۃgv}vV v~8'jh?{jWz+gWG칕Sԛ=MZC #y˷׾_7߾_{+^l}ǟ/?4+W50i-kE5+_Kޝ^Oʆqwn4v]]7팱ةn55d.ed[;+r~5Z %$~nk1.PmZi㭮;y59uxgL]i-5^FiWS#kMǍXO]zY`DL4N辡+~jś!gͶl(!D=FqTXO3ţyCiZ_:U/7,Z,̒ n(EQL10ڞ֥mσ0vkyZ-9fz"2֋071{ck:s^^j }Saq㲊e_9{"@  -,zJ1+vVH@nVKiPMGi@!?EBj,Ct$WK`3bAk?#4@4Y pH;K2BQ#t7K[0N*D5;ZLh YAO%~VT08gi!O9 FBY;+ݞP'uOj/&n0ӶCV~E9I ghݕӾU=!P+M{AR&}XWC4fpDe[N;3@oQ4xF%}~n6 "@D4ʇT逴bF,!$wJ̤Jii UMm)->-/WRhGJqKzM,W a$]-iW2Q=)J 'P yN ȫ!q|AAX)Z1_jeAzUoh2R'%ARCfru>I\/0_I^=eI%|Z/״/-mNH)cI -(}2aZ -M}%R $1CCQLHT[bE[Tf148&qD*Kkgj\NPʚ )r~,X7>stream -HUn@ +xl}^=E`=u8@ʲ;hoЋr# Ww|gZKdnd6M8U~FGdQn5KQ.XL)?h HuAr5- *G/է}#9.B ?9;vY'G981QR"F .ZN&U^sF:*|>O;F1y{ ,FVU14qlu8DLT0A*4:'Ⱦ C^\-h='޾0-yW_E )IZ~!C( =uQAr5ɷo)LK/n-] :~m45:Sansk)=Ҿx.Glhʁ-WO?wot= _ N endstream endobj 56 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <>stream -H\{lSƏV̂z9i -u6cA -M4 `47`w-b5htc֭JWimLNeNZM;0l흝޷ӻw7]k4WpJΎUfvwGF|6x[<{#}C=<|g {|^`ݑ^~ aڰ֋aaJCǛ.p -$YM6XjTOuAT,CqdeNi -R cG*&[8LlY,J<8>qȋ bhDg ?pxz& =W/ ڋ\S[?}~%H:kIR*VNzYri.'"]`(s(}[ ~6P7> mBT v=B띧/W6\]rn -H22\;/hw{xA?y -'{4.h$s|@ y63\4K~9yumGJ$]Ix;>68?Q2' L's椴FrX<cri=ɆlFStVds( -.gy20=L,muX:ЧB\y2'3ISphI*'ԗ'+O+2\ O?헇T:s%\gc!7+!bEIԼ+&f(e -23y&R4%QcctE˫+JZ3U'rbjnN`gIdS>ʥxI' 2QN -kP(QR tAdUMQ)Q2˲9m'(" -Y^_FT@)P(w>Cd‘Mn)ǩ n@ЫvҸUj|׀gԼIFdž(޹ x*g,Ƣ+5~HY@w%22[*;5F $j'bV|C Q20w"0e&T Хr񮅦s9֡&@>>l$zz,otL /d c:׻}݋˒Bk / -߾N?X}iuYvU"ԫr _r ^?fZ6h -q/ -֮Ѧy~ܹz~ί{aBzs"k]k7~[&ײ]Ka'Wހj~ d=t?qn*X}oh=Kmmwpc m+S!xA `qvxku -}aŰ فVg#ZjubF~}Ѹ[U'уK&Vd٣$ÚzDE?ye+-gc1s6aTᯍ?{j]4;Tg'~Q-MXfef'Mk.G endstream endobj 54 0 obj <>stream -HUKn1 )taDR?n]EE`^}FJ -@#)ݟbx99DEgQW.!O6~#߶Rb/LRHJ9bKb,b!J[ w -n9pRE*y.BjxRSj1!&l;+K4{ԭ0f$ATaI̓ؾmhj3Z{Y(7# -2U [>ɒzX&%˲ FHXRg8]0j"#75vNA=w@ZB3 ݥΐ`grheH|Ʀp^ٗ>$%ܓ!-Lȉxٛ"+,@J8;pV F9e{1z`i<1vd(ubsA #uC*J=)<>.^@ՊҖHO-2DK=RO߃}Yw6c)yus$$p˓A@,t^|c2IRXC3K>`NW؛޲noKTT?`. endstream endobj 53 0 obj <>stream -HTTK1 @cm)zZ6 ,>NG]_~Nn_x{Sq-{~OqDf{g&g1/A1>9&|8j󐨃r~j[B,-jY⦤EsI=>&$SaNahP{`.TVkE7@f'77^v]K}+I>e0V8GڛD֩L%ԫ;v*EbUbzCj]M -AaFR^&_jk;qѸ7)ϹML˩z ->}}`U -_|Eg畩TtB4v2ΥFJw:AF22L;Ye6Rk.zc3E<>P>᫠C3@ﮗ`5-Lb:s.u9BRΞHpP| A<]q;Ҫo:wJև iMȊIf?-5-Kz> v';m c=nfWԐ dUFE%{̵ׁ 09* ~zU 0q endstream endobj 52 0 obj <>stream -HTVn7WbzmEÐ :]\+vE6=})/|x)婕Si5~qlKyuHm"'(2٥{q֤x–bEʉ̿_LSm>^$oUCrp8[uϩB(TX㌪}V GY:fC5W8~Dh.z3X8dHQd:f",ZJ.9'D<?cڰ7Z=zӄ#FHCH=#7ցCqs6̸ \ x"o]Ws#۶}Db^JHW&mWm=*0Fw.aC,HHg 58-7r?=@- -jQ:f5]A*etYۤZ,ʖl)IJs=;ݡ'|luC0Zdk&VF@ʠOIGC-B֑-a9ĆF7 Tw&1C~3u]ZWEsb-@~FVSIOլ#``>co3}t+Vˣ K,$>oe Hs8x*l4 j$n]!>NGsEotv`V7@z ttgD -:t̏Fu^,g=DuJcg -]-VAȎ2 aO(xJ8vBv(+^]w& -4hQy!ͽ#?F}4GL1gEnff _7yڭIz?]#Awuֽ(hdmt]seϞ[h{ȷD .8YTy)גԌy]$dk(w!b B=Q<_<>}/tA endstream endobj 51 0 obj <>stream -HLRN@ +}D蔂8! -Pډce)7kR^|W|u<>ngsRi}$;]aP^kbcTؐڧ|IւEGƃAQ( 0-"iO>Ŵdbi*s8, E;\iUeCtDiaQ*.h.`.j)P0mr>stream -H$;1 Db.[ j"g@Pp}ьƚ$#θ)dSR-*~&!7='5ȠK [ZQgFR R̰i,ޏ', endstream endobj 46 0 obj <>stream -H$;1 Db.[ j"g@Pp}ьƚ$#θ)dSR-*~&!7='5ȠK [ZQgFR R̰i,ޏ', endstream endobj 33 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 34 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 35 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 79.9995 80.0]/Type/Page>> endobj 36 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 37 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 79 0 obj <>stream -HUn@ +xl}^=E`=u8@ʲ;hoЋr# Ww|gZKdnd6M8U~FGdQn5KQ.XL)?h HuAr5- *G/է}#9.B ?9;vY'G981QR"F .ZN&U^sF:*|>O;F1y{ ,FVU14qlu8DLT0A*4:'Ⱦ C^\-h='޾0-yW_E )IZ~!C( =uQAr5ɷo)LK/n-] :~m45:Sansk)=Ҿx.Glhʁ-WO?wot= _ N endstream endobj 78 0 obj <>stream -HtVn$7 WZk&6C>`dx*jf3؞),~R>^ZK9./\^J}?msMF)/_M|OH 9{q֤-DbEʉkoϯG+3Oaeu}ޮ_EJÏoU烋UW<{F(TA0Y٫ƨa,jYNY/u:] _*+ӶsQtTy.ky -.Ҁ=L#Ū4/:Q^s\.@Xl{_uܯM)K 0mQQI Wi D i^36>stream -HUKn1 )taDR?n]EE`^}FJ -@#)ݟbx99DEgQW.!O6~#߶Rb/LRHJ9bKb,b!J[ w -n9pRE*y.BjxRSj1!&l;+K4{ԭ0f$ATaI̓ؾmhj3Z{Y(7# -2U [>ɒzX&%˲ FHXRg8]0j"#75vNA=w@ZB3 ݥΐ`grheH|Ʀp^ٗ>$%ܓ!-Lȉxٛ"+,@J8;pV F9e{1z`i<1vd(ubsA #uC*J=)<>.^@ՊҖHO-2DK=RO߃}Yw6c)yus$$p˓A@,t^|c2IRXC3K>`NW؛޲noKTT?`. endstream endobj 76 0 obj <>stream -HTTK1 @cm)zZ6 ,>NG]_~Nn_x{Sq-{~OqDf{g&g1/A1>9&|8j󐨃r~j[B,-jY⦤EsI=>&$SaNahP{`.TVkE7@f'77^v]K}+I>e0V8GڛD֩L%ԫ;v*EbUbzCj]M -AaFR^&_jk;qѸ7)ϹML˩z ->}}`U -_|Eg畩TtB4v2ΥFJw:AF22L;Ye6Rk.zc3E<>P>᫠C3@ﮗ`5-Lb:s.u9BRΞHpP| A<]q;Ҫo:wJև iMȊIf?-5-Kz> v';m c=nfWԐ dUFE%{̵ׁ 09* ~zU 0q endstream endobj 75 0 obj <>stream -HLRN@ +}D蔂8! -Pډce)7kR^|W|u<>ngsRi}$;]aP^kbcTؐڧ|IւEGƃAQ( 0-"iO>Ŵdbi*s8, E;\iUeCtDiaQ*.h.`.j)P0mr>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 29 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 30 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 31 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 32 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 84 0 obj <>stream -H10 =xQ֚3en,op|d HTTJ[Xn`utYBu歸)NC,WB*)s9)+ endstream endobj 83 0 obj <>stream -Hݎ1 )?I[ -jp } eU3}>ӻ紜_rz|NJ֎_s9}ӷW2I5I%6K?XXpr!wMOZ+9) N҇{UEulؕJ.1HU̱1:*&Hvju 5 lv%>stream -HtVn7WbfE# 8:SuV I3SfM=v)O.OV./Ƨ-<ۤr_ ݿގsK5"-?/wj|9Z{Kۗ}y~>) ?RE"_?\t ;e"*㌪CJT1l֘EV Ԩ͢T5 ^*+}MBh.zӶ.\XrXA: Oc&bUuy/lB<ӺƖڰ;~ n Y@&mߐD+@|h8JMlLl -36|e€Fg&A x"4;>,q˜yKK2IQPwSW*&SuJ1^]m^ :/!r~#3>x 4 7O6 endstream endobj 81 0 obj <>stream -HLRIn0 j!-]=EC`t94(I[N`[ L H2vNs09plٍ74B  O8nv # `~n@^;w=*a1B̌g,XR0- -Hެ2iigRJm+"VsWWO)jzgJ pewonv5aә*`:@!l^Fo<;p -/G{/ue endstream endobj 80 0 obj <>stream -HTTK1 @{8gKX=,8!=Xp}Iwzt۱˕}Gq"=|_#wlEϢV)DKHSnOx'P.E,qooaNF[$̩5G+m [)ncM8el6nQeA:8$Vq7Ut{?1"2R2ն`Sq` "N{gY}ut s?Φ DS@ȱL\8$̃m`HHM ISVzOsnzPt•uP.=yιתHG5;4W kB9_կ&]3$ҀǴ£>HN傫0>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 24 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 72.875 54.832]/Type/Page>> endobj 25 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 26 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 177.0 68.0]/Type/Page>> endobj 27 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 90 0 obj <>stream -HLRN@ +}DuS ->! -P{ iSoHפǻzK/L+*y>y6ۭmAZ~NW6zIւEG>Pδg~O1m6X_eԑųy( UeCTDiaQ*.3 -K&q -0D`t٥O#T23!b=^:6mX\fa쌱\{Vhű4Ap1Q(6c YK3q& hˡ &P9tvpN+k endstream endobj 88 0 obj <>stream -H\RN1 +|,x> endobj 91 0 obj <> endobj 92 0 obj <>stream -Hbd`ab`ddtr -r,LL ( JM/I,If!CG_~~?B L;g(ZZH0i`d``&MSR+KRs< -KRSsrF+!R,VH,H-RHJg(%&e+dixRS RmI/+)L-w ,HUPHIMcqf`11lgѽǛ@Re/s7ˏ:ؾ>*d/~+> 3[7c(1)g\3[׈>]rEg廞y.֊-GK -[ճ(Cn7{헾&6*[>swS zCz]~H-U$`\'?L~jVv[6:gqxyǩm7w2w3}.du7sHfb\'۬ _Q.E%?r]}@΁`=yi?ͦ]ڞiJ&gi;&. is\ endstream endobj 87 0 obj <>stream -HSN0++!!TD@hQ9 @מz3JƧqW'VZt1vu9EoI܉1a*yyX{l&L=fgh -o,˱MT" !YX^9(>X/S^c0h$'D&!;qǣlzrY%IR*U%ӯ_p1\(+9 ->́uƏ>/}x.\կaƿpnpo endstream endobj 86 0 obj <>stream -HLRAN0 @];NJAz+ąEZ8} T)$iaݨ\Po>stream -HUN0S^ -;ϖDI˂X$X$~c;Eƙ33g>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 61.9424 44.5244]/Type/Page>> endobj 19 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 44.7354 60.5557]/Type/Page>> endobj 20 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 65.834 63.9619]/Type/Page>> endobj 21 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 22 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 97 0 obj <>stream -HS[N0)dX;TPJ?>cGm%$.J><'ӄ~3 i0HPmi-uPN,z;̌ -mFg*!Dz.i+-]ʭn@io3 OkmBM"ۋ+Ȳou{gG#I')6QŽ8','9"d(XQu ,1eF\kZ9 F%xQ. JnG.Hm0S_ĪB έ`7b; endstream endobj 96 0 obj <>stream -HT=o0W>yWRԉV(:vHPJ@%~ u낒|~gΖSpy*kxoT,~]4rM"= Dh -$VFrNjx@TÀm$)є]P4ѲHPuݙ`3b͈' XT)c$Q;ͩ¸r8ENY^/O)7)JL袌R # Xܬ}۵R XrcbW%шRc)-A(,AOG4m&־׼yu[aV$ڀXը"hISְy-G;AOY@IG醪z}mv ,r[ -0 g endstream endobj 95 0 obj <>stream -Hn1 y&;WĩBG(3-;ӊRg'st)K-_|RTCbuH6J$A63]v4XWM4*y!=OI ASodw=`x1+cD @֋nEȅ92:5B:鴗n+o,Ѣ("2F=#a.XA;1oϮz^̸`y@`Nx߽ ^] endstream endobj 94 0 obj <>stream -HLRIn0 )Z)(ˡ @IzI` ʇ  yp Y -C\gK8L b2-% m֤WM+d@}2Ԝzg?{jBV~C,]3"&Dz ǒZ' LCU<#FG -$x< M@MC?{)ĭB$N 86ԺY"{|h=otB+W+C-7EࢾإT_Ru`v*tn宄v~bQP-F0>stream -HTTK1 @{b;- b@O#`)A#MRJ߾t{#}SxR⬉pOJۄo+{Ns1b7)DKP/gxI('d2֪x ~6eL[d[Y[sԻV8f!6س5q yTشV bq~~051]&XᴠH \sY-5e4\vũ5x3v1S܏&sTY.Rmp µVGwJOjnZU3|3CW#"!-Pm+|~Ƃl0O6?=>˧{@ p~ R4]hC=sL^0fC8.7XjLc*B̈8$̃m:=UiM ш)C+Rcn'&++2 <W<6s 0 endstream endobj 13 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 14 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 15 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 16 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 80.0 80.0]/Type/Page>> endobj 17 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 72.875 54.832]/Type/Page>> endobj 102 0 obj <>stream -HLRAN0 @];NJAz+ąEZ8} T)$iaݨ\Po>stream -Hݎ1 )?I[ -jp } eU3}>ӻ紜_rz|NJ֎_s9}ӷW2I5I%6K?XXpr!wMOZ+9) N҇{UEulؕJ.1HU̱1:*&Hvju 5 lv%>stream -HLRIn0 j!-]=EC`t94(I[N`[ L H2vNs09plٍ74B  O8nv # `~n@^;w=*a1B̌g,XR0- -Hެ2iigRJm+"VsWWO)jzgJ pewonv5aә*`:@!l^Fo<;p -/G{/ue endstream endobj 99 0 obj <>stream -HTTK1 @{8gKX=,8!=Xp}Iwzt۱˕}Gq"=|_#wlEϢV)DKHSnOx'P.E,qooaNF[$̩5G+m [)ncM8el6nQeA:8$Vq7Ut{?1"2R2ն`Sq` "N{gY}ut s?Φ DS@ȱL\8$̃m`HHM ISVzOsnzPt•uP.=yιתHG5;4W kB9_կ&]3$ҀǴ£>HN傫0>stream -HLRAN0 q8ɕ8-h@ pPۨSeoHה1{^mvdinqS*Ri}$;]ȼc4֧"pIHkKYBEg?}+t2~9 JQC+*j&:t-S-ʪ(M2<@PB9ݎiJ4t>3!x(bփIӬc1ˆ5J ,jXHFp؏jlV]?,bW5:s?M?,̚\DA{88_k endstream endobj 6 0 obj [5 0 R] endobj 103 0 obj <> endobj xref 0 104 0000000000 65535 f -0000000016 00000 n -0000000144 00000 n -0000053721 00000 n -0000000000 00000 f -0000058273 00000 n -0001024777 00000 n -0000053806 00000 n -0000053899 00000 n -0000053992 00000 n -0000054085 00000 n -0000054179 00000 n -0000054273 00000 n -0001020530 00000 n -0001020873 00000 n -0001021217 00000 n -0001021559 00000 n -0001021903 00000 n -0001016215 00000 n -0001016569 00000 n -0001016923 00000 n -0001017273 00000 n -0001017657 00000 n -0001011200 00000 n -0001011583 00000 n -0001011929 00000 n -0001012271 00000 n -0001012657 00000 n -0001006479 00000 n -0001006824 00000 n -0001007166 00000 n -0001007511 00000 n -0001007855 00000 n -0001001327 00000 n -0001001671 00000 n -0001002015 00000 n -0001002369 00000 n -0001002713 00000 n -0000054388 00000 n -0000054732 00000 n -0000055076 00000 n -0000055420 00000 n -0000055765 00000 n -0000056109 00000 n -0000056463 00000 n -0000056847 00000 n -0001001136 00000 n -0000448440 00000 n -0000058572 00000 n -0000058459 00000 n -0001000945 00000 n -0001000542 00000 n -0000999431 00000 n -0000998780 00000 n -0000998074 00000 n -0000995351 00000 n -0000995860 00000 n -0000057191 00000 n -0000058343 00000 n -0000058374 00000 n -0000058607 00000 n -0000448514 00000 n -0000448866 00000 n -0000449943 00000 n -0000457047 00000 n -0000470647 00000 n -0000536235 00000 n -0000601823 00000 n -0000667411 00000 n -0000732999 00000 n -0000798587 00000 n -0000864175 00000 n -0000929763 00000 n -0000996062 00000 n -0000996343 00000 n -0001006076 00000 n -0001005425 00000 n -0001004719 00000 n -0001003606 00000 n -0001003097 00000 n -0001010582 00000 n -0001010191 00000 n -0001009093 00000 n -0001008385 00000 n -0001008199 00000 n -0001015719 00000 n -0001015313 00000 n -0001014968 00000 n -0001013401 00000 n -0001013816 00000 n -0001013000 00000 n -0001013987 00000 n -0001014267 00000 n -0001019908 00000 n -0001019514 00000 n -0001018807 00000 n -0001018360 00000 n -0001017999 00000 n -0001024376 00000 n -0001023758 00000 n -0001023366 00000 n -0001022657 00000 n -0001022250 00000 n -0001024800 00000 n -trailer <]>> startxref 1024983 %%EOF \ No newline at end of file diff --git a/docs/theme/mkdocs/img/icons/star-icon.svg b/docs/theme/mkdocs/img/icons/star-icon.svg deleted file mode 100644 index 8a22ad5d1d..0000000000 --- a/docs/theme/mkdocs/img/icons/star-icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/icons/star-simple.png b/docs/theme/mkdocs/img/icons/star-simple.png deleted file mode 100644 index 36582bdf9c..0000000000 Binary files a/docs/theme/mkdocs/img/icons/star-simple.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/icons/star-simple.svg b/docs/theme/mkdocs/img/icons/star-simple.svg deleted file mode 100644 index acbff6f1e5..0000000000 --- a/docs/theme/mkdocs/img/icons/star-simple.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -]> - - - - - diff --git a/docs/theme/mkdocs/img/icons/trusted-icon.svg b/docs/theme/mkdocs/img/icons/trusted-icon.svg deleted file mode 100644 index 700f275f8b..0000000000 --- a/docs/theme/mkdocs/img/icons/trusted-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/lightbox/add-button-icon.svg b/docs/theme/mkdocs/img/lightbox/add-button-icon.svg deleted file mode 100644 index 0714e6be91..0000000000 --- a/docs/theme/mkdocs/img/lightbox/add-button-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon-over.svg b/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon-over.svg deleted file mode 100644 index 3120d0c32c..0000000000 --- a/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon-over.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon.svg b/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon.svg deleted file mode 100644 index efae83a6c6..0000000000 --- a/docs/theme/mkdocs/img/lightbox/escape-lightbox-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/nav/caret-down-subnav-icon.svg b/docs/theme/mkdocs/img/nav/caret-down-subnav-icon.svg deleted file mode 100644 index 87e765aa59..0000000000 --- a/docs/theme/mkdocs/img/nav/caret-down-subnav-icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/nav/caret-down-user-icon-over.svg b/docs/theme/mkdocs/img/nav/caret-down-user-icon-over.svg deleted file mode 100644 index 642cfbcfed..0000000000 --- a/docs/theme/mkdocs/img/nav/caret-down-user-icon-over.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/nav/caret-down-user-icon.svg b/docs/theme/mkdocs/img/nav/caret-down-user-icon.svg deleted file mode 100644 index 87e765aa59..0000000000 --- a/docs/theme/mkdocs/img/nav/caret-down-user-icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/nav/docker-logo-loggedin.png b/docs/theme/mkdocs/img/nav/docker-logo-loggedin.png deleted file mode 100644 index 8a3d58497b..0000000000 Binary files a/docs/theme/mkdocs/img/nav/docker-logo-loggedin.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/nav/docker-logo-loggedin.svg b/docs/theme/mkdocs/img/nav/docker-logo-loggedin.svg deleted file mode 100644 index 434a21741f..0000000000 --- a/docs/theme/mkdocs/img/nav/docker-logo-loggedin.svg +++ /dev/null @@ -1,1985 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 -jnndp/P7r3uKgb32/mXbZqXC66jHeJ/Atl6nuo95X9N31/+rRatQ9uThsqwTc2D/v23+jeIIedQY -vcv4YqxKT++Yg81F1SDvo2ZpG99nkAMr/RtFB6BIfG1LNOPs76NexvsMLvN1tueo13V9dw+umEOT -q3vfnOrGBa+DII4Amcnr5y7jfWqX+VzGddRzwdcZ3DcH0YE515cb+aje633Lj/H1eI75Ottz1Ou6 -vrsHv8LSer8ckYq8LCj2L++3BcIHuAKvZxXGL2/Lte15A85BL1v9+qaOncs5DyhO8LLsY50ndv3o -uV+vEzz39r6Y/RSuqz62+vVt8Qn+ih893Dj82pePPsyv2wP/Ejqft7Hqcr/cSvqXbb4f45dAo8/g -a6BRj/FLoFGP7DrqZbzP4DJfZ3uOel3Xd/fgu4/+dXPOw74Och7N9XOX8T61y3wu4zrqO9DoM/ga -aNQr9CXQWL/enMv4ejzHfJ3tOep1Xd/dg7/7R1/cOePLfUXuFYr39+8/auf2PtNjfN3XYz534Drq -OwftM/iag36f2JWDHn0H6mP4x7FTvs0+iz7blwH1GF/D/zGfgfo66hnSrzO4h//vT+xXGRaON8zI -VP+6GLD15eEz2OWF5FkgLPl/X1YDDKKVHUX2CmPIq3174zZ+WQ3c2x4X/zrqMb7OYJvvs91HvS7r -6w34daLIcoXve3q89vPjx72/zvJaHdxXdJnP1V/Li3OfLlf8vqeX235te/z766jH+DqDbb7Pdh/1 -uqyvN+DXiiLbG75v63Hcz+8fD/860WuBcF/UZT434FphnFt1eeP3bb0892vb4+JfRz3G1xls8322 -+6jXZX29Ab9OFLlHmG2O9N33H+bXR80gV/4yADAg1ubXAQDBM3QFeo8qCLN9+fpo+vLxn+3O53wd -7xhfv73N93nuY95X9N3V/8qhgNdNPd/qdQrnq75O9hoW7gu7zOcmXMNK3Kzr8zs39fpO93bne76O -d4yv397m+zz3Me8r+u7qf81AwOuOns/0+v3zQV9neo0I91Vd5nMHrhEl7tT15Z07en2ie7vzKV/H -O8bXb2/zfZ77mPcVfXf1P/+Xhzf/xe9//ye/++2ffhuv0OZ/QXCzZrbPqt9qATsHgJnfwfoUFacf -808vc0YnrN6rzHGMX7Zeh/g9z+3XUJm+TvFRP+195nD9aJb/JuOw7emz2taez2KCRvbi+tH7s3CQ -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 -lqxm++DgZNDa7HWt6tYt3z8T9S5+F1J6Zp30D+zatTtfMvKRSovrUqN5Mh9tI3UunLT3rU6n92dZ -+jrtN4dD+3u1AcljS5M4Xu3CqXTz46qszFcpLGLOrvkMriVemeCWzQRHQvTum36r1b1rJ2frrqW4 -/aZ3912712kN7/Zbzbu9fr17ltdlZZsbo2tlm/sEPVZ+CV96A93qquaVgW5loFsZ6CKRYEr7x+p/ -t49OhmfcaRl3Cpe/8OGWl6ap1bEPcxm1ohqXZv3ZaqNZYweWrkuOndmi7cqOW0WXcAKUt9Qctxp2 -Qeg/+OvYLj1zWKMmK16Ca25eKue2uU1WvAT95ipb3eyu6arbpa6SIYfnw2Icb1kUcbsy5iybMceZ -bsiY4yw7aNNZGXN6K2PODLm0MuasjDkrY87KmLMy5qyMOctizLmMteqTeeBXlqldt/9aXtPUlTxe -fDUTc5xjs7+yX1x6FOUSp+con0NhwdNzlCdklZ5jwaI7Fz09x7xRjgu/dl7t1BxX8g6ZTnv4rN4+ -y422WkIX+RTCoi+hqwxXi7aEXpkMV+fa16yW0ctcRuddcZZlBV1ltrpSma3m7tZVVqtztONy23Bl -slqtP9rbPaw3e3+u7h16+XnkfbqCh/1LpyxbHfZfLAVhuQ/7l74OtFn6NloseuFDrDwhZ4jUmJC/ -FnyuLLpQ6x0cDFpDmBn9VnMucb1sUuApUvpZ7RHO37lXeLOwKJ1zMeb65emX1SZuwTdxQiXXyo7T -P9vNOYLjXOmLN/yn5Sk6bM0Tk+WLXzhNYau9SrH8IVvtCya1KrLSQ7G8nn8Zav48lJRX9P9amT8u -eaeQr8wfy7nxWW7zh7kq5o/yhKzMH0uwQ142KbAyf6zMH4sk11fmj5X5Y6nMH7CxHtbnCHpabauX -2oN90K83hvXOk167fAg8VS7JGX7TRcdW1kpn+dmvD1rb/dZ/T1rdRnnteqzWJZyF3x22h40zzI/x -fhVKv2h35sipMVLn4u2WpeNjuydHT+0ofjcHaXGVC6esMZ/RsqQqcBlCtvHpAvMWtk9W+ZcmF8xV -/qW7l5t/aZWFyE/OJclClNRK36sz7JVXt3qXQMocGtSy51NapVMq31WXmU7pItMPLe7W5qDfOyq/ -MmPhZcmm9EksSS9O+vsnHSvFltbUuMoDswSH7+bY/y2JKfgcp9NWZthTbR9XLgptDoqWKAotrBh7 -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 -pmOINZmYrbv1d63HVrVt220pv4sNbRtt7qf13c1Hj0y21QL9H35U3z398teb93765qu79de3fki/ -fFrduN9/eHR45033Hz9s/+PW9a822/Xa4J/5y+8f5F/cuf/y4beP1Xd3dv791eP7/ZOG3n4gH5tr -QqkvkmSw9cfWm1vJP+/f/U/t6/v3bh0P7g9+lLfXrt2/u/OPPhf6Ybjx5vt/7dy/p1q7m+1vvm1s -1WpfvZl41U7zZ/s+vbV97Y7+5eFw64/fNtQv1VvrR72dgSV3eHjz2/yLk+0t9c+fNv7ofPXT2rWt -g+SH/anI/qmLA/3qX7/+e/3FZu3V7JfG5e78dv/e2+3f7t8Z1I5ubt26drJ9/WHzYO0aMmv7972n -J1sHv/2kNzr3O6/vHGwcDjcP9S9ihB2/f7nVEDv/vX/vu69+Ijy2yYPN/7z5T89++/K/W4+aj/6x -UTV//HN9t/pFl9rwut48WbtW/HH9ZuNBI/vX9c1DtXf33vq19MubG09u/X7z/uZXL7c3Wydff/vq -hy8O7zYa9bfwrX3zwcHOIb1ZJLfrut/+5+932v/5obnRufbdV9X+zX+frO/sfvlfaP+N+3d/OEzX -ruV3X/12f73b+Oro5jeP797WR//+pq317cFBut5vPBI3394RHmNj64fBK8s2/VVL/5QmzTvtzdt1 -27/i8TfXq7daGx397Igo+Hnn2v3NR/e++OnBrSIb2H559Gv+xbd6s/efm/deNX+9I/e/+A3Rftu9 -Zgn6Nv/6C+iSX/Of8n91gU/fbry9kVfd0HzV3EnEb1883rpdv/fl9j9u/tKHt+Tww38QCxZZu5bs -/+8jhd9vfrt9z32799ODH6n45q0HvxMy+bN8ZIfu6+Tmt98+uCW3vnvzjcPz0zf37jb/ePIf7Enf -YIvv6Ubm3mILbfzgG/BbaIC4/s1zKNRSCMv+sbG1h6zeag2+U/kv+R+N9Rdbf9zcOrj9438f1Otf -/XMj33/5r+LZtdcv159ubjzbOtht//f+f3+782bt2ob6+cUeMfOXvPnLgz1x89WGer3+dHvrj5/2 -Ntt/5LfvHhxde7O9efC1sAz89netnzd74X1m979HP64/3fn6x+2tG80fiTfMaBr7tveHx7V/3fzu -Vf2/RNC3uanfv/ti+L/rL34YnkySNsbZiA/cEa/7/2BUu3bmPN20+tuDX5rX3sjf7323lWz/+36K -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 -yX+hJ/CJ3NznK92UPf8feYUNGg== - - - diff --git a/docs/theme/mkdocs/img/nav/docker-logo-loggedout.png b/docs/theme/mkdocs/img/nav/docker-logo-loggedout.png deleted file mode 100644 index a0bb9d9484..0000000000 Binary files a/docs/theme/mkdocs/img/nav/docker-logo-loggedout.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/nav/search-icon.svg b/docs/theme/mkdocs/img/nav/search-icon.svg deleted file mode 100644 index bf8e120907..0000000000 --- a/docs/theme/mkdocs/img/nav/search-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/tutorial/DockerHub-Tutorial-05.psd.svg b/docs/theme/mkdocs/img/tutorial/DockerHub-Tutorial-05.psd.svg deleted file mode 100644 index 4cf37d3fa4..0000000000 --- a/docs/theme/mkdocs/img/tutorial/DockerHub-Tutorial-05.psd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/tutorial/caret-left-icon-over.svg b/docs/theme/mkdocs/img/tutorial/caret-left-icon-over.svg deleted file mode 100644 index fa3f5606de..0000000000 --- a/docs/theme/mkdocs/img/tutorial/caret-left-icon-over.svg +++ /dev/null @@ -1,1898 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - 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 -vPOm+48ftv9x6/pXm+16bfDP9OX3D9Iv7tx/+fDbx8l3d3b+/dXj+/2TRrb9QD/Or6kk+SKKBlt/ -bL25Ff3z/t3/1L6+f+/W8eD+4Ed9e+3a/bs7/+hzoR+GG2++/9fO/XtJa3ez/c23ja1a7as3E6/a -af5s35dtbV+7k/3ycLj1x28byS/VW+tHvZ2B7e7w8Oa36Rcn21vJP3/a+KPz1U9r17YOoh/2pyL7 -Z1YcZK/+9eu/119s1l7NfmlY7s5v9++93f7t/p1B7ejm1q1rJ9vXHzYP1q4hsbZ/33t6snXw20/Z -Rud+5/Wdg43D4eZh9osaIcfvX2411M5/79/77qufCI9t8mDzP2/+07Pfvvzv1qPmo39sVPM//rm+ -W/2iS214XW+erF0r/rh+s/GgYf51ffMw2bt7b/1a/OXNjSe3fr95f/Orl9ubrZOvv331wxeHdxuN -+lv41r754GDnkN6sotv1rN/+5+932v/5obnRufbdV9X+zX+frO/sfvlfaP+N+3d/OIzXrqV3X/12 -f73b+Oro5jeP797Ojv79TTvLbg8O4vV+45G6+faOEoyNrR8GryzZsq9a2U9x1LzT3rxdt+OrHn9z -vXqrtdHJnh1RD37euXZ/89G9L356cKswAzsuj35Nv/g22+z95+a9V81f7+j9L35DtN92r9kOfZt+ -/QUMya/pT+m/ukCnbzfe3kirjjVfNXci9dsXj7du1+99uf2Pm7/04S0p/PAfxIJF1q5F+//7KMHv -N7/dvue+3fvpwY9UfPPWg98Jmf5ZP7Ks+zq6+e23D27pre/efOPw/PTNvbvNP578B0dSGmzxPd0w -7i220MYP0oDffAPU9W+eQ6FWgjDzj42tPST1VmvwXZL+kv7RWH+x9cfNrYPbP/73Qb3+1T830v2X -/yqeXXv9cv3p5sazrYPd9n/v//e3O2/Wrm0kP7/YI2L+kjZ/ebCnbr7aSF6vP93e+uOnvc32H+nt -uwdH195sbx58rSwBv/09y543e/59+e5/j35cf7rz9Y/bWzeaPxJtmNDE+3b0h8e1f9387lX9v9Sh -b9O8fv/ui+H/rr/4YXgy2bUxygZ04IF43f8Ho9q1M+fpptXHHvzSvPZG/37vu61o+9/3Y2SBe7/f -296y3PH1rZsbveI/42M1StlwYHkgiHO+OxycIJVsX0I6/bDzcH3vB4Ucc+/m8d3ft68f/Fhbj+69 -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 - - - diff --git a/docs/theme/mkdocs/img/tutorial/caret-left-icon.svg b/docs/theme/mkdocs/img/tutorial/caret-left-icon.svg deleted file mode 100644 index dd2399d1f2..0000000000 --- a/docs/theme/mkdocs/img/tutorial/caret-left-icon.svg +++ /dev/null @@ -1,1898 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - eJzsveuOJbmRJvgE/g5nfzQgDaZCTtLppGsHC8SJi0YzUregUl8WjUEhOytayum8FLKypNU+/dr3 -mRlJP+dEVuSlJGG7gsiMOHbodHdejHb5zPh3/8dvvvzi+us3//bwRbqaD9Pf/d3N24dn7968/fmB -1MMvX7787tt3b0H6yW9/egjr1SyVrn9Zv7KK//Tw9tsXb17/nF/xy3tc/ZPrb//w8Pbwi6vD8eV3 -r/7t4e3vf3r4yU/l29+9ePfyQb7/x9fv8NfXXyw/9btKM7fP3smX+Wch/SwshxB+PofD9a9R4dnr -Pz779tsX/+8D7pRqEtrxzXevv37x+vfHN//Pzw/z4YswH5YDnuC/v/jtw7f7b6/mGJc1HL7YrpYl -LOGQrrYthu3wxXxVlxhrlutu3zz/7tXD63e/efvm+cO33968efnm7bc/P9z8+dnrw6+f/V6+eXb4 -vx9evnzzJ3mrZ8//Y5KOyF/dv3j5IO/86tm7Q4jogetfhvjV8bsXL7/+e776zw9rjSCnr9jkP34r -bUmz+Bvk8tUvXwnly4d37+R55YZ4h9/+4jg+Bl4Q5Sf/+tuH37/giEh3/a+fWrNv33zz6tnb//iW -bzqXFBe86brFVA8LKDXgTUlIes3vHl5981K6m/0Tr/Lhiyz/+R9WR16N33+RZnZYPHyxzOEqbHKD -NFe2fEib9OFcVr2md+LDH188/Onnh79/8/pBe+r67bsvdQSXZZ71f/3mt9+9fHj7j69fvJM3YDub -dtWv33z98FLqt+vvXz5jD7GE/r9W+N2zt79/eCeD/+bld+84K6vfQYbiV8/+/IDxDHqDf/jm4fXv -3vwTn/GL7SAdVWVqyfts23YIlW2vOcvr5Xa/0P/XZtEImvC2iwzdb2Qw/+Hti9+/eP3zL9JW0XlZ -x/kXb1983Ye5RLkp/+MrXNXh3+b/9Fnltd+9e3htzy7T6+bXw3SZr379pdz37vXXN29eoe+/xeqQ -efJaptDLN7/X79rf/EYu/+4bfQd+/kqG6TdvX7xGm9Pf85v61W9efidf/eLtm++++eXrf38z/USZ -wj89PJeVLyP59eEf/u1/ywdZ25zCh9+9ffZcGpDPrc7Vsxff/PS9zcnLvX046JdyJT/67++/+vbh -32Xx9cuVevf6jw8v33wzNNsoz15/ffjnZ2+/+f6mf/Py2etnwsRAby3/6sUf5Ztn0lO97U57QqMy -T76RzuElrHJyg/dUGL56wo2evfuD8KmH119/29rWj/sHV9r3t/flc8zBt4fj2+++/cPhd2/evGzN -7r9qrRuZVNT/27jHb3jB6394rR10fiercHon4T5/c3eR2o/fQb78W2795tnLly9+//bZN3948fzS -DS583+6k333IxPrzq3978/LFt6/6fBoov3n29t2L5y8fvvzzt+8eXj15cA93X78QJvfIMn5vnS// -9Ozd8z/86sW/vX329sXDe1cfBuDfX7z+Wub+l9+9ePfQO+jNq28g5By+/MOzbx74Gu/+cM+aX7YG -81fC+kfm/sUX7+H6YT0cXw/f/+Lts69fyIYiAtsv3rz8+uH14bdg79Puk2xf5XD8evrXabYSWJbD -3311fDv9t2k+/QknJQ4lWVmsZP7zsuLfJL/GUlqp87Yr10M5SrmxcjuUu/l+mu+97B5s/IlDSUNZ -diVrmfirhFVK4e86lG1XrsOxlZtWjuFWin+6neTDHUm34X4sY9fx4fwnDWUZSo4ryqS/YhlKjZsU -/f96KEct0/91aSwfG820G89lGNU+tlKmNrzLMMg6quPoVin4jVGtu/HdhhGW/ycbah/sYxtm/Y1R -vhtHW/7Xn/niWMdpN9BJxhW/MbIY45WlcpTLyQhfW9mPrYwlft2x3J6Mot80cQz7mKHoIPmQbTZY -MkCTjRHG6sbKLcudlXsUX1l4mXEsA0dpsY6v7NAjF8k9+yby5Ve+3sZXueUTB3vClVNGHmHifXGf -mFJa0pqKqBtbOkq5Tfcy2mFJy7LkpSx12Zbr5bjcLnfLvXRkzCkvec0lb/k6H/NNvsv3kzxQkFm6 -rHld17pu6/V6XG/W2/Ve5kKQblhKLiKzl60cy025LfcyT0KNdam5rrXUrV7XY72td/Ve5kuctrQt -m7SzVZHyj9vNdrfdy6QJ1+l6uc7X63W93q6vr49Sbq5vr+84k6K8wHLMx3Ksx02+Oh5vjnfHe5ld -YWJvp5vlJt/IA9xsN9c3x5ubm9ube5lsgaOw3Obb9VYe7rbebrfH25vbu9v7u1nGJd0td+tduat3 -253c6+7m7na6u7u7x4y4lw67z/fypvfy7PfXUuSW93Ll/cmPjOUso9k+3w3ldig3QznuyvVQNi+T -/FeHUoay7koeyjKUNBSZgNN9bGVkYZ35zuOj340/t7tyo2Xir+NQroey7UodShnKOpQ83eVWll1J -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 - - - Ll6Plm4LmKy2gKst4OL248puAQ/6dasLd5702oMrtgksbVRa7QEXcw9YeklY7QFXe8DVHnC1B1zt -AVd7wBFmUcmV2wPO0aMl2gNutN61OruH9WbvzyvgDKzqq7JBmqcnV3aLREsOmik+2YKzqKr1YNjc -ar1r16FBc2wbwkoX3rn9zskZq9fyqtcP6yeDQbve3Tizj4uoYJdmu2Z5sdi8DLlYviPlpWLzrwWf -K4su1HoHB4PW8OyZsbyz/yn2cPnmfQc0S4gubPQ6vf6dPw/P3OKEK9D7Tnlroyt9Cb6Z0v05bjVO -OvX+g7+Oe91Wtzz3TVa8+F7O28nNXncwrJ+jk77ihXeydOzQ4KR/UG+0dhv1eRh0pNJK3n9AX4BX -np6cwVsXIuwXRc7a7Zr9U5Ygf5emxd+XsfVU8/RlwbfRZo6ufPR99CdRRZ712t3hzjwGpk9jq2zt -uhVjx+kYy6cdncu+sPI+XIb3Yc4lZ7WCXup26RzulEWRCaU17bflBcHby5AD5TsSl+9IfAkdKb1+ -vz3DOBR2JFnojpwxdmFH1OJLr8VfM+v99vDwqDUs79heprXzYjz3F27ZGj6rt88ycKyW0HIjsCir -7/yW5GWJMHnc6r9pASWXTyWad6pd4SH5dO1YBR59HK1XrQKPliLwaLPX62z0W62/S/ujFjbq6DM6 -f1KdgxkX3TJcuiNXNr6q2e7Uy/uDl2nLU96e2yyvq1yGbLmCIXClO3LuLdtFr9C10kkT+vVm+6S8 -sOfil6ci9/rHh71O701pYb4425arK93Kn5VZcOl2ZWTapz9VtpJpK5kG+vdVCeTdn++0yQILsTlO -Li64ECs9JMtmTF/W8N2rmyOg9OqyyhEwq4+XmyOgdLDusuUI2C/Nmgu/MJVfYhd9ZSqvjC7ZyrTM -WRvWS1uCNw/r3W6rs9vqtBrz7LEnK1446z0vbSU+bycnKy7w/Fr8WJ4zotmCNXe+4yOXdW6kdH9W -y9HijcmyLUdb7cFxp95oHbW6w8f14+Vbk47qFlVpB+xS7JUq/F9l4qsa+Vq21/itvDbOxS9+ms2X -mnKRRV95Ib7ooq/0mCyb6NuEE9KPS4iPRRR7+6W34ws/VcpP+gWfKuXPbC9jqpfSDPcZnP49mCuO -7aDd6cwT7tW5hOHttLuteukYbLs1ajzulY+jDSpcvMu582f9/RnKzwjzDuv9ubiXyi+uPXbYK6/x -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 -0si2H+jH+TWVJF9E0WDrj603t6J/3r/7n9rX9+/dOh7cH/yob69du3935x99LvTDcOPN9//auX8v -ae1utr/5trFVq331ZuJVO82f7fuyre1rd7JfHg63/vhtI/mlemv9qLczsN0dHt78Nv3iZHsr+edP -G390vvpp7drWQfTD/lRk/8yKg+zVv3799/qLzdqr2S8Ny9357f69t9u/3b8zqB3d3Lp17WT7+sPm -wdo1JNb273tPT7YOfvsp2+jc77y+c7BxONw8zH5RI+T4/cuthtr57/173331E+GxTR5s/ufNf3r2 -25f/3XrUfPSPjWr+xz/Xd6tfdKkNr+vNk7VrxR/XbzYeNMy/rm8eJnt3761fi7+8ufHk1u83729+ -9XJ7s3Xy9bevfvji8G6jUX8L39o3HxzsHNKbVXS7nvXb//z9Tvs/PzQ3Ote++6rav/nvk/Wd3S// -C+2/cf/uD4fx2rX07qvf7q93G18d3fzm8d3b2dG/v2ln2e3BQbzebzxSN9/eUYKxsfXD4JUlW/ZV -K/spjpp32pu363Z81eNvrldvtTY62bMj6sHPO9fubz6698VPD24VZmDH5dGv6RffZpu9/9y896r5 -6x29/8VviPbb7jXboW/Tr7+AIfk1/Sn9Vxfo9O3G2xtp1bHmq+ZOpH774vHW7fq9L7f/cfOXPrwl -hR/+g1iwyNq1aP9/HyX4/ea32/fct3s/PfiRim/eevA7IdM/60eWdV9HN7/99sEtvfXdm28cnp++ -uXe3+ceT/+BISoMtvqcbxr3FFtr4QRrwm2+Auv7NcyjUShBm/rGxtYek3moNvkvSX9I/Gusvtv64 -uXVw+8f/PqjXv/rnRrr/8l/Fs2uvX64/3dx4tnWw2/7v/f/+dufN2rWN5OcXe0TMX9LmLw/21M1X -G8nr9afbW3/8tLfZ/iO9fffg6Nqb7c2Dr5Ul4Le/Z9nzZs+/L9/979GP6093vv5xe+tG80eiDROa -eN+O/vC49q+b372q/5c69G2a1+/ffTH83/UXPwxPJrs2RtmADjwQr/v/YFS7duY83bT62INfmtfe -6N/vfbcVbf/7fowscO/3e9tblju+vnVzo1f8Z3ysRikbDiwPBHHOd4eDE6SS7UtIpx92Hq7v/aCQ -Y+7dPL77+/b1gx9r69G9F7/oG//8zz1qyCg50pPnRWv7+pfHNzYP0+dvH9zcqW17TrUT4OceSJjd -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 -9nBa7P4LvwE/oV8HE1wv6P4vDK8wXg== - - - diff --git a/docs/theme/mkdocs/img/tutorial/exit-icon-over.svg b/docs/theme/mkdocs/img/tutorial/exit-icon-over.svg deleted file mode 100644 index 4cf37d3fa4..0000000000 --- a/docs/theme/mkdocs/img/tutorial/exit-icon-over.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/tutorial/exit-icon.svg b/docs/theme/mkdocs/img/tutorial/exit-icon.svg deleted file mode 100644 index 3ab075108f..0000000000 --- a/docs/theme/mkdocs/img/tutorial/exit-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/tutorial/question-mark-icon-over.svg b/docs/theme/mkdocs/img/tutorial/question-mark-icon-over.svg deleted file mode 100644 index 401f5b8452..0000000000 --- a/docs/theme/mkdocs/img/tutorial/question-mark-icon-over.svg +++ /dev/null @@ -1,1924 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - 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 -7sZxP3r7MfPR2g/RflhkKKZhNPZDsO/4fXdbN5/0Lftzal2678h97+177KSf9l0znfSI9sa1lY2l -WilWVpZsZWFJVuLEtWdbprL+Nv39zfRe/nNkubaysVQrsrYn+W+1kq0sLMmKsl5n9MJBfSzvOH5H -jlfl+GQOCAZhZrffspuv2auF/biw3wL76Y4dc2RH1IlvnvmueMGZL3TLF7jmIxc+4cInkueQ2XIn -nXkjfOta+FcVPrYKN1uEq0Xh5vMkE+lOevlGmN61sL96XYQRZmGISXaUIDvsvYz4rXTHcbsWtlm3 -Igw0CyNNsgUF2Y/vZSLcSjcdhdtutU7CeFdhwEtNwoqDbNz3MkNupQ+P5VpYdS1FmHYW5p2EhQfZ -6O9l7txKxx6FwW/C6Iuw+yxsPwnzD+s8yTS+kzG+kY3hWjaIKtvEmrNsGEk2jiCyw71Mt1sZi6Ns -KptsLmVZZZtZZLuJsunMMu/vZFbcyEZ0LRtSnWRnWlOWPSrJXhVEVrmXGXorw4ddFNsqNtosmxs2 -4hDnAC7bBFqrhXpei/VkQemmDvkNO/9GyUAlBZEdOB8euR2bYQN+eb8YYkfsjOF+YPXKEjaZVFkm -VJDJdGkqRdsjuPvgR3egwHWJXShz9fpOZHsRtiLZbUQI4L2x37XNbpVZVi9sd6ltd9jsrnFDXtwk -hmQyaHGpgULDHcWGYIJDbqLD9djt6AXIafO9NikfKMzd8iNWi64V3xDbLsrv+eZ8ax2Ga0old2k3 -shQJQxN6VMJTwUcluRsK4nfSdDAhW1/HpWaTkqlWsClvqDfDRtgbevHFntBHHgdKB2knLFBSSDLy -RWbAkXPhRDrwrsi2ATjHGXlOnyqd74ych7xHu/gCO9pzox/iRdr1J6vxkxfjsYm/XroiU3cqTjG1 -R0veaUamLU32h/+oQL7TUfcqmO8xTUFrkj7LcdopdjeUoF0pwO/tpNST0pVI/WudXM1sZTkr6azE -C8V+pp2me6bQYcWNQlr7fXuxCJ+YmqZ9Y8rYUbWzi2V7tFTX+6ZBydeyPrF0lTKPZdp/bMaG/vd5 -SY8UToppjk8slzr4QpmeWPHJP5d090/6+WwN+r4YWo+qjOpi9q0VlbDcKOFGimq6sBsxbKVPpjb7 -8nazSJ/+p6vZJVRfveOCPeo6dpX+fLWWZgJYreRmIOi2oTQu0OmHV6b81cwS3Tx1shx9Qd5Og1Fr -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 -syqextKflCf/9MTWIJsStQuZsxDWQZnXbbMpbmy2zfXTM0VP1sknt/W5I93+6Y8v3j3818Px5bPn -/y7LYvfxL3EKyLnZ7CPPAZnOEs56umpPNzummr1txwnuc1V7jtkboK7uLL1sHPDoe6z84+nxx+T4 -x46P/xT4/82Q8Z74/+njAwCstBSQnqjx1OxyYjX5Mc9XObOsfvQJK5OqqY/MFM/dme0oSp0sPT+x -i8A9R7GIvhtDAFz4vbMDT5+Q5/wkP7FZDd9nMXxavMX5YQsfG3GxTy3QD1s4TSFxeyFJwZOmwkec -XDN/rrNrpgsTYReqQ//fOBHGM0l9GgzJqt83FX4oYfU+XbWZkaf6aQEup5Pidvr4EJdhigwTZXrk -WI59OorPJz2bDP2Xa/CSZ+rSwdhlz92mC8ztgn5xMfPwPu+wBRRNnxhRVDSmqIcUTR8fU2SehaMa -H2h2SLfLJGtjn3bk7kLikR/r6KKPMdVdPLxo+hBjXcPyOZLPE7fd9tRtk5klmL2tJW+7fVL6tn3y -NotGmj4tHEmjeg21ynik6eMDkohYBZ5hNaQqQKqynO5P0sOUCxlkfpoKP02Fn6bCT1PhsbRRH5BU -6Sw/1Idf+2OZnITw1d+/ef27ty9ev3vx+psvvhh07fGL6e+/xTdJv/nds3fvHt6+FiX8+uWfv/vu -majf9sdh2662NS3wnC7rmg5xWa5kG5c/wnolc2nlk17z/3/+D/n1Pf90n+M//5kf/4f8+X8J8T/k -5Q+/PfzL/5oPX+slv5dffg9v8vBKiGc3OvxmpPrz/Ga4/hJtd/Vr+feL67fvbl88f/fizetnb/98 -+CVNFr84vnnzUt7+19YTX919/eLdm7dfHZ89/3fpra/+8OLlw1e/f3j+7ueH/yoX/O/yz171v3zP -Bm75Nv/A6RBxVKDaIEPMnBiLTIhqSf/sANXqZwUuW53TdvjnZ2xo13EphKs5rTLu9SqJZK8dI68W -ReA65O1qFZHqICv+SprKh1xwWKu8c5XqNaZDzldB1tbhOS6r+UoWbz3keLUiBFQk/6tFVtVh2a5E -6MfZsetVkAV4WNKVrLVol21Xs3CFQ5IvCxsverdYr3KEQb/OV3nbZIqWqwTjKy8ry5WoIFJrRWCu -3G2Vu8zLekhRnwmElOt2SPIaIt3qZUIMoZaDDHMNMvZruYK8Cf/4hihR0YJkOHMBIaZqr7bOV1BK -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 -id1VbP8XhnbPrg== - - - diff --git a/docs/theme/mkdocs/img/tutorial/question-mark-icon.svg b/docs/theme/mkdocs/img/tutorial/question-mark-icon.svg deleted file mode 100644 index c39475e043..0000000000 --- a/docs/theme/mkdocs/img/tutorial/question-mark-icon.svg +++ /dev/null @@ -1,1923 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - eJzsveuOJbmRJvgE/g5nfzQgDaZCTtLppGsHC8SJi0YzUregUl8WjUEhOytayum8FLKypNU+/dr3 -mRlJP+dEVuSlJGG7gsiMOHbodHdejHb5zPh3/8dvvvzi+us3//bwRbqaD9Pf/d3N24dn7968/fmB -1MMvX7787tt3b0H6yW9/egjr1SyVrn9Zv7KK//Tw9tsXb17/nF/xy3tc/ZPrb//w8Pbwi6vD8eV3 -r/7t4e3vf3r4yU/l29+9ePfyQb7/x9fv8NfXX6Sf+l2lmdtn7+TL/LOQfhaWQ5h/nrfD9a9R4dnr -Pz779tsX/+8D7pRqEtrxzXevv37x+vfHN//Pzw/z4YuwylfyS7767y9++/Dt/vurmrdUsnyfr2KJ -+SC/5xhAuAohlk0uu33z/LtXD6/f/ebtm+cP33578+blm7ff/vxw8+dnrw+/fvZ7+ebZ4f9+ePny -zZ/ktZ49/49JeiJ/df/i5YO89Ktn7w4hoguufxniV8fvXrz8+u/57j8/rDWCnL5ik//4rbQlzeJv -kMtXv3wllC8f3r2Tx5Uboht/+4vj+Bh4Q5Sf/OtvH37/gkMi/fW/fmrNvn3zzatnb/8D117pO/IF -5U/5rHV+9/Dqm5fSv+yOiq/wn/9hdeRV+P0XcauHL5Z5OSQZiFSrft876OGPLx7+9PPD3795/aC9 -cP323Zc6PMsyz/q/fvPb714+vP3H1y/eydOtIG3aDb9+8/XDS6nfrr9/+YxvzxL6/1rhd8/e/v7h -nYzrm5ffveOUq34H6eZfPfvzA8Yq6A3+4ZuH17978098xi9CuJKBz/gvRZkjpR62bTuEylukmg9L -je22of+vraMttOS3KDI6v5Hx+oe3L37/4vXPv0hbPHyR5qpD+Yu3L77uI1nioep/fJOrOvzb/J8+ -srz9u3cPr+0VZAbd/HqYEfPVr7+U+969/vrmzSsMwbdYATIVXsssefnm9/pd+5vfyOXffaPvwM9f -yWj95u2L12hz+nt+U7/6zcvv5KtfvH3z3Te/fP3vb6af6ML/p4fnsrplQL8+/MO//W/5IOuXs/Tw -u7fPnksD8rnVuXr24pufvrc5ebm3Dwf9Uq7kR//9/VffPvy7rK9+uVLvXv/x4eWbb4ZmG+XZ668P -//zs7Tff3/RvXj57/UwYFeit5V+9+KN880x6qrfdaU9oVObJN9I5vIRVTm7wngrDV0+40bN3fxBW -9PD6629b2/px/+BK+/72vnyOOfj2cHz73bd/OPzuzZuXrdn9V611I5OK+n8b9/gNL3j9D6+1g87v -ZBVO7yRM6G/uLlL78TvIl3/Lrd88e/nyxe/fPvvmDy+eX7rBhe/bnfS7D5lYf371b29evvj2VZ9P -A+U3z96+e/H85cOXf/723cOrJw/u4e7rF8LkHlnG763z5Z+evXv+h1+9+Le3z96+eHjv6sMA/PuL -11/L3P/yuxfvHnoHvXn1DcSYw5d/ePbNA1/j3R/uWfPL1mD+Slj/yNy/+OI9XF9kpOPr4ftfvH32 -9QvZUEQo+8Wbl18/vD78Fux92n2S7ascjl9P/zrNVgLLcvi7r45vp/82zac/4aTEoSQri5XMf15W -/Jvk11hKK3XeduV6KEcpN1Zuh3I330/zvZfdg40/cShpKMuuZC0Tf5WwSin8XYey7cp1OLZy08ox -3ErxT7eTfLgj6Tbcj2XsOj6c/6ShLEPJcUWZ9JdIu73UuEnR/6+HctQy/V+XxvKx0Uy78VyGUe1j -K2Vqw7sMg6yjOo5ulYLfGNW6G99tGGH5f7Kh9sE+tmHW3xjlu3G05X/9mS+OdZx2A51kXPEbI4sx -XlkqR7mcjPC1lf3Yylji1x3L7cko+k0Tx7CPGYoOkg/ZZoMlAzTZGGGsbqzcstxZuUfxlYWXGccy -cJQW6/jKDj1ykdyzbyJffuXrbXyVWz5xsCdcOWXkESbeF/eJKaUlramINralo5TbdC+jHZa0LEte -ylKXbblejsvtcrfcS0fGnPKS11zylq/zMd/ku3w/yQMFmaXLmtd1reu2Xq/H9Wa9Xe9lLgTphqXk -IjJ72cqx3JTbci/zJNRYl5rrWkvd6nU91tt6V+9lvsRpS9uySTtbFSn/uN1sd9u9TJpwna6X63y9 -Xtfr7fr6+ijl5vr2+o4zKcoLLMd8LMd63OSr4/HmeHe8l9kVJvZ2ullu8o08wM12c31zvLm5ub25 -l8kWOArLbb5db+Xhbuvtdnu8vbm9u72/m2Vc0t1yt96Vu3q33cm97m7ubqe7u7t7zIh76bD7fC9v -ei/Pfn8tRW55L1fen/zIWM4ymu3z3VBuh3IzlOOuXA9l8zLJf3UoZSjrruShLENJQ5EJON3HVkYW -1pnvPD763fhzuys3Wib+Og7leijbrtShlKGsQ8nTXW5l2ZU0lDiUMJR5LNrlk/X9+PTjz81Qjlq4 -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 -9bSO8fVkj/k6233U+7q+3IPvFshCZZRHz7JOOIItArf5dxpx86gxmJfxyWg1ww5H2JxVMPI+apL8 -8X0GKcjTv9NPQLT43rZJDfs+6jG+zuCYr7M9R72u68s9uMIRTZ7vfXM4l7ZPB+G02dP75y7jfWqX -+VzGddRzwdcZ3DcHM/+c69O2TSVh76Me4+sMjvk623PU67q+3IPvsHzZL0dkKy+LJ/zX6xKuweth -hfHT63Jvu1+B+6jHWD6/qx8W+zfnEcUpXpZzsPPQrp89t+x1iuf23tvuB3Ef9RjL5zfGp/gdP/z4 -tU8ffphfN6ibGfI2+no/3cy4N++jvuOQPoPPcUg9yU9xSD20+6jH+DqDY77O9hz1uq4v9+DLh/+6 -OedpXwc5j+b6uct4n9plPpdxHfUdh/QZfI5D6h36FIesn2/OZXydwTFfZ3uOel3Xl3vwHSbyIt3i -p/vaLIx//T5SuXixX2d6Ge+rusznDlxHfSeqfQafE9XvE7sS1aPvOH5MAcQ35dvss+izvQfVy3gP -wJf5DNbXUc+wfp3BPQV8PbHvMyxszzhcvk+rgzC/PH56gk4OHKM9wU+rA/mtO8jsNYc93LdvbuOn -1cG97fb476Me4+sMjvk6233U+7q+3IPvE2SWW/y6r8eJv37/uPvXmV7G+6ou87kD14Lj3KvLMb/v -6+XEX/d1u/v3fT3G13095uts91Hv6/pyD75XkNme8evWHj/+OoXj8V8nexnvC7vM5yZca45zuy7f -/L61lx9/PYbt8d8P7BhfD/eYr7PdR72v68s9+D5B5h5RuDlS/zIU2Pz6vBkDy5+GAsbL2vw8FOBQ -aCT0PiqicJ8+Q5o+DQNnu/1h38c7xtdvH/N1nueY1xV9ufrvHCJ43dRrHDincL7t62Qv431hl/nc -hOuocbOu3z839fpa903dX/V9U4/xdVOP+TrPc8zrir5c/fcMDrzu6PX5n98/n/R1ppfxvqrLfO7A -ddS4U9fvnzt6faT7zu+P+X5Cx/h6msd8nec55nVFX67+5//y6Oe/+P3v/+TXX/7023hFPv8LYp+1 -oBkrxPD8DzBpPh5CzYRFfPhYx/zT2wxgWe9Uol7H+G3rOcTveW7fQ5j6OpelFtz7zOEG0ixfTsZh -29Nnta09HwsLGtNDfbvMrDWkmS3aP1+5f+0n+JkV/BByAT7+AZWMffo0PnZuH686zSQwy0g/UD+J -qgIZiWzQD84S57HYD1Cb9tj9Y0havjSU0cj48R3791nrF7s/Hx+if//jTfMlr31QRfpl9K0hCyLu -Alv6+I7l5i1Zs63fRzWG7xfGU22ZSLeUmVxE3RY8T58UOrLKiPI7X9UTxg/H/lw+GiP7/D/G49i0 -De9/bsCnB/CjngyKvYuPm9Gr+Vdb2Uqa1qZQvqwj+ef0jcu4Vmybe//2W0f1rwHfkR7/w/OxMNDP -oa7Ir+NU91Qbsw4CiuvcNr0GQ4i4H2P/MWLLJ3tTdvHRMRlm/K3fjxNLfzSmnjCKRmrxiYEHr4sb -KiK1EbV/Nq4Wxic2XLy/seny+fa+d0eBoWxAaP/m7/+nng8brdDMfgbxgAhc9dY1nkX1+zyBAZh/ -2wNCl8WV/Z19vFoe6TKbhfilxrrUtj00sHcujCgnbf4k2DLsx9g/5WwzSgLjoPGl1qGzhXHGwLK/ -c1r37yNTaNvc59T37u/zjwubKJfzXWcL+F/D/LR+mX+ymcgamVPVD6KHox8xW0/YhkJ0GVOMj19/ -zQMhCAcoN9U/gHX3q80JeBIdBi+CjTn5q+DwZSMgw3pyyx9AEJy86Rje9OkxupA5YGN6PDowtRwH -iIc59ahj2xE3Bw/jN6/gvDrjaR5M2ckuXh3WqsrcRvUdTqqwlBk4AxtnXHHxePz1uPFpuFuJbtpK -nttgBsVZ5qp7ScZ8GvGcSgtj8wAzOBZ8Ms7c8947h7Gt9e03f17nhT/xNnJKfx7FVGyt/jIYjQmj -p4U1Ut627k9gtarzohnITO/PT0jG8ECe59r/+nmf1vE/UHWfNAUX1ePR2JbHERpn83NolXdLxsev -CEH8X4xlaWb8+lt+/auRXTzLgjzRr2F+Zg/z0JBYFUb+aswjjPH+g89SusfZjKYDNo7wuPCp/OYJ -+GUCgGTGoM4uib/anHPxSZCEIWPM+8S4ZBubPxZ8bT4xSa1GzEIlNv3wbPN7Vvl6Aue7Yp8RDYlr -7s+KXW9iRGz+VNiGw8YS38/Ha1rP2BkjKlekHj01PeKnMJ95U825X37/3LH3Bf/6G9b6G7fmY/T6 -13HLRw8zZpWfwozWTDLXJ+4Om8fIWPL8A7ecZ9bctpS3kpPIr2FO4Saw2l5G0l1lHLoPMI5wMwhQ -+fGHMOcS244U287mH2t6F76eQLgZTRIZj/PZDxM0T7TA9QvVPJ2DvoTOuTKPxN8jkik+C7Kcf/O4 -cSsgkZ7r2vpXm8MncBsVG9seIvW9kL2xf63F/AZzXufMemzLxgY6iTTDmOKD9Sjp38IY6OPGb9Xa -4qAaor+ef1wYyMDPuH7s1zCHG8aqKNk+5pcVk/lcYRzbZyzTLj3MLZ4Ey8RtjEtYWZMrbE8MJCTz -/vjbp/WTJwVQl2MBQ+/hV5vTkzyqD038NJZiz4rEExs9aADb0LOnBbew1HFTW9629h4/9rGk//ab -Z3D7fPFz8KNjgOF673hyNuZxeWe/PT7YChyXrS3m93BTsP+KQecPeHxjbkcybY9xjDA+xw99nf55 -9elUaiJccV3AwlTOuewTHN8aEDKa4mGe8UJ23YI4wm8e1r/H7le+4I8v0N4IIAh7OTqBJ/kpzE8d -18PwEUatYZTD9+WwcXlFNKzPl1fFG5CboBEctu09k4opY+oxgfBTiReYpDeZsQi0ceV9gBIHyE88 -d+IMfvzt8zpfAPGJfoFLOV/A9V5zDfsbL/u//tu3fR33X3784P/4H7gDnuDyE6Sj8qvNjJHYvPSB -YfgpvvseJoraFuX4FIc/OhRcVL9yxHtp0zRS3KSxwkgmFX8peVmI/Ucv8Q5q0oGx9eQPgQ0eZCTc -T8bqm0xzjYAEqWY2pjgAXxUbERL2Y67nDM6X9OGhxZ1sOdyHuZ4YjPKT/KbaL/Fd9/i5rCaXMTxX -UDp/8+nE7lRd60vWmCrj8jE/1up5/743TDEVvwezZ8nJB+8+1QjnjGJbhFhM/ONbik1bDJsc52yM -mNhT4+rZfFxGkC1idzbl0u7ABv5kcz/+U85xBxju0yEoxv9kZNOhOG4sU5bcaRk/fFtfa/LqewW/ -kEdte3eGofwA9PUvY0Y1PvZa9jFjdxE34+djRQ3gZVwVG2r7bc1xAK4IPb7HOX2sYda1YRyVOCd9 -A+PZ51/jXZlLUZCFhnXPNXhp/3m/lo+f9cemY/pOjTSnja3Hw2a8UAcYMeSzabbmEsB6ls+1OHS2 -4JGmGBNLOCvgCZU4LMMFMuaZ4gEMxe5A6X/adsDDKwBFqJQY7TEf68b2P2r101CLBj+t+BkUOUGr -62vQUVeJ++LOfx4bFKQA7T+3OFe4Iv6hFuc6zuNGQ+Y5/by6pmMcNcUb3+qMs3r6ky5jHICtznxd -03Mp+h7MeI/syC1Uqce3vV/Nel0Bn7EOW68Xvmc5bKRZ5RrDo8Ky2DLHMMYvUgdAw7sYnEjcgxGQ -uDjVJ0z+Cjnpx0eYFDat9skcE1on7EdY7zfZImCxxH7yhnXPA+FZLmAJ91cUN+APHNOe5VJjhb1/ -ja+gt1687Qm4c+HgLVePibmUvg9wYnCx6lxnTbR0KLgcmNT2DUjJd3VqBvS5To95BII9Ea6Q0w/8 -V1sxYi2NxBMh/njY/Mx0VETWYyZouTg+NOeOiLkFPIyAb8WJFa8wZlfWzdNedWx8osNkOE7hK872 -R12RYgIptRz/MG6ngiFj7Q82Z8wwEt3QSIiYf0uBaqHS4sliQaoD1AjOJ2ZPl7fNPTzoCP4Cp7WH -h/axytkHsO/AIbK37ToOgMy19chzmzmP6DnUVI+j+dv+J6GufnG0bMUh0tpjR+lhfGL66KXG7Ska -yj3+a0yc+Zr/IvRG4xP3/BlxAJCI480j5e0nm88IGmteiAdLLAbIp5KRJDZPFuxQoAOM7UR8TBE5 -DrA/9IglAcCoKQQntmOpOEDZL7TGdWzaYuES3xmM9azdSt77c7mk/fuKbXnpHhSSzspdcPyAc7w4 -j0jMmi8/lii+M/CkYuFCn+rDOJbhVQ4A8mzBMqx13/EYQVhnFv7hemYc4NmTqwZVohDLjgJVr8iG -U1Qeax8/MKHf1nuwHpP07Rpes3fffmTtz9pHtXPxaPUoG4l1/iW9A/id7XCuMvbuBLDFx5/3SZUe -zyvGZfxUiQFsjRynxYYWXq7067i5xXSxKsdFdBMsyUsbjhQyesJ+OT0wl+65ld1qfrLZfjd9IY1K -wFqO4UXCh7fZbfSkz+GjeBqBOe9vtOfsbZ/94XIIhLEhVB0uphaqMtceDoYXnlFa9H4zKsQee3IP -zxnivxRrn/A6Pox1u9O9KhM7qsqzPOCvdg4wYjUaEzlah+9tR9L0POqVIJp7/7LDhvDt5V6w5n7u -D1TjGbDtKx4i27/oAFkZNnuJGsTREKyf0IbPymVlnh1n3QdoM76EoqEPoPk090ejYWOcMJu/jdif -xG3Pbc1jMgSQPSZIJlphhNTm8QsT01h3YsCDejguMJ+ZEC/tTzaX/MRqFYvpMD87mNO7sqbdJ29f -e3Yb84gxYvUYT/pEs89wSxXpnRH1iSH1dwrT1ttNjcj4M5MvTGF1d03UCdlNByJRqYjkAk/t3dRc -xYN/81KlE4gaN8bzM4x5f+GK4nTQHML1TWXfwf0hpCd2nSfGMeM8nz0tzxRnhFZD5w== - - - dupXcgR02ENCYVKgERXSDMkH5y22YFi+H8VzZ3/kK78cnuZeiX5G4c2j00OO4348hQhsLaGHffs1 -GKNnaQ7ZSbJ31YZwuzquciM2jx2BUlRAxnC8lyN50BSd2NGM7Hxzu2RFW7Ju4odRCGjfaf5d90XF -+M4mENvBdToO29Y9FUy9KNjyuNcp7f0fiVr42475oznFHsLwgGTsisSGa8jH0sI55NCs4Zbq5r0p -WmT5oE+4OQlBpx9j/x3VIRBYxqdFsDGVFcY0Y+VGTy0CcvPZd3ppvEXPiO00U2Hwuz8c0QPzK1w9 -rh5lbCl/vi70HN2u046VtD3gJkctfqd46dyLDEW7GOzfMoGzzkQcNb6MHZR3g8TXlMO0RH7HVmX2 -hd33O8WCMpwcG2PAd89EWatGIHp/Gpvbc31FPBUZu2LZ7PGSfQLoGr2nN0fpYTyhe4t/0JFgxIYt -Fk7sUxCTE3vLe/cdwGi6qdXqIv98rCTq7SPNpmEE/aRb2/6Uogegk/aIYRFXrgOgXWi8LvThZaxn -PaeMP3olbJnVxxIx9u9XuCumCnQ6WBEBcpIBiai2w/b0jnUAfEV7NTflwKOb2w4BsUOPjHtZwRjp -2X+vSGvkvCjBPP6ojfV4o+3s3tb++efk145Uq0wlFdmDccvg2orDxs2eED2sfdzct087d4r5+P+P -XVq0Kx/3Qj/S1n3FgDlaiRR3WzHexkIfW6YIiZwXqyq1ImucK3yx7XR4cMFB91WRCBIHOGuo/Vzc -st1vlla+tewUJZy5J66g3AEvh5Bg3PEfRhJ01ONjDmiT4gAc1l/OWC3sr+VP05n/ghz+jhinuveP -hP4y30DbnpR33JfCjlC27W8LvdZL/H5WqAIo4CfeokfOZDWYXd5ZDm+0Jq4R31/GHckvkbdNapTz -yQ36MDMi6acVq3m20tnps61LQheOEm5PbaGJCz3ZsmKexrbTQNRWhFBulBj0GE77yebj5rBcJ8wn -kJTb2XaFM/g0Sy2efXFTaxlvWZqNx1Gqz15AQD9pMQ0+4dAfzWnZzdoqrCv2L/O4zV+NHw/6X3rb -FhmBZY1a4TVGmqCXMLKdrrZEFVv8Frui6mrhBsnouClul9dQ2HKHAo/yraxwQHBexRc2r5BV6Xrp -2Swohs4Tjigz/MLnZCrKPc+Up8RRy56l3A5A5hOzYuDxJ5tD+LB2VJ7U8+oTk2CsuEeXzzWmBKDX -t7dS/z/23rW9jRtnGL4/v9fl/6C9u2mTplKGnOGQk0MbH+I0rXPYOEnTdruuLMmxGlnySnLa9I8/ -H++XAAmQOtkjJ7ElRz1YGojEkCAIggAICucoh1dJCjVEg4YrSTGQRbTDBjBvKoRwywcAg+FQubgA -TODOzpaCPMSpjmOYvasT0tYXRIPEx3hASvyMKIB3yzkEOUcdgejxRMzRYu2QZm5NgmT5PD1UznyY -R2Y7L+fhztKUlnrkHADCxfMeZUKCL804jqNwDvQdD9YZRajmPtAlBVMibeUz7ylIYXdM9TXZ5VJI -007sgrnkPZDFfOZNUgDkyAGMinUIUo6WCIY9uMQuI+MiusGqLtqULaSCXHsAznkJRxJSbGom9JhQ -xFvZeAX2MSepcNpAxpsehzdEDBbuWhIHxFA0B8w1AZUh5xr6NTiyj51rZMSTBQesGpdaxgHxjsXA -Wi4moXD3X/tZ53Zj0jvqPBmdHimLyG2Mty5xWCj3DFczijbVhp2ZubNoSOPiFD3TOgcVXt+pvUgt -NPESlM1ziqP3C2YUw2rInwzASFCnIsSrGt+zEEiOZam7wnm5AYhXNLsuxAjsHyrr10Hp70Tzkodh -Bbn4MCyb6ieK1qtMcmPJ7wZhiM7EIDVtn6GpkrZJ0sf7OMpk5EaQIHxIrFNMEt5QSeSyYlR6YOol -hzd0Et7gDsM9MyGg8GlyJgHQ8ALEgbU68lAlbu8Ld0Lw++28du+H27YlrZZgvHT1c3ZUw7kEH0ej -3Q7TA3PCKgV52iPKwu6bNrup5JdZXCzmMgoNthwlIu4kBHjfip/7ZKiHG+AkB+jAbS8EDtMhzbIA -pnUUfLzOzwSXRAYXqnBbOKncJZ1uHHLMBOLL5oQXb2l0QDbAU4g/3mFP+yp/P6xHy34QcnRJ5Uyz -XtZ5RlCuLU7aa1qvpL+J3Sulrmjm8lxl0RZKumvOaV2kcMvMBRc6pBRZGfs5menhDnTehNMWGm7f -yEglJvcpFNVssyx8BHzmriTzcjbj+sGDkvjxTp3C7FqvfQC/dI5czy6CuEhGdnaKv4RLRw1Pg8Sd -IoJLjhM6y4HefIcApLehAyhFTvFcls1I6YK15mcqy6oUmUekcFdH+dVGUmwqcq/rVhzbygqHURwF -yysYBhFVfeiaiRYPVz1x3gE/OSQVJT0OtFan2tiSkeBWeUCArggvDJUvioLCs49fJmaclmAHEJT1 -0Zky4WBXWO9zOm4hdegqGagBLMj/IhUfzQguvzRzqglgZQ9+RueKoD6rbBSHD7d584JEOidc6cvO -MrwfBxHAfdEJCbMinA/Di4RoG+31GBEbV4R31uNl4hTUJwWZEmVC12+S0PGtVbTdFJLILfOgTOtQ -Hy9cdA3IKW4HySj9QpMWswbXc4xkkSPTLGKZwiPAmEE65IAJ4NzrwukSy8p+L23YWQFAxYqIEMzf -3spmnDeGGFz5baBxQtYDOUQ69053umoagRkfmAKw805h2L6kvmlJ8dik0k87feFnbkZdUJL7ZQpS -/yOshaEW0PkwKJnmBDS02wKBklML8HIgB6RYY+OuAXLA3G+bjRNChAD9KQ6sNI1v6m3DibfEuaI+ -WAnQktKVsgnVOL/hpq+PHksEg8QgrOQuh4ySaR7AhraXfNYpdYG8GZ+TcMBcF346pOHwENhUjCba -5oSAQqOME/Aeq+ZzFnwuEe+2J4rx2ZqMXQlhiy4zZ2Fy9CrCYkW+MONCMvxiRZpn5m2YUN0w26ek -qeONrfR+vObMr598EoKVLnDjEBAXI1prpdfU4db2hBbWwpCOmqqMVnDpndIm2oOgYmB4cAvSDDBH -aRafxTjlPJSko47oL3VACoUwGJTr1TZDg5XqoHTZDQh1gJW2PKE2oSfLq605GUMSEp8A9WYLzXfZ -oD7svTaJP7/rgKRQG7cYOGCuNLVKKWIMzyWuCd4ODGq+dxBBEwwBs9ACRZvD2cflSEU0HEgGe4qM -NHKR8m4pYRIGd570OnvmTgkU1OHgeIyO4aETk2jrXTppwgcU+WCnB2vB/J3R5iyINDLpJCMTnwL3 -AKxJTmqT0bvI8G3cMUx6Ex3QRVWyQQgEEYH0Prob1q8W3oCV4JWJHmkeNYAP9uF5pR0PThMSlBhI -S2hZoiWG3kUeAeMUKMKb8o5RGj4kl4UZlvHZtyznkzfshU+DNhEOJwJWyVi9BxuaxUI9Mt8kHG5t -WCFL4ZI+Gluvpk47Z+fBPoLYuHNuo2WNs/Q4oPEh0MbZOcmeIHgJoSA1uCHYR4BajssUGSS8LdUf -96L6mPs/TFIHpJXCW60IyEyfkl8NzBThfCaZekSNj4YV/tgEWD4knQ4thOLqLGQTvzkGI4s0dFRF -STKySD6NJ3lLAbfds/AO+zoAF5qnDJ/xJhkpC394Eq4q1HTum20kCFYxeGrZqSUDgpGy1CxtFO+Z -nfSEy6SLfJyCKVnkQfRSqCpCDa3giWRrWzgWj4cFHVAnpHRJ6Y55WSC5C6ODjmDvs7QvIrADCsP0 -UoYsgyKlhUKwZwwMhgWf5/VhhqmKzq7bGaU9EB03vgvkQEhVdEKr8HtYuHHTkHqG6xuVTAjI3kUo -m/ORJ+IZxTszOBvrZ1duqUXGoyQyg+J2xLG8t+vlHDukOYcBXDFKZ7MM7yzBOKt57eCBya0gkLQu -pgVhDVvLxJ/4TsG+wWsEzBhCi+aezJ28p5UKrlj1c047BbGKZusgpFMlyO6d+0NYcCI/DdZ0DI1w -r0tyMt1LPiFG9jcw8vMghoCAFOxuEREdx4Ddjw9/mpx8InRiWLuAI/IoKD6xSBFBAMxJdFOMfgaB -DDmxBnAvISi8pWqkBQXvSSjSBFw1GTFyVrA7OeHAH4ieKyjfQjgk583GmIOBxVFCNi1I16BSlugJ -lU0FHWGkU3az8z2QA0bzPjJL6ByZxos4qVzEhFxZUf4F5Hx2diXExjpLqVPketCcoAOdaMRx7CnK -wl7eZ3A4pb4PMhjJGQC+PX8kBPJCKEorEc5Z+r3tzFQTubcQaQ4MBKej4TwEiaBcE6QFjoyKZFVa -B2e0wAXH8bD0bZJs+fPJBqi+yun4Z+GtUYA0y+IxcMDcnwnSbsdICMKxagrLycI2Tde8lgD1BZ3D -RY2F63uvmoYAH3IFo18Bgf48hYVhaoiMDoazJzml/uMSuOPBtC8HicFY7QTQBHRht+C1VtQsqYKH -XHG+BIwRILS0U9V8vNICtcoyAuqUgb6xqPSz35x50Gs/gDNnAhALp06h9uKd2TWDiAYaA0+XjDzk -hkzVEEwgSR9BNzO7/cP5YT9X4QZxSY1XGQUjJLkmIMckYdwB1c/8iUSIO8iI0rSWQptyImoaeCVj -14J2BTyQTzB7E+20A/8OrA0llyE/IQRJ8GzLvU4LoR8sRHHeEoKwRaN40UxRCB68zEerQZAITVc8 -c0WhI3QaQztfka8vaCnmaALFOop2llNCgFsHV1YxgrBo0amqaYfDfVm/tYDVwUgOisHVbnTK42XH -pMN7V1CWR3su1OAd3pzXMtivUvWs4P1hSjgLH7/jFn6qTSZ5v+FxQDJ0a3fRtAPiYTDfrSJnBHhz -tpeDBRWVfMhfOc8fFqRj4Rn70iCEKojsxKf8sUBNGrj0vrRMu+vMHYIQkaJZdYkGUTtnrgMmgrBi -QlQ/B0N9GXIO0SE8QKBJfUTjBYHJhh9UIsCQE3NTgAPEgPnEMdpdq83dzThBhbeuAVDSZpa0L8BK -2wI2dMD7aRq6Ww09XSiBQ+b3UBCupklnkAmHv5hI8cEIpx0PVt61rjkYNjNsXgTCURCeP/+Ao81R -PWChZt7QdFYhiyM/8GSFA+JpKCJM6oFBfeS9CUC9w8aiTVwgYgYxqKw4+DC2UzJI5MRH2q8bCiz7 -JPfsumgIyAgK3rdbsMmoXVrSpk0JSucEt5v7EF3BntqwxbdAw5s7SfGNSjhfsJ+KmmMpQzoGL6Hg -onfObIFrLCMwNBW0T/sBCFj7y73HAoApbbANu+eUZNNWyKmlwuFr4B7HhrMTSihdkK7rI7XxAD/Z -xoRRhIACT4yTNYSApKRxUpzKslkJLEk/r01FUcUw2UQR20tvvIBsAwV5asGG6V+WcrSzpvPbeKBe -0QYvy3M6ej81T4WK7JNJwiHMWapYsXeGKYhLzijHHZ9xBCgbSsitjUV5v+BSFGGws9HxmxyCPEqm -YiTHQAdntdIurkmF6BsTBRBZMMWZhIxTgJUTQKGtyAHJdYt7G8MIsoQ1KCkJAfGccQ== - - - RwGqGJcuvU9WOxOwQ6A5Ale7iLwdDwaIn45EGk3GlpBhTsEwK95ekfxWwGoZr0t5KMuiHpSUV75s -xs4RtDRWXcS+YOMeOEccMPPKMdiZydOnCje1PddmvqjkmAdy7quCo8u0s6NT/WDyS9yJdUTARvUs -SQhrzpZIXI0JgZaUKir1CrbyYflZbJ7MEz5eoF3QAiGg1IjauVzo2AJ5Bf2W3aGgjbp2J1sdUJog -60U4DiHzIJKUtyPlCfsmtAtR90B2s9HRuhxkKguElA6s5cIFQHnqUtIiETl98tQQBpWywyF18Qk5 -uL4k6Te0+YB07VLy7pcck7mMUsD5Ezqw+SGhmHrRYYEFG1HQYbvpq2v2aybGCQQLpIwQXqI4IDlG -tbPlEwJZhOVV0KmWoPdobw60QJPTKISzH1CWeqVCBwrSO+n8Vh5v6dDST9WNGk9omIejp3j6z8NC -5kNU1Vz9lHNJwTLsFnxMuE97Wp8rz8JC8xW3XjFW7SKsAJi76DMnd3JOcUXCH/ZjdMgV8hbnmhUO -Og4V+FXJjOpLDvsTfFQNcmFJGmwM8nNAan1O+cgUCwxU2V1lw2lftIuk2fFgKWkB9fsGyGiWcEYy -r/QDUJImnYUhNSyONWfmyU3EP9IrQVBSC88oCcdNAliQzieNc8DAYTJBUjP1aa1yQyfpYZ8e1aej -dtqdNqB+4fEY0uOMx1CInFrgD6lBsAwnljNkv8iLaKcoCjqVl/v8KK60PxGnExfb48v686UJ7Bdo -p2joOC+AFeWNJMe+TjjsHYjorEVw1q/gFY0NMxoUOU1bRW8N1pLFkM8/5YCGxCOqga6+jEQeHrzf -8eCw+0DaV/EcJblDNfnGdMpOML93cWhTCp7RNT7EGcwy3pAMMF4NM14kdcq6jub0UBpMJZRvkvJs -6JQjGLSTfIQgTE30h7tOZc6q61jGW2t05g5feonjeEsr51l2BMxJM0MwzU23HGrFB5+1y0ZWdUdu -JZkg7f9ElHASVzsxsePBRppxftEu1sT3LKFDyiIjjg2HyrWJdvuY3reKZ7e1oAnqo3xMcNdpN82w -vgkZduGtiooaMWZBgDPpbILAkAWqr3kM3BYJjrQHv7HfNABQC973kLkFj7+beA7QYX/hgxo0Oz+M -wCyFntsFvYtc99qlmyC0Rha8gTaU80BGRn6fXgnTJqic7Rpuj2SyKBMjRqw4vFlkCiTlA9I8KLIu -UcCIBYZkozh5CYFmGYuSwjVMuZBs1420oJwSLPd8DJ3JXQJuz3E042xJCrrR0ZlyW1ry5ksox1yQ -/oK3Dd48ZUDlTnmbR/kKcpfkxIvTwrOsQdkoibl8HgTtzjD6AXPrkbGimxqL8TkOLewAMqqfOj0F -gIpcqZl36BsTCMAGPmOihK2p16JNEbmVhPC8UXBiFO2CghyCIopgSH3G1yLhlLjaJfpzQH8UlbYy -iKBIonVOUSBrkURWM+NjiRDIm0/v/OCpUWQhsQylFDF8dAaAvHGlhBcWYUH8Z6tnXD9YhiiGshBR -NALmWXJApdhTxoedIDOMJBMtZlMMmW04Y66PNwQgq+XemluA9YDTTud0yBbS6Gi2DXkvqgVmIbLF -H9osYPPO6RFDvh7JuUu0S+XhgFpSEJAonHiywOCmCqoOgHnbR5p2Id0xWofV59wAIIuMiLQpRx0H -wwymESIqSr9XKNI4NqegfRCA2ZpY+D1TEQ7CaZeGrIo5ixLWdFAJIAQhoaRxIrZIOS4Rdo2GGpAm -wbpnQgMCmNQMQJqSRqH80V0oyWqZ5PQ+WJamAe6sfWMLNih7izakYqKpicu0q5/R4V1Uf3zmqXAY -UoesRRlPeIzk4eqS9QnYq+x4MK8Gyp+yBRiLRxJNFkh5SED5IXdrAQI647I5ldUFTSSyB1tgcJRE -KdmyyNVBMrtQkfaFKR4cMOQvxb44BGCV4RU9ofoUDe2dCuP1OdAGoJozV4c3CeJB48+PWSBdEeDz -XlN9ydof2g49kFnNJ79THCUyIgUBzFnPpWdBxX7hUQTsvjEcS1woTgQalc0iXZ0yvMAAsHFVRnxR -5Cnrae7sEiBlwx4n04JBIQJEea8UH6Azzr3iKeiziYWIFAskQ6xxix8hCEsRxeQUeWw8Ms7ZBAnV -ON0/Xn3uEOQczw0rlE/zFZuZyN1bgCGKdBSOOYD8dXw0RWaC6mMmpCy23AAwBENwlAogCOZGv5jC -uwztYynFDTaAR1aQmakwnIoqWg0gEIfkK69chpOYGLeldQiKKHQx0Z5cJiQcZpEJgdJsJeI0QYXh -bFHAXJoyzYFBnpQUH+iO2W85ZK+gLJhReASd6wcwncNkAzMCVcp79oQQRJco5JKSssNZN56ylHIz -dQaQzFnKlAOGfQVHYgAwqEPGyRYEFuyRcXswAJoQ8KeyjBFEbgqKx0yTnL3uYCNKDIO1otAqL/ZQ -k2KXoVKeXsAb7ADKKNcwyC8iF29ueLZ5DcRhxWgostHkvhOGj1X7iFCH1rgzjVlkTXekI4LjYVYH -tIKfYsPICeWMzXk8jK5dkE2BbO/+NhoHDvSVLv+QOz7BjhkXVIrHYiRt5tBYvekRFDoZ1RUwOw8b -rl2OTsw2ISlrAG5LsT5lQXHg3PEHJo8iS1EaYBzHjTt0rk9RnnHK/jSlDAv+LhqXWcf1OPXMXYTE -XIac0e5MEedh1BGlspALyGdKdoeFKMkH5gkPZOW8yqmU/nUUE8BpmdyhFk6nKTglbcFOR8oaiYc/ -NGdPoZy8cACMDrHj2kBcYDhlF2WTd0KAkh/pRBAjWilMr3LnW7BkRpkACopFdzxHZ2F8VAoiCNks -NXNnHg7UpjpwNx8+xkXfAwtO4CR9+l2w9nOCRjo55XiHzu2gGc8DOUcDHqVwwNRQEi32iDv1mRFk -ima4MXRRCksuzUGWniNo3is+Ao6HFL3c4OO4ykXTu33p9LsrOJe412NBGnECWZ8kAmAhBRYeV9j0 -gqvQlBfFnxUHYJTPUiaENHEZYIS/to3lZM4JUJ1DAkVyRkcKC5LToIQE5pTEBZnLfu/AypekE6ec -mgiBacFzRkquTiGlBSlhAMxTOmpn9wmZB2aGEkZjRDkhyGjeomnRwcIJfu83hsXHcK4ZjGV09VO2 -r3OuFUSgmQeE4MWLkjUJzRLCggtOtOrS1QAwyvOqNAE5myY2iuqHo47G2TARWNCxdO22rgD0N4qg -HBGhAeH8nlNAABYloXIxVLAkm4KOtvKZGACHxDR4YsOXFZSi02eSwDzgOdGartrClOFuy4BFNRUd -Sy/+89rBmqhsecU1SOQMFsijKeCcdjQx0EwDsjKXRSewKbxiJDsu3qk2snfyGZwbVJ/7FxXNQvIK -xjnWAZ96HneKdKQYT+EdebDmA8gZb0Ap8qao+QRosCtOSUhkdGgIN9B8QNLb/bAonz32h4YAJ+eu -xhNljCAhbpYuWACalNJp3DTTVH+s+dQv5ZgABRaaRmnEioLc4uTwAKBi+7U3DWSRfQ5zom9O1Kds -NIXiA+/a7WZ5r8SuGUoEi2D2GBW8B6ME2sF6jEDaw+JiFCGQky9jN5AISEcpAKT5+uVa4nl6Yo95 -RGAO0zWKUKXBNuvDRwCYjcTl8BYt3GlS0B6XrrHjaJ/ZOzzJN6qR5we3uLxxPWuLKnO2yBCXcOJB -2nHM2GPTNW1jZyzOuEcv5XNkdExGOgdnxnpA9fRDFlPPSIT0KxQ4MAr05/6mHQk58IbrkA4WUz0e -MXhKKuIsuoKtIBf7JI4dvoNtLHcE3cGWFrTkSh8kPZI7AhOte6AiMYXWrk1CoDhpiz+lhQgYaTjV -Np68gq5lG0t9QNeyKVYxUk6oacEhGRflpwIgJyBCF8VUvPRC5U6Mji0OAObcXZSVHoGcncmz5+w0 -ByGFX0qHoVWcEiAGcj4DMuVOtmsn3Fw0kpeNLi6iI8MAVpTXLSjSFIEJPjTOfqWtiGn4+iGBAtmB -snDQJeT7n5IXzk28ibxPRx7MB+v5cFnBRzeKmo9YSovoWH4wV0B1Tcqp9HEP8KoiYaA/FzTx/uj6 -GbcrRoVBqujmJcnghG5OCmXpNovZyRC9u0MkHLAJwLhkdfo9NVObRQOcRKlTcVtMV3NSYAOvqmnB -JrmCj5zOpmSRU64sWsGzJFI8KZnHZAM2+fLYgicFBLDT3bGm4MtGOA06grmwv48LgcTVfiuMQM50 -ES4fmHhbuMJ2rDg3g5Pr4p6Om8FJDTKftROAOqQbyfNZzaAXhoTXeJLojBdq3imTQx2AtJnyZwQm -sYZboOj8CMx8EW7+9LlOE58ki69vVCRJlRCU+iPP+FZgnxN0Ei+9ULq0Ru4HUP2OPDhJ+apQw3fY -Gc74SkndATN3JaQrnd3ikP2Jrj+QcWJ5fxHQlIZRi7Mae/VkQnexypTdTH7hpjQARbAY0nFvSMNC -gWaJzzYICDK6QzFJRDjFn4YTbHSnZ8omqRDbN9GusMjkIXqM7rSFM/cFuX/I2YZFyfhvFMM4ngMT -mtASoTmakiJPAFiwlZ5uCxt/P8ls5eZ3RtbFI4IK8qBhON6OB6chvE+mdL5RclAItXcCLb1Ou6hR -t9LlRAdMFUcaRrh4AsCCdvqSb/+YROLlQmqiEALFnTGU3RqgkFGbku6xiw0V+Z2pKHb4jrugbeLx -AbriKxxgCwc3IP1vGjzTgmKKMc7doU41Acfw0pWOgi8g82b+Iw9OFYVpkN8ZghszPn9SKApuzHO2 -0pMLCooGr6+/LRCR8kFKLyEnG0B6qYzcLXhg6MiDw2W0EHxK8R/hklCMDN6ZjmMHL5MvKtdvVF7/ -NPJt1gXzCoB7T3rdZ/12d9juvqlWHRjvnY9/WHtyDL+IxP20++rhdrtj0azd4q+V22u3Xj/eedJr -tuDrVrsxbPe69f770364U7n+11Gna3+q2mb12/snw9bgRuWbtVvr/X59rETjsN1p9ltd+F1Wbj3q -DsNv8Gf4/rgFv123msi1G5VbL7vthgXvWrzdN6NF39U7J67sn+3m8PD0wt36EZa1TfGlv1nkHh22 -2m8Oh6W7RMUvvE/rj/bWO8eH9T1Rtmftpi15RnegzIV3pbf/R6sx3OiddJu2bRu9v8r26ACnji06 -HJQesJE6F97V8nz4vnSP3i90P84YzKgff9Hn6c1dFDE5POnvn3Ra3UarLClc1ZLUoPdc9MDaLV7Z -/uzXB63tfuu/J5YI5dl1rNaF97Db2x22h40zVq3QywGWftHutMoLmZE6F95DWbZr3ZOjp41h/d0c -PYurXHjHYMqV7Vu/NTjplF/HqXgZCTSj6eKUpk9feKOVrPWipDgJbT6F/As8Lu3uGewZayNQ9sK5 -rN0t25fecatfH/b6pTsUKlx4r3Z7J/1G62G/fnzYbpQfrDnG6hInz2bv6Lg3aA/nmDufoh2oWpZt -wq2t1kHlzmoLuHg9WrotYLbaAq62gIvbjyu7BTzo160u3HnSaw+u2CawtFFptQdczA== - - - PWDpJWG1B1ztAVd7wNUecLUHXO0BR5hFZFduDzhHj5ZoD7jRetfq7B7Wm70/r4AzsCqvygZpnp5c -2S2SW3LQTPHJFpxFVa0Hw+ZW6127Dg2aY9sQV7rwzu13Ts5YvZZXvX5YPxkM2vXuxpl9XEQFuzTb -NcuLxeZlyMXyHSkvFZt/LfhcWXSh1js4GLSGZ8+M5Z39T7GHyzfvO6BZQnRho9fp9W//eXjmFide -gd53ylsbfelL8M2U7s9xq3HSqfcf/HXc67a65blvsuLF93LeTm72uoNh/RydDBUvvJOlY4cGJ/2D -eqO126jPw6AjlVby/gP6Arzy9OQM3roQYb8octZu1+w/ZQnyd2la/H0ZW08xT18WfBut5ujKR99H -fxJV5Fmv3R3uzGNg+jS2ytauXzF2vI6xfNrRuewLK+/DZXgf5lxyVivopW6XzuFOWRSZUFrTflte -ELy9DDlQviNp+Y6kl9CR0uv32zOMQ3FHsoXuyBljF3dELL70Wvw1s95vDw+PWsPyju1lWjsvxnN/ -4Zat4bN6+ywDx2oJLTcCi7L6zm9JXpYIk8et/psWUHL5VKJ5p9oVHpJP145V4NHH0XrFKvBoKQKP -Nnu9zka/1fq7tD9qYaOOPqPzJ9U5mHHRLcOlO3Jl46ua7U69vD94mbY85e25zfK6ymXIlisYAle6 -I+fesl30Cl0rnTShX2+2T8oLeyp+eSpyr3982Ov03pQW5ouzbbm60q38WZkFl25XRqZ9+lNlK5m2 -kmmgf1+VQN79+U6bLLAQm+Pk4oILsdJDsmzG9GUN3726OQJKry6rHAGz+ni5OQJKB+suW46A/dKs -ufALU/kldtFXpvLK6JKtTMuctWG9tCV487De7bY6u61OqzHPHnuy4oWz3vPSVuLzdnKy4gLPr8WP -5Tkjmi1ac+c7PnJZ50ZK92e1HC3emCzbcrTVHhx36o3WUas7fFw/Xr416ahuUZV2wC7FXqlC/1Ym -voqRr2V7jd/Ka+NU/OKn2XypKRdZ9JUX4osu+kqPybKJvk04If24hPhYRLG3X3o7vvBTpfykX/Cp -Uv7M9jKmeinNcJ/B6d+DueLYDtqdzjzhXp1LGN5Ou9uql47BtlujxuNe+TjaqMLFu5w7f9bfn6H8 -jDDvsN6fi3td+cW1xw575TXe3iV0pLw0DH3i1z/Bxpfs3litix+y0mzYLJ9zypW9BIdHt7QArDca -J0cnZwfnxEMVVbn4HVjpcdqHG/rKO6lc6QvvT7+Fe/zSw9Vstoftd3MMFldYXJ3roN87Kr8IY+FL -2pnUu+2jOabKJzqjstzp76rmqoTNNFZhM4u2zys/JMtmElmFzcxSjC8rbGZ1v+JoL5cvbqZ8vsJl -C5xpXJnAmTkW2UVfm1aBMwu4Pq0CZ65K4MwcMm/hA2dK75GWI3CmcWUCZ67QcrQKnFnUNekzCJwR -n0vgTOPKBM7MIcQXXfStAmcWUew1rkzgzByTfsGnypUOnCnPcMsmBz6yi2h5wn/mkCHzzrxLGsol -TlY4RyTkajCWN7/H8ozFp2vH5bbhyqSMXH+0t4WpgvbmsxiVUgKXZxW7uumSrmT+6/KWtM8gPc9K -vpWSb/lKvq3k25LIt9K8upJvK/n2oG8Bn7f61gISrKTbkki3lfa2km5zSrfPWnlbSbdlkm4r3W0l -3UpLt9httDdf4MIVE3KlO/9R/J5L5SVcTaI5JpH+nCdR6c6vJtFqEsWH8ZOKKh0I6Lr9fI5YwKjG -hatjVj48a//V6jzr1N/vzXd+dBEDnS7zuq3lkYP91lHvrDP7y5WTpt1ttg7a3TOvRI0jqI5b9eHW -HMkzohoXH/ZWEXdkUhHK/k0q9v879rv9vGN/qFy1EOXBMaQYKturVYKhwKCXlWCo5Jq37El5RPls -L6usPKusPMuZledSti1zJ7JZFFVqf57ryBf8lMAVvE/yYnf8C8x7n/mBgeXw3Cz6KfCzZvtyutnm -EuELLu8avaPj3sBug5+enDHZl1c0bFIfl08ulDawvS0vCt5ehiQo35EzolnijqSXsVMo3ZEzPHBx -R7KF7sgZYxd3RCyLFrroK2e93x4eHrWG5bWBZVpBz7PqLNNKemWTOH7MpXR53B/nGtrVKcRztGPl -f175n+fwP8+XJHIRTWgr//PK/3wV/c8ogcADLZM7c0mjZfE5ry61Wfmcp3Zw5XNe+ZxXPueVz/m0 -AVhkh8XK57zyOa98zqVMFsvtcy5tyWq2Dw5OBq3NXteqbt3y4zNR7+J3IaVn1kn/wK5du/MlIx+p -tLguNTdP5uvbSJ0L79r7VqfT+7Ns/zrtN4dD+3u1AcljS3dxvNqF99LPj6uyMl+lsIg5h+YzuJZ4 -ZYJbNhOcE6J33vRbre4dOzlbd2yP2296d961e53W8E6/1bzT69e7Z3ldVra5sX6tbHOfYMTKL+FL -b6BbXdW8MtCtDHQrA10kEkxp/1j97/bRyfCMOy3jQaHyF85ueek+tTr2YS6jVlTj0qw/W200a+zA -0nXJsTNbbruy41fRJZwA5S01x62GXRD6D/46tkvPHNaoyYqX4Jqbt5dz29wmK16CfnOVrW5213TV -7VJXyZBD82ExjrcsirhdGXOWzZjjTTfOmOMtO2jTWRlzeitjzgy5tDLmrIw5K2POypizMuasjDnL -Ysy5jLXqk3ngV5apXb//Wl7T1JU8Xnw1E3OcY7O/sl9cehTlEqfnKJ9DYcHTc5TvyCo9x4JFdy56 -eo55oxwXfu282qk5ruQdMp328Fm9fZYbbbWELvIphEVfQlcZrhZtCb0yGa7Ota9ZLaOXuYzOu+Is -ywq6ymx1pTJbzT2sq6xW52jH5bbhymS1Wn+0t3tYb/b+XN079PLzyPt0BQ/7l05Ztjrsv1gKwnIf -9i99HWiz9G20WPTCWax8R84QqXFH/lrwubLoQq13cDBoDWFm9FvNucT1skmBp9jTz2qPcP7BvcKb -hUUZnIsx1y/PuKw2cQu+iRNZcq0sn/7Zbs4RHOdLX7zhPy3fo8PWPDFZXPzC+xS22qsUyx+y1b7g -rlaFKs2K5fX8y1Dz5+lJeUX/r5X545J3CvnK/LGcG5/lNn+Yq2L+KN+RlfljCXbIyyYFVuaPlflj -keT6yvyxMn8slfkDNtbD+hxBT6tt9VJ7sA/69caw3nnSa5cPgXeVS1KG3nTRsZW10ll+9uuD1na/ -9d+TVrdRXrseq3UJZ+F3h+1h4wzzY7xfhdIv2p05cmqM1Ll4u2Xp+NjuydFTy8Xv5uhaXOXCe9aY -z2hZUhW4DCHb+HSBeQs7Jqv8S5ML5ir/0p3Lzb+0ykLEk3NJshAltdL36gx75dWt3iV0ZQ4Natnz -Ka3SKZUfqstMp3SR6YcWd2tz0O8dlV+ZsfCyZFP6JJakFyf9/ZOOlWJLa2pc5YFZgsN3c+z/lsQU -fI7TaSsz7Km2jysXhTZHj5YoCi2sGHtnHJtfmcx7p5nML1qJKs2Mix2HVr4fVzYKbVhSaVs2B0ay -8mD0ltuDUToYatkcGDDlFsBcvtoDrvaAy7oHnGcKrXaBc7VjtQtc7QIvsE+ju8DSSttqF7jaBa52 -gR+NBFc3kK10RonVNnAxt4GlB3C1DVxtA1fbwNU2cLUNXG0D402TunLbwDl6tETbwJ96veabfr28 -pFrtAS9/D1gVV2UXOE9Pruw+cK5z2wt+uuJK3nVReje0yrCxWDui5c6wsUowelpHLiPDRq9Erobl -kdWrfCHLKNM+Wr6Qi7Z2d+xWw91ffnu/U2+8vVNxoN5xvdEevr89h9l4MHzfKW8G96UvPmZ6nrva -F11YzNWZZZtT28CIyzelPiSPzsp2einX6WIG0M3PVjCs1IhFEXmfw/2G/p7UzV4XL28vv7cYr3fx -Z3ZLa0In/YN6o7XbqM+jEI1UunhT+nxzar6+jdS58K79eThHuoYOmP3t79USIjTq4Xi1C+/kvNcP -L/gCdpW2wXMOzWeQF0akpWVp/e/20ckcrkguf+HDnJfOM9Xq2Ie5zNFRjQvvF4q2T5dp6pJUra02 -qhE78ziFP1G2gC0nH3b8ErKEul9pzqcbfh/8ddzrtubQ/iYrLq6GRG2dW8WdrLjScVeK4GesOZ3j -QvCV9rTSnhZOe1opT59Medr1ImJ5tadVlPXyeArmX49WS+zKqv4Bp7bKjsnb8gLh7WXIg/IdOSP9 -UdyRdKE7ckbgRNyRbJG3s2/PKBl3RFxCR+a1fC/82lnvt4eHR605Ls9YpjX0SgYjd9rDZ/X2Waae -1RK6yI7pRV9Cy3dktYQuWkcWfAk9175mtYxe5jI674qzWkGvzgq6PKbq1aWSC6wZfXIRsjxD8una -sXxscVUzIK0S4Y71cvkyIF3dq/zO5QRabI2ubOaj5dXpljm301HdoiqdjmMZ5LuoJP7fad8YUrbL -+K289KDiSzDNFl1wPLRVB2fHlS2v3MCjZo9LTMBFFBxXcKW60qlEPodzc8udUqRael+y6DlFqlcm -qciFmKwuuE9PP5tztMuajuP8I7T47pirGRE4t6666EIC/BTAgC+ucE7mJY5mOM/wLDrLifIXES+j -Ah4PWeljlMs2pZZbA7+SUvz1Qau/3e4vghVlUcZ5WN8vP8bLYPOUldIeEez7q/mMmiN1Li8R2Em3 -8Xz5hMqVY7aariSVz4PdHq7Y7fLZTXwuwm3jkgNVcD8EWRVe9OvdwUH52y4Wh/vPeapgZTS5DKPJ -ebTTZdC4HRMuiM69spyMDhBG4613OgswNItCkvPx7CoM9BztuNw2nOcKq2vrj0Sy96Db5KusAKQA -svek131mUWCem6oDb7TetLvxD2tPjhFH5n7afX+03+usXV9vNivb9Xe9PgiRtaSybv9//efaif03 -qTxdS2p5oe2utiYyk2kXs1MTeaJNZr/kOlHG2C/G5FKryuv6Wojxef3ePvxgv/xhQX9WRFJ5XPn1 -t6TShDc8X6smtSzLpSkqUtSMylTlaK0q8pookswWrgklskpVZjVVpKYCpaUw9h1VqaBiWqkWtVwY -kVc21wJMyFpuEl3ZWYOqWhW2qkxqSZIV+EUqBV/SWmJyi17oWprLFCFpXohKA9ugtId5pKpmZC4d -xDYVISLLVIBAvaRWGJlFpYqazPIE3idrUlSqFk1i4P3C1ITIUmg5U6EqRM2+NrdNz2qFyFUotrNm -aikgdHjsi5IiScOLRGb7Fb+5sWZBRQrv5DLKjpaRoVe2m1leyLjrorDfgNhEH/tpcq0DCWE4VCoD -nTfXGETDsYOgrMARUrlQEqulKkdAklmOAYCEsSlsY4BoiKdIDLyrliYqRzxFrSiyPAalwGupRQ2D -a3RRSUUt1YXtu7ZEyXMDAGpPKqWEJjLItrowaebwWOZ1JEMQkEUioHDDYFlDKBg8WzRN7ahZ+lju -FEWOoCy1IwRsoHLtACMjQYDGmm1XkqcqgFJLC6HhTRpGVVUiHrADnIsUGSOz7ckMlQ== - - - gv4VSZIWAU9gwvAyYF4kcFTKNkAIHRoNbJVYroo6BnMlFVKF3leBZrlUgUDVVIY5hhDbSIYRse28 -szVzSwJRk0meOAS5HSugjSiANtxdaqMdfFtYKV2RxtbNK1ktz4xlIJnbGWMJntsJkSlVsdM8STNp -KzDE9iFJ4b22vXZSpBHEzkdRFFICyAiLDqa/BLSWZ9K4ISSBNtcO1l6uofBqruWV6zcqr39au7Y3 -TVRZ6DmFla05RVwB9HwCy7XkPCILap5HaMUUicTWtb1JwXVtb27RdW3vXMLLVjuP+Lq2N0WAOeDc -IgyrjQsxC5wUY9f2ziXIbLVJUYa45hdmll7nEWfX9s4p0CzTnEukOfY+h1BzM+o8Ys3WnCLYAHoO -0WbHf17hdm1vUrzZ4ZoQcNf2ziPiru11rfZ6fb3b61YKmaOM88qerV4UaWFJLThY2+p0iMwSzfJL -bgqQfgSxQ1pkKc5+KwfsjBLTQFRvB9VJyyzpNBBM8gKFBtWbhCDNNOoGvgWTkFALBxGGZwISXj/e -t53pS8AkCQIs6rEdpUkyBGB4CQzdBCkiYGhyqD0NFrof2jMNFtedJEuAxY2ZJE3EOkiXlxZiN43D -kb3xtT3l90Z2t5E+s1vMVr/73O45BsM++vxf+G2SfcNkQUgo2x+GIknl1kav1xkt0wVT8cOTdtPt -W1GU2VlaVDI7xXIrfzNl5zv2UGbSbVtuPW/VOy7I21YYwVfsdtouC6rdJz3st5s/tt47vHbbtbdW -EBfwDsztnabspjZOhsNed6/3zm7v4s3U1yeWblt+ks3YIGWj+6Ok8mbNSowkEbDGwpwz+AV2NvzN -ihnpfq+6lUImBtYkeNBOQas4pUxW8EfA5irByl+AhLZkEqCC4ecOvRO/Q0m7atjvVF9VEKPVqfEN -O2v02sLuDn1xaE7UclCqEtv5VNiKR/BhB0nZ1dwK5VzBYp5QcfvNNSTx3fRfoKCGFtgWJxKkOOLI -YdFBtNBT4RqEX+BXJXWFq1pFp+Lo5l9RRdTczMRtN7A98ERI4BUO86brwM7axj7MgZdd2KE3K2/6 -9Wa7ZZk4vYGDWi1ggEV02kVUNt7APi+Bf0Cpsa3JYdOMAPs6I6xqYqV3Vnl9NFJQTS0oRVHZaJTE -uFEGo7AEshhhmDY21r5+aTneLicqsGlEpqOYeP5Ldeq3mPIjY0L0rHqCjgznxFg7LtgM7DD5SbzT -WYtYKvCZ5xBikHho4yGPOtmYNciy9CDbQlbTiymtkgou0WODnE4tKK0eOjbIszFulMEodBoN8gVI -blFKcmeV3FLParsXJ6Q3+61me1jZrPebM4X0JzN7yRznqx0x/81NFVngxk860S0IgA+5F+Sw1UpR -5XdP9sHqav4R9y34hZH5L4DUvkuCZuk+UdTRb1EVh8bJ9oB95M2+Qf4LYYna73tFQt+uybb4EX5q -O9esuiH9pxVjtrD9u4m0sF+AFOHHalSn6vBAySJu28QTtu3AF3ONPvJPuSM1bh48UvqCb8vxE2lU -xcbEP8f1PLbNteglOyOvhCZYMbpA6pHVjCp27yDExU2zrfqwtd1udZqT6pCbYkrkGU6yLLXLkIq/ -JFplVru1ZRK7Q532BeecnYHlZp1G1aOau/XGDjAwg6YPjQNmkWmV5jDBlcwzxWdVrWZsVXIrBWo6 -1VJNzne7hwPsuoIspt0yk9OH40ir3a3B6uuagS+GT9CqFX/ks9ULderKY3+AlUtVwjJgBX5upb7d -+tkFJ4H9iJpeorD7d1gZTsWxcToOKw3D2oL9OeLuwWfm+peF3p5LizqliebMbsozu2nO7KaOunmC -PQPNvAoWCegpqKO+x/QpZvc1L0Jns6mdNcAS8CmsNmb/5L6ToFLFPxS579lkhY2pFXQ8XvYX6Xoh -XScS13b/IU/vgZW/av5ORPqKSMc6U5zWmVMqjndKuU4p1yk/IP7jFBbETqUf1qV8pIBMZNku5ad1 -KfXsJjy7Cc9mafj8WOwmY3bTo/AineyNjLltrPx4J6Trg3RdSFzL/cdHZDY5a8bIGTNGzpox0zrh -3JWOuUTFk99/fDTmkmfNFzljvsiz5stElxLHW9KxkHQclfDHR+IrXcSDko3Cbf3xjlD5jWnlx9ov -sfmo3SI3Jf7vx2Op0dbrsdZPzorR1utTW49WVeQcWXE0d38/Fi+Ntj3ibtf4yekw2vjxCiOtR/lz -tObFj+IPtLi6j4/BO/kM6uczqJ/PoH4+2X7gHYWcopBrUv/3I/JOPoPz8xmcn8/g/CmtV9h6p0M6 -mru/H413PhnlX/KGgjffSa2QUgh2QYBnRSjYg1u1W2DkSMZqVzxTWAUTTp232HCVOaJ1hVYZQR+S -Nmqisn6Mr84qrNTDFsJHqmjS72PF3qv7M+irT9fXx6Sy0KO6pnI8Ma5UoFo6WVQmuVNty2Ed1zhm -YBVaX6y9qNxWFjYrIqE/ac1ZKS9mQ9vvHTd7f04x76PtKAEmmsPKL8jKj6ZOBd4hhV7qownIDkOq -eS3DLxHIoNc2Q3On0uiiznx1X4IAm2vgXXaxBQUjYmsowyAswBZTAXeA5AEXwUIzTwMxKnpd4ctw -mwiA4R34koLRUOcIQr0nrOMkAwPUVJYdCeSs3HrSGz5vNXr9pp29jgtRu7YfeWpELU9zmBppkeQT -TLa5/uihn+8vDnr9I8oghLxlebDZ22/trT8q9mwjdofvO6298GpX6josIDrRRX4jxAxubKw3GidH -z3tDPiHreRXa9roJIkeeY+tsZzH5M1E2EtUNsx2MdqKsLkAgyxCujK7l+AMDApkZFLFmgEFFHHKH -2H7xHMZ8aJif8sDQhAjqSceHmR/uguoDYjM+LTbXzMTcIQh1gpBSL3NmJe7TOG3K2StO4R0n9QVy -aRC1/EWimV6n6IGwXwR2BxcAiHCBkJlZlTIIW0lMVAtWgnnftFHiTXalH3mJXxpWs2zGLPt6xqK5 -os1PEx7G8Vl7tDYxtcNE5sk/JhwmBEi83gWhMhU2KaHGZdiEnDtD9kVL4CkglqwTsndcBk0VS+Oy -K4hMgkxKv/GFsoyv82zRpmcJHKdRZiRwZCTaxEyBg5WUZNEmI9E255s2SrypkKMv+SxF2+nO7ZHp -G/Zt4CnNDHhx8lSATzS3uzW0nSuT5gJ+CP9POkpxO0eTSPhJdLSW0kwWPK8SUPaxXGdKlZ1Z6t51 -2uskpSi0OH7xmrEbMMEfCXig/MeF7Xi2252jsY0Ob3ZO2eOMe99gkyNSCH61XQElA13Cdo9akwZi -3TxoJ4DgC0bD7nDFKaBQ8QA3XhDCmRQG1VSZS3T5EQjEXiawtqgZCKGehFC1mdpe5mdINnWGSFOD -+ACIOhUu+Civ6dRgjJJ9AQQPG2FgDBMNER7CMqZE91wGjYRA5VTVUpnJqVWlgBanVlLJzAoUlWcg -qSAQ2oAzXtUyqdWMt+q8ZgqFtgKIMpUSpKKu6Rysx3bxUiJNzIyqEMyunaEZlhAUqKUaLHIrv3Pl -XIxJIdDws81BRkGGzNKTHtcHb/EbmwY2O+3j4zbcKjtiMdhqD2D+NB349T3758T+jwehLA+3btMD -cvfz+gBPT+3Zt1t5+BBleutdG88rv6+8fmIBv/LAVtHCjn9+gwiJFKzLrw9nlwGQK+f+MxGnZBW0 -MEFzrmFbturD+m07YaRee/3o//ufD/7n//3fzH/+H/w+++f/+7+L+X1Gw1e/r37/n0Xgz9N/P2t+ -fdg/IBbsggxCAeTY9yS2LIyF1pPpwjLSKorK9snff7+vgPiM1v1reyBnefXfe33TKQ794ZhestPu -viVZyiL2Ufddqz8k8B18z97YG5yMkyBUz1IIRsLrX46rEmPB9yDLvz7BJq4fY6Oe4t83AJrQK+DA -yIRmEQEjRSJUnwqMqx8gign9IgIGfcKF54/qGAEWtIxre1bPgF7Nq2lYPfPcuoZVLc+vbcDJlHPr -G3B06NwaR8lmT9U5ru1tI7/gjg6tMrM0DjoAb3WD9UeV9ZNhr+ImXvvvVtg/TOzPnu4PWv13reae -1bT3XKFBNC/CaZvCn7YJDoOEI06TVMOWxn6RKjF59AV8YhkEQ49/znXeWsAWDc6m2S9SFi6AIYIl -EAVpP03iONxkBiOjhfuFAJtOp07SLMB2ECZFlsUVZc0OjolwRwBsgEPlYbImYOB2RmGpRucDIbdf -VKYdLtcEggAuwe9BkPM9uO6EitxjRh5BsAmbU2jlthjewVPVEKmYZ6HK0SjMIQaLi1Dxy3XN4HG0 -qNF2Hhe5MSOtBttQbuLuFjWhtU4j5DGEWh1g3OoRmB9Hj5wHipsQDTG1NBph7g5XDF32uGMAjfAE -rTA+N7O/Z7kYoWAMc53MrPzNVBoRIgOBkOkREqqaMkVMrp01PLWa6IisFlLoJB73CEAEZFCgXwTC -LjJipgK/PiIfNzOiH3eGa4YOe+QxgOg3QSmkH7A6nDyM6RfDPGvXhKGZ5NnfNsJko/MGpptdGUfo -J+Eks45Y1UI02rIC9hhCFAywQMIYht1k5EwJbkIsZaipsZShDgUpw50mKRMBWMqMUwtoKCPieBLG -IOyjlTLCqIgMgk9DM/2siLGr0ajgSeDU6whNIYpYpiaawiMQT78IxvQbgUEXA3KiQmhCoB+3NJCP -e0Og0F+HOX72tJugEpDOLsBFPkq6GITdUxaDiillFQGR5SPSz+onaSJ1TLnUdiVJI8KltTyzOlRA -HAM82QKIqRaDoGuMl/rO7w4k4xYGknEvCBT66fDGz55kE9QBkhkrEaQaWTJiEPbMRKIS+24sSpGb -mGS6JlOdxhTTVk/Q8VJodS+rrqmANwZ4igUQUywGQc8YL3WdXh0Ixu0LBOM+ECj00qGNnz3BJmiD -q61wx6MjgsUg7JgQYel201NY1dGMLA8C5k82QjF4cxoLQWgaHmlnxBHAUyyAmGIxCLrGeKnv/O5o -WlILA8m4F1yN++nxRs+eZBPUcauCV1swI4XRsYZXWJXReD0AVaKiZvUCExQ8eo70OwJF6l2o5ZW0 -gNcD6N2Rcoc7pFzHup2QtO/yiO1npv2Cgy8nQFDsCBLpdaEW9ZzxBgC+e3OSOkgyUk8ikhGIu0aa -D3fea0cRyUiHikhGihbXIlWM8RIgIhmDAskikOsaIebO08sjkvkWRiSjTnAt7jnhjQBEsnHqjOhu -EckIxF0jZYc7TxpRRDNSnCKakXbF1bz6xXj9c0QxggSCBYjrFyHlntOLI3pR8yKCURe4GvebEEcA -Itg4bUaUtXhaelCYPn6dDRPMqz8RwUhLighGqhRXI2WLERMgIhmDAs0ikOsbIebe08vjeembGE9M -340wManvPDEDgCfmGH1i7SzQTDKFXM9Im6Guk8ITCMZqUSAY604EYu2K0DIgECyAmGAxCPvFiKnn -/PJAMGphoBf1gSAykA+xRs+eWON0idWxQCuCUKdIjaFek6YTaEXqUCAVaUwEIY2KcA== - - - 0nOgE0OYTBEE+0M4qb/01kAjalmgEbWdINxbjzN69jQap0esfwUaEYT6Y1jsu/6SchNo5BWgQCJS -kQhCKhShpOdAIoYwiSIIdodwUnf9SwOFqF2BQiYIboRwXz3K6NlTaJwascIVKEQQ6g4pKjzjvC4T -KEQKTyAR6URcx+tMjNM/BxIxhEkUQZxd1uOk/tJbo5nmWxZoRG3nOtRbwhmePY3G6XH6od4PdlYm -zrb90XyWEDZj//wGx5XTZLrPkssAyJVzf0v4LO3gfajL0rtV6L//C88f+uP/jP5H31b/rP7hf6bw -0P98HO6b/eN5/1k5Bqc6BtEpOM2xMQYt7drw7rwx54aDnsO94SqOOzjGoHO4OKDmhJPD9fU8bo5p -tHNJvmB8yWdlPLG98xUcILbiFBfIGLS8E8RWnOIGsdBzOkKw5oQrZAxa3hmC/Rp3hyDwPA6RabSb -TfRpjpIx6ByuEltzirMEoedwl2C9cYfJKLC8ywQ7NeE0Qeh53CbTKHcKlae4U8agczhUIPHkpEsF -oedyqmDNCbfKGLS8YwU7NuFaQeh5nCvTqDeb0lOcLqPA0m4XSJY46XjBFIrncr1AzUnnyxi0vPsF -8nVOOGCgq/O7YKZQbTaBp7hmRoGlnTMQgzzhnoEDmOdw0EC1CRfNKLCskwZ6M+GmAeD8jpop1JpN -2CkOnFFgaRcOxMGMO3Ewre78bhyIx5lw5IwCS7pyoC8TzhwAzu/OmUKrU7SKSTfPKLC0o8dWm3T1 -IHB+Zw9WG3f3jALLOnywN+MuHwTO7fSZQq3T1rQJZ1AEnMMdFOnEwawTqcTzuIQi1TeYd0aBpd1C -QRkOVp5IFxZzuIamUOsUwk66jCLgHE6jSO0dIex5HEeRcjtC2PM4j4K+O0LY8ziQplCrhK47Qtjz -uJYiPXeEsvO7l4I6O0LWc7iYIgV3hKzncTNNoVUJ5XZUEJzDARUptiNkPY8TKlJfRyh7HkdUpNGO -ioJzOKOm0OtsbTam7PxuqkiTjcl6LldVpK/GZD2XuyqosDFV53dZTdLpbPU1puj8zqygusYEnd+h -FTTUmJjzO7WCzhpTcn7H1iR9ztZXY0rO7/JiXTUm5Pxur6CSxoSc2/UVlNSYjvO7vyapc7aCGtNx -fsdYUE5jQs7vHAs6aEzI+R1kQSuNKTm/k2ySPrMpOTMfwqeOujennTKc90zs972j1nja6LFI/k+V -OzrNajrFK3lSUWBmY2klawq3yOCVOQpDCggEN8xkKeRFFulsENwLkuSYHgsPSrsTFhaYphjQ4d6J -9r9UCumCg4uatN2oYCmXgVpahUc6rSEBxSSGITY4A4OAwkwCsFaCx7gRd4R5vM8YG5K4anDRBZKB -kil4wM5ayK7ALTQ+ofwUEFerImaTToGAwpVkeBCdySTs3k0XmCratyiUGmvjwmWEhnukrPxTOJNF -JdM1rSCZg4IrnIqLO2L+rN5tdfY2O71By12e8XQyuda892dwZq0chwpMGpZJwFBfcUl5Cx8Q5y7N -KvA/eMSbgeB4EobiuXTOmKLD/UI1sASmqaq4HBzuLS4Y15W12kklfAd8hUvvHL0pemPUUMqcbjDp -nLGlBG4a4DODfB4WbqB98IHdIHg1FK4afKfLybeDn/CTdLcuuQrux6rBflQNNp5/iSoYRw9zWrq7 -0pdfCJclfiTZHJ70kuP3IoipBaVIxzPdzca4UQYj3Fw1cfmFDiyGtHHZrEfoXUWCB7J6MlUdncIH -D0k0UCMjGP8NZUJFN5QOnx/P6L1Rc/xgfujVFZCDWCajdILMT4UYT0hYTC0oRTI+RLMxbpTBCPkI -p+WMdGkbPzgBiawZPBhqZTcokj6eNZNgC6XfMETSSNti9xteEEDf7C+pHSuM5xtFdWpaEm2UXYhK -pSWpEkJ6wRG/akp7prQ6FJpAdUobJRz8FEX2IalTxIWvbZC+XaT0J/toKSIXZvH+VB0ss1z3jl8e -n3LL1bxJMDk/TIr5qMBGg/l/XFZSVKTS8FXy12pUopqamnZ3TVUzyApa5auu3KOLzIavGOuM38JV -WVgZb9AClHhhFX3b4Wa5B1sUrsCyDyM4POrNNXrdzlrUDlB4fUVoYtxRWuuBANW0QCxH/pu/zAq/ -hquTIN0lX6rkSIAXWkn/1RPJXcHkupF4EmFFrAc4DSkf/rXQFG4Bl4DbkzDDprtSiYiRMI0SGqHw -zTWDG7cTDW3iiCj4li3uHTSFur1JDfk4d20Zvsghw3yJMDIzbtuaWnT6fVszsU7euDW96LQ7tyK1 -IybaUUzNiMaB8GEwojEKtCZS05DSkAdGGxuJeIyihny4cgG3WI2t8JlwpBu5GQsS0OM1HFMLS6kn -Mh6finmjLObRW7LCFDtaG5t7Y/OSWbfKvDs+z+IZ6IdrM5qt0RSuRsM9g+DiQy4iM1MILtzdqDMK -S7jttsSFZGYKwU/HPErwD1LmpMFhheniBhj4WjjulXA5nCHoAWf89jSDf/2NQjJCmPHoT511+Hv4 -5n4+CCOJ96RyNTEy0uNjfrA4qefSWqGzvJJLuJctu0DdwmqYw9MVik9nWgOxUEsUXM98tObym+QC -bi6WRS1NBO64dAJXs8L9YPQdr63Pcx0gOwwBoyl4WCIIqN6WiSHRLtzgi7d0g9XFs0nu7N2bxDZW -a9A52I5MLSmUs8sVuXYGNywyASAcOy6d78hbquPtqI43dXOtOtmfatxhZ/0bJUg1Jlc1pmTD3VRn -dxoKt8BwwZyqpXbH/bO7q864+5MZJ+TpxCi4nL5u+p75R+po6Pi0Ry4c8KBlMX5H9PrQLHf3HbU3 -7so7r6pZAmuF8TxWuUvzFA8SJRnGUnnIDkPsMoW28Z3Jau7cFhfD1h8xBIfRHQ7WPKzRczQcMwCE -c2fiLSj+oEx4bXXkmXAIyC0q+KVjjzE6uL4vRwJ6keef/HBoqOhNx9OeuXQ1IMKHmsrSgiBVsAuD -eRLvFddhyPChpmSWCZDy4w+KmhKqj2EOb91cNDMtXtyXWVIr4Zpv0gs0zj7f3R2Rx37V/JSCGC5f -s/MNDVtFanxiGAey0zWDlckKG50q9JMZ9EmANawQ6Mp1gAZeapCJPBQpvJeWkRCAXtRYY5DF725/ -90igAUaI8B4CNNa4LVyGWstIxnvUmHk1wevHOy8fbVVuV6432v1Gp7WX7t2o4JEKO1K2vP1x5FSF -HQ0rn6wqBS7EXGcp3naS1FIjrLrEMPTtZBJlnYbL6BN0uWQJ6K5ZzRQSZHBqBxNcyykOagZ9g98S -2D/Ysknq6QyXmlt0dq/jIgpzBT8lMH+UkO4Qu4OB8NR57pxBti1ww579UkCkQQU+tQbjWY6r03hH -Nie6BpKmgGvujYy6ayeuHVAVlbKyMi8SYEST42hVIde4C4y2v+k8xTioPAOHWRUmvtVFfbsdDPhA -Yoo2YYVnniL7aAo6cGun/SXFW7FHG7Q50cQL0u1KChTIrJxW7Gan0GAWFDAKaEgqCmUuTrLstur9 -xuGU3MKfWLrYpQumOHTYTmyXNsnYtbVA53ih0hz1LnTiQQwiBjrbxTUTzvsthHLCRWRZAqHOSSG1 -hpTU2vIxRCEAo8MdsJaxijwpAOBsP7DmQPI7O7/sMooyyn4Vdl5C4noIFwM0trptBUilTPr5otME -3AD+lVCpAMe93c1YzkQly7ZUF7Dp15DiEJsD2Q6Vu0FXJ8IlOCy07R7cYptjpDdEnkkEWIo4PGPU -6SDrThzKKqLjWVNSNbrTrE9dCNN8AwnRVxMjBMD5xwijK8dHyYUxzjtOttbkSGGs2vxj5YJdx0bL -Z6ecd7ymUAtwweryEscAB+faXhieDxgW2wUr1CCIWmcc8wobDFGB3UOh+JBLqpxjyoVEUu7NPE0K -0LitMpp54CjKWbAD3LhSD15GcR3aZ1P8+lOLDVUT6OgHctuRTnHZUSqREcjqaCneEyHgTga8u0gW -uHTAFVtWH4Uj5bATy9wGTEH0kd2SpAlur5IC3PAWGQRj2AVLZTIzrorM7XKZwd3TLnodGEmjmx5O -NVjGi543MW0DrLkEkTWr6RYwHjmyol23NAyWbbaUwqdQgWifzL4DJhfen1Eot2ewrCYFTgq3SkO4 -sLJ4XK4TS0o0iFlWVcCiGLmeYAS+p8oE5TbXtnE7H35IXazxkV1rbfvyALFvt9gKvn4c9ru1LM9x -65lnuc+3YgcWD5m5W8AtRAiTY21/islO/wx+sTyQGZhBmHKkMDBT7VZBwb109kesJu20R8EivbIG -Nw2kBToFLC8pBb69NLNLv/0UKECseieETHko6Bk0gcRYpmAIcHWew5AkqQSnQwrhOBg0427EssOd -gQ4CJjPYXbnU/1kB6mpey1TqctpaQeR0U4xMsZXQT+di+ZULF3N14IUJHtqwpBd4LZwL5IIMEAKd -6Q6EAUAwQiJzoNwJOxA0IozIxKBtTo7j6ZEu4Pe0AyUgE2oJn2KGd/CNLT+LokpZBR/0PLs7SwvL -ShkEhStnSpDqAi9a3z3sYZ6Jyma9P8V+9slNZ6LmQgzB1OttCYlwF7IlkqwJiYi2/VK7oDIBZt0E -XWvQsAIgbl8BIWIQmQFu8gQj6QFi0AiGdnTgewbBsuJy1liIxmgD+y47FrLwz7CeWF3cvjjFGgDw -yc5c4wiyE0Fyd3GdBwlMs1zAhsAZewolnW3bH7V0d2pVyeQMvgAkDUPAsm+nlgGDGsEgm7GE+A2L -uUgRIQHwnhtUNxlkWwQCJKABw7ND415Fz86S57qR8ds9CCw5/tEdPcroOKqVTLjI5LAtSLGX0Cdc -0gpHca3o0ZLbN8MDfDPtBLD7npwfU3xpY42e7dvhBApXdpwzwkabLgNUIVOU24lTJSAKx+5EIZC1 -ZvlVuXAuB8EhMnj7L9WbhDAmEFK538tSuSMQvtoUIqoZIFa9NIlLk+irQQh9YnWdGMYVwSZWc2c2 -rXzNYG23+I3HZpdVrTEqkEGhsVRvEkKYKNcfLkOh+QyCaWWxRrwsMYgxnowB/QQmL8Grxs9O1EDp -MhX3Au3txgqu36nY2aZzXG/8c4ZTCTYUHmDoDR4Bcj8qGu4V/hlNDhqSo1MBAcovhGgyBgKEdxCE -WuFRUCPHugHWF1tZq6hjtmqRJlwFlGo7OoSQHumN9OybRJV9kz1u7hF4ncBs6gGpwFdQZXok3PTs -X02VfcNG291YKMOCbZO0KpqyapcGc5jVJlSCNkutEnlxq+GL+v5GvV8d1vcnA1TmCUpB1z34YY/c -V3SJo1aaYhgomISUiwWAL+i0QXmNj+jbw9WDHqGWMu7RjqMrSkgZkDtU/tHOTC+6pZoFwSrRo3EL -JqCULuYE4g24NfgUNRafYS2Q0XdbVfhH9P4QTnxwTaw6yc0rixp78s2a4b5W5SM4hG+48h0Mbnwj -LAx/xGz/ajygAy8JM2fUlF4ejvm253jrxjneOuWuubH4jxGOOFqb5JgRfop5bYITmQ== - - - R51TMGbeEb5WYWxHGG2SGbMR1vvwEAUidjqFZDkTW04OMahckGrk1Jp2AzttiOd468Y53jpliH28 -KshDgUp3keOxPqt9S4xMLhKwTHkecOEISTHJEzQSR1PmXbgxmUpPQkKNA/eOdPIdVOtoDCs8mQmM -k5BQY6EiG+xuANcm/ARrC9ynJy/4Wr0Xrb+G6/1Wfe+g1zgZjK1Q6GF7Dvs1k+cCN2kGDtS4HRuG -xljtJsMTm0amKq28Xp++qFl+KkRqZcTE2qbBgWv3q+7iCn7Y8Q9V/zT54L8PkG3y8EoQl8ay7p9r -GoJsMr9uhocd/1D1T5MP/vtgcbhFgLO4AkIbPgvYbCaYisYkn9AHi0nd9p70uhgOY2tXq2shD2T8 -w9qTY/jFuF+edU7s36f7f7QawzV3Sq6y0T8ZHFYe17v1N61+5Wm/CfrQqb9V3I+b9U6nbSX58WG7 -4Uu+sAS7VUkrx8Na5XnvpNu8NVn2RqW6dn20gkhOrTFaWFWOEYWtsN2pD6m8ZYanXUvYw5HCm4f1 -fqNX71SqlWetbqPdoeKIoumKjlSoD78a2O/dNyctKuuHaxw9ooAq6IYd3LpRqTlS27EZIfRHHrCJ -VtshiZttHyEhJyhm7v8U1g/YN0MQTGX90d5G306JTgsx7LT37ezZ29y1JfM9oOgeduxZDwKtLqhL -Mwbb9iRmDXgEXsH/3P9BYUhOa+u5Xp2OvdluxEbem3yi9yp8L4wEvtZul/BFBf5X4qUfc2CmzSpg -t/FpZWFWpFZIv9O3KvQvjM+tig+fDEuQ4G8JKIEX05sZExl75Cax78eT1p9UuCJGH9OJR/gXplmW -WgUB5w7MN2UfJARBCJOkhXQ0SGbS4OOOaOF+oSuhB2u3fuz2/uzig10or6933g8G9b2Huzcqt57Y -EbOLzq11u5K+a1GRW5u9o2Ng/e12x3YUKtlBb3crroCDOuX9li/yjdVdb71qD9p2iQSEkxh2h/XG -2zkwbNQH7UZcvd972ypfX+IPnad9X9FiPO1a7luumKdApbRt2/sebm21Dip3KmuV6xEeWM7vVPC1 -lTtrlVvP6v3hlJ5t9rrNk/awTKdOwQKdnYO6p9GC7TkvB60H71rdp03M3Yr0DAR6Spx0Y5KfK78K -ME+5H/BbnhSmlkCcpN335nZLWaj0t8rxPFdEi1FCc2tKkvkSCASrb2IyjGq3G7kCb5VXWrgb+3IF -B3qtkm63hHibnykyYfXIeVwrc1PlFAJtdFrd5kei0C1ENvdsCv0I9Wd2ZO3Wg79ajRNoA/6AdSeE -XRfchYss5z68DWPj6JY7L/aeHhwMWsMbOAAz6vsKjzqdE9wr9fq1+rFVs2+5lQhSzXvyXR9BWtmx -pKw8ODiwC5Ut/aI9PI/g5bnkijvUj7oDu8uCkb/+9GTovrMzeKs9OO7U37vHG5cru5dtznzsReij -M+9lSGm0g6SFMZGC9kmF8JXhoivUp9KrSaWQ+WpFWa0oqxVltaLM1Ps/VSjVaqm5An2aZ6nRn3Kp -mSrm0eZZ2ez1u63+4GOJ+TGkLNpPHQtRExA9hU6UynXwGp8MZrH5yt501e1N5yXQyiIyVbCYxdZh -V7NxsWcjKDlJqiGAw36RKkELJn2BHXUGsd3jn5dl23QrVXy52WnrGpZz25BavT19Rdtu1YeHQOdy -axkcuFCG1rLnp65ln5EUKlZSaCWFlkonWABJYuB010qSeEmy0TlpVZ60Ft3Nc8miBOIFU5m4ixyE -lrrwIZ0hWFArCZcWBD/kWNSgsMMqMGowV5MRg+LDhdBl0EQluYbIzprU0uQu+a9ICgzfgzOSwiUZ -w/AOIE1aSJHPJI24SqTJ8xxSwVu+UUoL49kltSTRoOspsmfpAr7NpAmER18VkmiTI2/UMon57b1l -D8NsgSRg2AMe0jmY9maSBE7yXxmaGJ2mRmDQU1JoCka3JPLhDXZ6SaVm0iL7OIT46MawS5lxaa5S -jNlUKd4aCacInKCupY6l4NhqnmkU0xBaJmcS9tNw2KdUIWwnP4ESccV4ROWpKYAP0iSFDKx+srl1 -CU6cCji4AEpiCtlCZnFHvoTcIdWKPc5ijywzBhYoCWGnjjcUrdg55N8C1lDOFjODNfQyssYn5YzV -ZnllQA8bzs3Dfs9uM79vvzns2P+HS7XvXBSv/OnnIE61qbhKWBoKz7SrTCL/oJgSZ2/ZalvstlWv -6v0256JJ/IEy9HJ2W4PBVuvY8trgKf3qbTX089TKhHmkbnwepHLrZbfd6DVb5cNWnpc/TDrziGAi -M7iHxc6s+daEyW4DVI0TEtv98On+H88tntuVkQ6fxSW34rMSkAbTj/I3awW/fb37Zqw9CJk6BPjL -+NiFX563bKvs/H7RW4g1z2djvKBF73J0XSUT3G7rosA7STPLzSLFyBqwOYC+4y0z419mMzSkPpmf -nS9k0+n43QfDwTmljxV/MYKynJ0Z8nBB+lc/a3oHgyHQISPAUad9dMMNNE6RP7rD45LzYiX8L0j4 -e/b31xfMnBFpLk3+0US8XIn4jyHiJRqgl2vHe+F7mlOy9cwIJ9jYtww6JRdJkpyajQTTcyxi2KUc -zQqz4pJPyyX+HqMlZBJ1odHfyzvGqfmIQ/y52Ua2+r3jyu5hvdn7c6nMIqvIngWbzpcW2TPCwaft -RKCgKzdzEzI6G8rFvOekjmJrXOhQ5cFfx3UrLDZaB71+q/Kq1R94tVaxytus998ChDdsh73+3zdc -qxFhY9BvzAjknCPf2HljNweNTn/E/rPfOen75jl2OBm0nu3ubHgw5qyhredxvRH3ZL/TbY5UPa63 -+yN9f9fqDy990b1EMfyDFberBB8rEfyhCT6Aj6am94C0HnBfG/5NKqnK4LaeFC4sKHIFwd7yM8ju -YYVjgRFSSSFd5Ab0XvpT5DWT55CF9xMfJv/cZNvTE2j6w07vT8gGt1zet5WMWzAZd2lqZuDiD9Yy -Y1SfRMlcXo1RjmmMn6s++KuF1k86w98iabnbPjrusLT0iVB4rfe3HX+4A3laB4Uf62dWHA+jVmPy -ugfdZkhdd2b+u2f1Tms4bGHbn+2Xbu31X+PUsL/dwF6//nttHL72rDFJlus/HbaHLfdb+ZlgB9Ou -HYRxasaZ688fblSet5oedZLjNYFYOlciM6yHUdmfWx2Y9q54LnWODoNgtKJyD/utVtcXU0IXLpdx -TUiVulB37hqU3nxfp8LGpDmGE+q8EHmUtZELw/ELX1jmhTvrB9en+ZTRYqTw4/qbVndY9+Wt9mR7 -CL3TptCoPkkt8SxCkuvMH0rIDYbCCjqdIFz8K6K8BzeJP7yXFpWNe5kisiW2au6SG2cyQ/ypTP3d -4gWmYysAGWZoSOCaJ3QoY5ScQystgR7ek8aiTXMeMm2LpjiyudHu4GOSCDfWFO2ccjNH8FnQw3tF -EuGDuileeK6SBC7/tEiMypU/PTkR7Suw34wP2ifsX4swCQilyDBEH+61gnHQInVR6hZ3luKPuWXL -IscIQQH3QHuEChoIDd64pwpCmCmR+vakwpjMY/LR7kUK/yAbITEJkwTSpUi7lEYa7r0yjmApRq9a -xk5dYLOhNHgamjiBTuBI2GGM0Ck4oiHcWY3UMU6RpMYxtfIHTjVRzhIrUQUxTJZARwtoXk74dJYL -Zx63iDSyA6RrL/AWeRdHC7cMeU6RjoIOn8KBMMKi0xlNmjyFq2eAVRUckcCWprbD7lSJ0lIh90iX -CMQhwmZlQP+c6G/7gdMjTTO4qgiIhkkV7URLcuXGFcIgMqCAdFkEI2QJ0EzRrNB2qinXAMu72jji -CxpD7p1jZIfG7ueoc0IwIpNleE6mSAy2KlNaYXAGMKB2zeJDRflEs3KYrEJpklrzZUqxWDLHqtAq -KWk2Ga1SpI2SecaujigshI4hhIaIFBpiDFG7sJPFzW6V4euTNCsyF4aP2fA5nWsC1wUJpcNg+pbl -Fm+G/ctcw1Bc2/Gy8wvnXKYkYhR0UiQhrk8dRs/1yPQgLsAvSUyqJDbCignhJ1PhWFVKjPnNgnSE -2Bl3BMVxfQKT0g4ItIwGMiuUwjbYnhcYVAOzKXEddmegIvFDcs0f+6HZpEn8ioxmkxU/gA47pWWC -bCDgol4Xn17kCQYu4a28CbEGXLD78B70uGChIQzc0S3QDy7dJQpGS+SH1M/7QD7XPhIakuhXJGHF -1Xg7QwLX99FUCOuAE68QYQTsEy8DKY6DFLTKSQNzz87eTKL8hssT3SqtiT1yWCmAftw9S01gWoO8 -z5SyUjnDSWdxpo57bT+QL3LjjtTnDooCIwOmYdorWPpEmuHs1CwaUzdwlkK4cFtquxlm5ViBcpuX -KhLkabxUwd2odqmCITWMVCtURCyyTCBSS32DuOwCnCEylml+QKSiA/8WqYGm4ozNFZMx1066Gbwc -D0+/OA0qEQIPFLEE50MNmYxGB4S4JYDKcZqQ0EyFKtAUkxXCOMGd2tUL2acwBYaTUebVzIkVaL1F -w0tEDtNY4JJjJKHNZer4X2cJojVZYr/jCpELHGxaeVJaa/3aEa88uPCw8EvdDZxwwFAkSARLTril -Fg/dIRH8mMOy43lKjA4XsCiu26xZ2DFyJ7Isbkday/pOr7JEgWtFYWbS6ugnpJ1KgbQFUMARluia -ae2EobarUe4moRY4LXM7t5GMktoqaFolPhgPsSJdU5S6bjI5Dyxq099UnHoc6drTPK+jhQOO3bfv -z6wKZUKNp/3GYbt5ZiVfzNcj9XfjEF96cnRE28PT3uuKTUXxsNdptrqV5xjDdQaeuCwgm22djRCA -FdYVxCqnZWweq+SLulXs+sN+/T1mg3r2Zq5Nj1trQYLyOiaVm8xwKRsiUXb5wflu9w0uuBMULDHl -ixfLwEcSuJOX/7zInIBK3XldO59xyiu7f0FGDP97vQ2UCAUSSZFgz1WqcVFRVtHHBdWuoRhkagWT -a1hK7Rn/4pBqnIuglGsWnVb4ojKhBAgD+JJojcikXW5xNcv4/3i1hr8g2EgC2UU/Q0EOwqVQ8ZdE -K7/oU7PGv3jEEiUm7mvsX5rZ0kpe7GamjROHdvVQbsEtDKo5Of8/sviodHQ9s9s2FKzS7rtyp/DY -sXb7Bk1NGv/iMWq3QqIuoUnq2OUlx7YJ0MA0flGp374a/t/zRZLhsg+C2/6lXYzJVOFScIsU+cwq -zzr3+xpqy/gXUgAS3MwA/8qw0TpX3hvctqFeksHA2r80t35q7Vc2e51e3+7TeyfHPMs8M1sJndHR -N9rMRBp2EStkecoqtmRFz0r8RJMZAecF6jl+odakBkiHkVjFqVC4ZmvWoWw3U1w/LI3y1BsbZm1S -lZrYpLo2uJEsYESlRyHgxgTUFOMNiEMhoTtpaISdjNq5XVKp4WSb0xHdXUd0zG2kDRL5VNNUknam -K+QqqYFY8Ppc516Jo+NykaLpaWKKwF/CIXu2wTYqMkXNcznDTnswjM1zozEDk86OOA== - - - 3cWUk0jB8xtf8zBhV8O3nudqCZHE91QBmv+xLToZDntdf5fi5O2KE5dZXX/WO355PFoLem17zM/P -6t1WZ2+z0xu0XMGnvlx92NputzpNKrjd7hzZj+e70OXdVt0u10CYfqvZHsJ1x3B7y9j1x9e/t0TD -W46ale36u14fjXnXsas3xi9ccn2cTSs/nlu2a0et7tC2rw63U9Fz5TY+jV5Udev1450nvWZr6o93 -Ktf/Oup07c/V+nDYb+9bDvDXTd1a79tV+EJQfAT8USmrQnWa/Za/t5uM8vQr/BnyzVvXv+wO9t7V -+4M7UYLeuOi7OlgcXVmAD2aUg7A+V8y3ZDDytKTU6fa6rRKE6fQab1vNMpShkt9cbr/2292mbago -0TfLHLut4RPsxNn9i0t/pOH/QEqIUylRqv9tuImuDOOfOarLNNFvvys91aHoJXM0dM+ud8Pe0eVK -sk/Hh7cHdXAhwppnp1hZdvzk82IXstMvTFOuwiwdHPy5wKvxJU+DAdzjueSjXLUbKbsj9tETs3r6 -Z7uJx0fPHF9f8HIFcLk+HbZ8CoczO0UlL7dXHPwyq0P7PbtdOtppHQyf9tt2Z1Kma5N1LreTEuz8 -Z43c+zI9e3/ZXTGqkGf15K9SMnMh1nwUdru9k36jtQGRkZe+6Nul6bKbcNQa1ptWB/rQdhQf2I4v -mt7oUIadosIAoUPQz1r9wXEL42jhTuq95yedVt8JhUfdZuuv7XZ/MGeV3Vaj1/UbTF0oUTGp8GIZ -rxmGvk0gAVn0rFPvtjZbnc6Dv4bcUJNriwESkpyB4TlI61f1bntwaCnhLzRGDFAZPctlMGAjNlA+ -juPQxTw4XvSOIwQzicflMcSw3WkP3+8O60OSJmCyLUO/gGecgEmlqpLkzPr+HPx2p9frT6Oijm5b -TyoHHbgRt9vqV/r1wbDVr76zuHr9yn7dNqExvnSNVWl02seVRg+2En9V+q03VjQPTq9x3G8NWv13 -rQoYAY/BHucraC3KcQfw1wcxBzPo+XmDUZRjDS4+lTNm1cIBnF3t+q+PW832yVHleWvQ65z4YEgW -H5buosK2TLubOTnGvA1uGJ7BMAwrwbYiwnG09UdF5XFrcFh5jgzR/hsDKqPXuBppMlLj6cnw+GR4 -Rp0kcN5E43bq3Tcn9TetyrPe8ckxl3dv2Oi0Wk038iw1Cdlmv3cMRmp3hmByAzKmM1xf7w/3e/V+ -E+6vHk/NEQhihElrquI/xvghEpSjbfGpPR77E304D1wPnq0/J0pbfFX8G7DaSfui99xhdBzXG7Sh -1fir9C+Biskc9cTYXHw0oL57r8WTyQWOSiABT2dQS7t55x7wL7XOVc0MD/J44Vft1p92VCxNh0EU -XRdZLaklEae/XX+0fdLpEDv56Hf7q3+BmoUf+Gm73mhxEpLTCqNYHiutZjYdSz89rjfsnHVlc6VS -ddrS8ZxMuacuMBvM/rBH0qcVdZHDI4rueLkXrKMkkbzOI3ld7w7blXqnXR9Mm5FOgkZzcpbY750M -O+1uqzLA0ykeV8bSoCDRBAP6r5M6iLrKTutdqzPZumloh62/aHs3vjEf0ax3W53v60PLKTu9Rr0D -3D+I+HxGWdvGVv/RVlwy/vkFWIvgrcRBRmenSfRoWE4bQixbbrSxKLPPbKbEciNMKXMIO569aEVt -VaYw4pSioanA6acULNFQ3M7G7TyjS/5aSyddZxUFbWrTbnyGtHydVnC3/XfgaFqy5N7ucW+I7v7H -vSZteGd34/ueXQh73e8j64OaLe2g07G2BzE+Z0lTy8StMxGjMIgxj8+RlE0tx/Vmc2zGHeFFGSOg -gaXCGMjOWNLjSNY0j9u10Xne6HX6PH/WH1XWT4Y9VhimyCFRoZ1O5W2313hrZ3vljQuzOKVo26oc -Vkmq7MMBHJ9ga6RwUTmuH1vhMWgfnXTqQTmRkTga9uvdwXHdbvAa7+07201bmpqoZCZNVLZO+kQD -A0GkffPJBPOMFyuJ6k00Ac8q26eJFS81U0qKqIFnFo0acGZZboDIU5NySVqYN+vdd/XByMyKxu8Z -bQwg5qDyoNke1p3KO23d8TvEWBWMfrVKefQbC4SHnZ7d1DxvHZ90Bjzod+BXPvU1NjfGD4WNqclC -ViwXP6TsM3ACz+nNp2nKrtIOrFpW1cJK2OPxSqNvEpUHz3bnfpWrdfa75lXLia137NwlffHR1uhv -u68ebve6w92TfSubhzwP4xkx9qZjCByZmK279Xetx1ZVbds9Jr2LrGYbbRqn9d3NR4+M2mqBMg8/ -Zt89/fLXm3d/uvfVnfrrb35Iv3xa3bjff3h0ePtN9x8/bP/jm+tfbbbrtcE/85ffP8i/uH3/5cNv -H2ff3d7591eP7/dPGnr7gXxsroks+yJJBlt/bL35Jvnn/Tv/qX19/+43x4P7gx/lrbVr9+/s/KNP -hX4Ybrz5/l879+9mrd3N9r1vG1u12ldvJl610/zZvk9vbV+7rX95ONz647eN7JfqN+tHvZ2B7e7w -8Oa3+Rcn21vZP3/a+KPz1U9r17YOkh/2pyL7py4O9Kt//frv9RebtVezXxqXu/3b/btvt3+7f3tQ -O7q59c21k+3rD5sHa9eQWNu/7z092Tr47Se90bnfeX37YONwuHmofxEj5Pj9y62G2Pnv/bvfffWT -w2ObPNj8z5v/9Oy3L/+79aj56B8bVfPHP9d3q190XRte15sna9eKP67fbDxoqH9d3zzM9u7cXb+W -fnlz48k3v9+8v/nVy+3N1snX37764YvDO41G/S18a998cLBz6N4sklt13W//8/fb7f/80NzoXPvu -q2r/5r9P1nd2v/wvtP/G/Ts/HKZr1/I7r367v95tfHV0897jO7f00b/vtbW+NThI1/uNR+Lm29uC -MTa2fhi8smTTX7X0T2nSvN3evFW34yse37te/aa10dHPjlwPft65dn/z0d0vfnrwTaEGdlwe/Zp/ -8a3e7P3n5t1XzV9vy/0vfkO033av2Q59m3/9BQzJr/lP+b+6QKdvN97eyKueNV81dxLx2xePt27V -7365/Y+bv/ThLTn88B/EgkXWriX7//sow+83v92+67/d/enBj6745jcPfnfI5M/ykWXd18nNb799 -8I3c+u7NPY/np3t37zT/ePIfHElusMX3dEP5t9hCGz9wA34LDRDX7z2HQq0MYeofG1t7SOqt1uC7 -LP8l/6Ox/mLrj5tbB7d+/O+Dev2rf27k+y//VTy79vrl+tPNjWdbB7vt/97/72+336xd28h+frHn -iPlL3vzlwZ64+Woje73+dHvrj5/2Ntt/5LfuHBxde7O9efC1sAT89netnzd74X1m979HP64/3fn6 -x+2tG80fHW2I0I737egPj2v/uvndq/p/XYe+zU39/p0Xw/9df/HD8GSya2OUjehAA/G6/w9CtWtn -ztNNq489+KV57Y38/e53W8n2v++nyAJ3f7+7vWW54+tvbm70iv+Mj9UoZeOBpYFwnPPd4eAEqWT7 -EtPph52H63s/COSYuzeP7/y+ff3gx9p6cvfFL/LGP/9z1zVklBz5yfOitX39y+Mbm4f587cPbu7U -tgOn2gnwcw8kzO6DJnDofTupjr60XfvixuabwwcDfafx8vm6/kX+ND4Gz77vvBrB/b8PH1S/2S+m -DUnxtvXj5tq19RePmzethPm22NrY+fnttNZiyajcw5/1gZ00D2QiH2aPJzln+Gz7xrPOne0t9Yu8 -+e3D36tr10K/bK8aB9sPtpTeyKtPX6HAqYnvX32DL9269fvx1xt/DJtHG53uq976i8PX/7QofrzJ -CI4ffNN7Ire/rOpf158fHH5lq/325UZ+c+fQScsbWwdffZ/b1vYOnRR88Or19yTC7Qt+/O1Fun3/ -zb3XIOB/39rPDn9af3mtMRgt9+X68xe/dswfnepdlGhhIbBvCb/3fkjubry9ftzevvtQXI9k+y/P -v67HNLFrSSSsRbJ/8uD6vf/+FFaasV8tJ18f6je2ea3did/N7zfvPBocWInd+EJtiJPOr+u7v/+w -6X8t1n+/f/f7zZot8vsrKwV2vtwQv5zsre+evMjCr1jYyjELOLrfb9z+0o1WPD9v/Xz3u6ebXf38 -4M11sf+fl+vpl//45wPg6U3xcHPnPnz7NvnhobiXtPZvfye+ub75HcO+DTXWroWSCIXHDRCFm1gR -H/PdHfkv+PWeq00v2ATYhkO2fre6rVV167nc++X4ARS5i4XhcWvtGjdvAwo9CXjcW+B9oyjuc+O/ -5Rp3sAi05hk2ibu7jg1Zu4bddB2GRuln3z9+AbA7iCy8BVGMk4iaPP5SfGR8u/4tXBvr3IHfsRvf -BVJicWyeo2L3zZ1/MQl2kZ78lrtjQ2dHf3SgpgztOQZibBj8W1wdIFbAjd1AOo2S4x72KjwiMn7z -wyltuD+1L9+ePSSuyfiNMbqXjj46trCSfxZjzGQLKLzDvQqsMpVY+IPl5Eli3XN9xZlD5LgX+gyF -n/7/7b3pWjJLzyh8BJyDTDJDdwPNoCIzKDiDAirIJCjIzPO8a/94j32nque5G1g/9nd917qWN3QX -SVUqlUpSSUWNqLKVyhPwiqGYbJiYJmkpiGtpbwo8ZoanZUhxY2HVAScLsyWZ1YzAtbg5okROZalc -8D185IUHw6T4Bbv2MVjrpNbnF0xyTEUMmeUxNQGIh8YvTWtsyEwJv4YYaYn7+EwnSd8D/sSQHw0D -dx796UhVP3+u8VpblLOecQM0/W9KvGGkcgvYKyf18tddO122+8Owi6FxJbndPuQCzaU4y745m5PC -T7eXLQ1n63NmKxOpE/Hdo7Y5I1Y7Am/YnAFbTGrQ4I4WJyHfNaP6Pd74PoQ9TmJtEc7sq8ebKkz3 -z51irbbOiweU741zz4viQ/aluxmABjvP/pFSLAFsO6TviXnvMvRVXsrfRhy+dzBCX1elYbARydNB -KiSyG8n8YFIc+0tVQbdCmtLtPiUQhtXCPpIPItNNrESAaYps29S8vPxm1DMFgFYMfhZaRu6eP3Ko -X6ApgbYe7xxjnJgwTZCmdKRxYsI0YbU+nkNDaGiMySyxfbszwUJJzsObKjsHTfeM1Y9at3msxgp0 -EkD9f8uywIY0Z09VP4q1PO0BBL5B/in77s8/uT93WB1GoiKhQiexLYLZPkPXwsWb30RfIBtYFohw -LPlzi2ridV5v5B6aNWB3WJ0Mcwod0TIqGHpmaNrPL4BKfk5P3rH2b3ML+r+yo+OHYmXmHsPyerpE -To0hfAruKivHIJUKXMTupWDrGkbKpYeRMJXcyzwbgF9P1uTw+fqByjbtKdZSbfjHQKxZzMDopzoz -Z2H6YU9Dh3s9bvY/wzDcMKz9/OwuAIbI43eMXyBpZBh08zPqyi684JmdSI/+5gSapluJjUzny5el -jzAPJVHufvqd5dJiD6uScqf+kgxnBV2R92RiWL/NPz1mYbdo/92zHd233bmn+5dXZA== - - - a3Mv3n6jLI2X50Rith88EvVVeF7ZPow3MszsqpThPjVmm5tnyXJ2s5k2Y+m7t2uM4IK4vvhC1l2B -+E4VbkSwH1b5aj62zxNksLm1S+bgvZtLXdRC/ItGbB3+yWFbrBTMbhy31bLfF4yBuHoD+yY4WsDu -9Fwu93z2KRppNHs56C6yb0+B8/Q08PIDm1/qF/O5SDorHBjVUPF24/9ieEzJMfZShmnJr18JMHOr -l6Jz53gHRH4Yo/UbFZyO+qtX1BG0esEUXH4XfrY/NPIqhN6fidvSuiCDaMLKF4F9ssPOza3eKKgv -tTlukiaTdtD5y7724y5Xa5MjZhqvavej4ugvFeSYz+sAO/2aKBaqTmYzCi3tmTDjCGC8Z29X8fT4 -63zM0qn6GMnPw88kAH1ZYLXD5mYw3jeTn6Ve1/0OnZ/Ys+t818vvWFOe70Dq0i43UCJ1g/acSWkQ -6fxIdRgssd+x7c7u1/UJaEqJt7vVi3TvZlomLqOlcan7MOiBbnKBBM63rzQMEB+5mDf1BOLvLcno -Aiz6qDN7ed08L978/bzn46+tcO7J/zjJPTcCYFlU3JXPRH5GjjZiVYXZUK4ixZv3uh8pG8+4CUjn -yxe1zicb566Xcs953i5+A73y86QrWLz1+rxYueHXPtYkJu4Z8ETKcfHtepmqII3BJvq8LQX89Ld4 -e0Nzterlu9lX127HY67DFE/s9K5efgZOjjfCIckrj524ea9csiD4/RV7aO9+v7/TP56nO1Dpgrly -sV31qw1N0i4esLkvPpfvH3qNXv2J++HFg6zJxbjrm2E/Wvp+cvFTCi47JEjGOJl7iZc/K387vwe1 -++UkjIKLnFvYS+6mjCJzTbcqhfvC67WMN9jTi439HdTm9TNMcnYt0g5ZUEQYyPu2srnxAYjKHIRh -fdZo+qq8rl4W5/W4oASzk9h12ovfL1/Lwo/DFQfGjj3kFpmbpRoPoXlBTPewHK5Sd98RMveQLtWy -F/mVWPNme3bpzW5CqT2Sydlc4nN0X/xOfUVKnfHuXEbP1O/G04B9v9vOLacPfqCYlFl4dQl//RA6 -D526vhFxSeaKjqoxSGqWKzVyidQzVht7xe+nLezIjKhge1t1lgu5z0m5kJ08V11X5E0uFZnl1Jvk -/L/Z18ZNv3xZ3Il6A5LY6cim38aTbHK16WG/pBILGHR+PFfARY9TsyNl1DwplMvK/O4vkElUqrC/ -rDsXbX6ioiAoS1vkpn8C7vg9z75+N/Yi2Bn6dl8MP49C2fT970yknMOfBu0oLwrs0Qu/XNc5ZL3m -/2D3k5DfM49Mx90vjtTjmJgc1Yd9sdrdbovBQbl06XO5m8CL7XX+7yETV/LLkwO2r1kHaUoXpBfk -XMwNqlojUvxubMDYI77/RCvwZvv5VXGX7bXsxtndFb+Xm7AKw6Zg15z40NlOq1z4vo4Ky4e1X5By -kECOWEbFKrtavz8EFZ9Ni5WMewwqRopmfLDD186WB3tR9t6M3pBx+YFkRKs4vuwiU2EfEAxA7pQn -6vf6kvHNxRtoRZXf3AOZj4KZfT3LXmZWTvFa5NQg+DSKiKhIbIMdOtOMlXLxUO0JCQpSiQU3wh3t -lqmG6p7kKNcXpWF8AZhDYZ8KsTy5xMtdGeag/Zhb5r696liA8rWkFggvaE/EJH0XiMJO2ji3m1qp -ErZn5kWL8XnnO7GDRdxY5AjquvwETPVFlIbtTbyYra7WXOPgEil0NMNIlXZ2jg8OWe0icHXbuRVR -B3adz/w8kXVhU4I9yKTR4ULCv0fy4jkd+r7c8CMVuyDuqj4iP5+vvmQGvMBjom17UBoQlx6xBs9C -pJkXuXl/jE4lnOiwhsg9L+u7YvBhPeI0pdme77V4f8FYzktDB/0Jlox9Uy4ln6tyZWNdfa5jQ/ni -++/8HMz2X1rQhVQ0gDuQ2KUwnmzAoqNTXLyVAg+eABCwG9Jrl7mDZVhzAeZyWA2zzc3jfstezss+ -sQ4uB/aive7QEl4X7kupL7yhBDLbTkoQjiAt0ZCuvE++NrJQ7iM/zvQlq9Byjcq9eYQGGUnPs4nW -pJRLVrY7dPQdKntvQ68Fsvm3vRinz/9gzM8+MebM+g9rkUgmXw/HUmm5zyUHq4loS8ACt/PUr4Ku -tyQuvvfjjVz0Lv3FiOgX/MEwZhqbm16TqRfQt1/K5ewEmPxl3xgZ8y+NjV5MB2QH3AH7vFGgj1ze -5V6CWZiXiX8hxoKZszTcO3q5ZCjsQAohLWMv2I4W43xsNhrRr83P12TiulAtTN9HDmRhObKXT9Fu -sVa7dPCHxfKfgT5W7p+XshefTVA7E08BggquhyDlOzPYc79Xued5/E0ihPut7NbXchRrt1Fge2d+ -pSZQuVP7x06i0dsvbG5oWbgqTuK04zK4//ihM2t/Cawg/7p8WR6y3MjLJ140cTKJlWNb1qh4PA9c -ZROOIo4dgI58FhIvo+UlaOMrVzckODfTo9Gwkab6/sf8PEQ2Kq1OawHzsssL3jymyX13sC9/fe6n -KNrCg22j0CLYiOGJEE82ge41YWbjOxJ6g4lvenOLwWTLyzYJxC71h/dAUYyFBOwrKK/dPRCw7Qax -9rQX3jI89pZrNBMNgXapWfa3DiP/e5O4LBGVv95gi1oR2xxxeb8S+UQxsfKey0bR/xMZXgbbtXwu -GbxB8M5/YCx4rfIKkRbluclhNbwSKFP5Ye6hVkXHpZM2ogMl6dKTAzaH8ftF/235C9ZrpPTrLpdS -y59StzVtgsAJtVWaf9HNh/dfVsLUyx+asMu+3cWyNKR98fydz/eTWNw8BZAlLvdGP8G+f1f2ADu7 -OqVQOznJx96iIdHs/3SDk1yjuPXT61r/+gpsYy8YV5ekFB8PxX8F62WQnl0VP3/aThGj8XCwWQ97 -zp8WiOhTYZodhYo388KbbMsnqKcPZ9lbyydhXh47waVo/BI/OM1Lhh9kf8ZLg0YpLkhGCeYOUhyq -I+yw5jwknRT2qSAbOUqMpD6XdKn/9RvMLa7tj+Uv7yeFFsNH8db+TQjd42D3uhc3D9VnOt1qDmAs -4zKrIgKrsdLilpjA7IOa5wMEH2JfPZ12fpoKLYqneoHSXSAFqy4QhDXU2JaGmSqAap6vXKlm6d2V -mryBjQw9qyK/fLiba0yHO9TH/81w8bEkdXa7HJw9rFCg3vasiPMUmVQpcQqXtJUQXslWCHgsltls -n/DvcrBkmknzhKQQhJwQPgrv5bWCgeGA+VVfkRWmiEte9OUxuoom0+V/qz9cELVB1CUXnxgR8mYj -P4vZfLsLD4WI7gs2gPFmMTtDdz+dCUH5B8BHoIB2vcf+ZHyz+F5KwxdlLWOoZXE5xOGnspBUNaCi -5AmfYQ9wwHm+v9kaNy33t7u38QAlzuj2l4X7h7LxUE4QyzGNKfDJWX8zPttNx2cjJkfojI3f3J79 -dzpenG37/0F801+Ii1efff/M4Ydb9FhgOy4kO3zW3GKQ8FcK7J/l/mw1hx8tF2fo2i8EGaFmwE1Q -yZcfCaLgGSDjf7oAKp7tlgjEcHz2s0ON+2fz/j8oUry/Ws1/hkwe2nY/nKLu3SxgXf9MFgIYBtsC -JmoPvVt+C+h/tmf7xQzVYggr88Rk9KTw/I+3w83PShlWq0b8xubnD2WJydNqNLkFpQfozinuw8uu -vxihq9P0OkAxHQACmWfWZyGHwbhxY7kyZr8HLgHUuClDAFjxxnR9Hk9EZPWamzm2cMQ/onRIQg8J -E9SMwpufEX9xiSC0zk/QJawNYCtlYolW6yJwHnNLT+2HS8LWm3pgP1g/bHodcP4/JtCgJKr+btyY -7v8Gi/7PnOPGMBXXm2SOed9EmS36w8cyTDp+XaGL+GK8QTiEFDWTkymigzCfJn/LJLGigkg/hstY -Pw/NiBc44QtYhOnVFe0MsoYoMcWMiAeyqzGSBia9zD+ckGCSYxXJDMYk1E4lj+kivlsulgLimz/Y -rnOD5X+OmvebEexaP98/4w0/mdqLgck+K2+Wf7CR/ne5mQmS2nBFqHKBRmK3/jDEPILy4rHGJ5Jn -OoKD7cniP0zirFh4WBu4aI8QZa9If2oqtVyPpbk8odxwsxz0d/X+P+ONLJ9Ui02G+M5VVZrr0edx -s0QKwc1iCGqIjECW+Aslki52LDhhbigqbnphyfnbcPGLRsvm1ZpBKpMbcqzW2MKUNiCTiZK+WkMn -VqtNyB3VzGR9WSejjhXuFdhQTSqLsrfkq8bU9QpR3U7/reBX4pw677tYhRfVGdPh6OFyPh8PpZtr -QoOVzF8uYrjaRR0tMXZCob9iEgR/uEmL6upsapQ3OXN6S1gsDPTUbbCAsFIDOhCfCwcGK7xiRHWB -p6vS9m6MobOK60LgRbGhTLoDcMOfrSqcFmeVU0Lz0t8AlHs8Oar5e4L6Jf7RAthDkdIHL/AV1Q3l -jWeoX5NvVQQoE18yA4LLYb9b1sYblTcoifFh8djnbqozvgoFJ13qXH8ivf4A5SYj7SeHtB/xOPk2 -GF4BqSwFVmV51rr9Bjd9YKXMi1jKEFqtGrwaKXX0QBNmqiKvzDrKq60jHprshh0zF8agfFHTZEKN -DejEQDRHKKatIaWkzdRJxbTRp5WQDr5YCrcRIRcC0kLRNSpKurK4ZYQ1yhlWEQu/y0EYg+jP531p -VqswI4ofwC4M6v9ER26K4eq32s5+VgOgiI5NjZptxkgtHKPRbPRbop1BuJxIfxdB7blhi0Z0weeC -o5m4XQ6Q4+04Nx7CNPjZ/fWRZiFPelZutavJ3yw8QO6G5fd3eCBSJVSVENz8D/kb5M3VyC4Fvt+O -OY8hv0DZPfjsbTyIvP6MxsvI3RI2ufEBm7JaB7a7eZj16q0YC9vUbKGfse0XZi1q/JvV6A9ezxem -O7UamQbO3M/M/0Jt7lerDdtMZ06gDYudnWeSUp1paCe6GzWR0mwlvmxUnceg0Q/SqMNz3lI0aLjj -VGid3jEtNwJynT4ybcX86gXWA3k6Ohv8c1bc/KAKDbpTgKAsxPuCEtFQRjPtRoYkY0AtRfe86ACT -NVNMOW6FL/jQF2gj7CpWuSBEVeAO2Ds1DSUzVh31MTMSfMvILdMCVTIdylHPN+E//tYarRZD7AbY -oRtedKiDWvI75oAp/oU5jlJtvRmFlxt0b0Vf36mGGn6DqjBdbv4P00rNsECtVuwtZ3q8gLFOwrrM -x7b5j8jpq95qi27a4WAZtvuP/hi3w9Vcz3vHtBku5Nd1ytvsRLaE9vhgnub9lTEd2HY6fcf713iB -7rvSk7qo1ZYrfG3Iubg5I6WFhWHmN8DyO1QxXd9ljZuCgEfKolQW6WzPBm2Gm+XKoAlS1X74U0PN -ZhtRxWojpMjpMBCfAhppL0a7i6Txbim/clG7rWiPMaEVzcXuUKPGwkZn3FbUDbVV9L3YhUdzfZHH -tFltvpcLPXmHmm33A249qrlZVlsYqPi+OrUWA3xfjW6TxXjSF66x1Gg0FBxlBu1guw== - - - WejDmpND7BnS9UBBu+20DybAWIdKqNF4h1w+C+gbPzGq0KStVB1I/7MKS9xE6u4daLWRa/bq3jto -OVGxAdTasbugcJqjxl9CO8Z1qN8StjVdlOi0pS8xozUaLldDHamCG2x1Zhw3GO11PQI6khd+rq9m -gD23Nd4jcKvv/WKowyVMG9YXsTV3oIt/018suPvp1G1p3MrIMBj+idQlbzP8Ej5jiv2BjTs6+/C+ -vD08fvjO/kMZmGZ/oM2JVD41HRLaIONK9ygcw2F8ocO/f3SMdlHD5W46Fl+4x1vWOa65yLYWe2Li -wtVcjz//M54/jjff4yEfZqMwvC/4MnXSYmoIJVNkDblpuHc27JMVP1G9wSuQiX8lAtevgwgRCdyF -AtfTXRR9omKXT+ko/+KJ/4RfXESvG7t88TtVmVWdz1d9lEiQ4d9Sgatnemr3RatX9lDE82xz2wOZ -2aXdd99J2YPTH3j19R22B/bpF3vwrlW0h4g7iohctb0Yfdxe8D3FttT2DjpXnMWuH74y0XwymqQ7 -9F8HZ9Hh6DThLVHtjQs292aTuRrkgqv722wttc0kq5dv4fKyE3stbT46RLFTbjfKV7mrIenPJRYs -lqjrKVAI+Z8BX53WGi4zoHC0nnIBxRSN6tvN5mLbACTBGyISe2GGIfRsmyzvXqnucnZOjM5JjPlB -ALv5JLaXADu5D2Qq9nM8cDwvxVk4sk1WYsn1xS98rczh1+2iFOnH5vPu40kdaSXRjadvumFVpF3X -fd3mlqEVkNI/tYpbHeml3bvZku6NOtJH8iPmoNJ+AanNLaDdeoJ3IQ2k8am372mX1JHGfB+BS2qi -PlJHuRuzuZ3N1byuNlainK9lNZDSTtdi47vSQNruEuXv+xcBKb7xjkdbsV+ek7e9hirSSpVqaJKX -6mQaXxgp8OKgJJ3TN+Dkj32mjtD6lLPqbUff56QPkMaWClaqE3kW6aPHI0Maj//1VgJSgZMZtL3N -53TR0ECa7dOJsotURdq9/nrWQlq1uV1R78WH+lgv7Z9b53T8rI70qeDLrF1/dTWkgYt5OiMghXmR -spL/upN9UEcaa7eJcoq4V0XqKE8Sruc/6kENqc1NlD8/yxpjpZ3u2eKuoIW0T1SCX6/qSCtEzjP2 -JtoYqc0tJ/DOGbxmkbZDXhmBr+9jVyx5Sx+zsgRp55KoJ0IkQuqXIbW5t47qeEk/90MUoE2s5Pxb -f+/0NZDSzsRsVO5qIS0Sd/7PFEaKeEw21pt1Ovu7uX9WRfpy4YlqIq2NX6KEGlIk+WPvIeKl53Oo -jXXrqFXH9+8dn1cV6atnMdFE+jJ9+hpgpDa3cqzvFeK1trpUR1qPupvl7OWVOtLVrUMNKchkhPa1 -V3HsNAj8/kC8XdeK6kjvMqVe9+nzUxXp58PsBiNF+4tyrL/t+KisgfQjSXxu5yF1pPe/q7+HVDIq -Q4ryuhDa3k1ooUngjfslYNdA2m4SpZ+/W1WkyfuQw579DIEcA7TptXzR7HuJHot0EPXJFo2vU+/7 -MVLKk/FWpSOtE1/+dA4hDQpIAQtCC2B/15zQv9rIkW6X51cs0t11QDZS+0f/3ccgzbfJG6kgDG62 -zYwdsADasFIq3YTwWAFpYacQhVUHzSC9JmshmSAMrmL3zE4TdaULNYwUYWHRujab/mCBkBIypJtN -brzk+PfWLkO6jf+m2Z3mOv0UlpHXsRx/NWys/jDu92hpp6rN8+4yrfm2/UT+vWq9nRLVL/deeKuQ -/CB6i+cav4Y5OA8UuH79jhOyt3SS7DXYt9tZUrEq6cXU0VJ7zwjFx5v0h+bbJOV//tJ+O+13PTzF -lO9z1HlnqPm2HlhcU9pvBw/fF8JbGcVo54NjOKhq/DpZPa9eNrfM22/POiX7bTPwwymn36QjraBY -c3D7slB7z0i5YmC20Xz75h5E7NpvP4rpK45iKu+/3N2ES/Pt7+5xVdV8O3ul8k/CWwXF/mblTFfr -19Clp4u45ttbKpZpaVPMPVwMXupavz63n998+DXflnJ3g7Hm21vq2kFqUyxnp1y+tMbbeJUoXfm5 -Mae9F7K3gcbT9pp9WwhfyldltfFV8eeE97FtLPgstcAKxMjzXmDlz5d7jt6uWHO03Iszoie/3N4z -nyRyjNq5kIVZsIduU22wMH8b6E8YPSvbg8XnAvrzhu033npjZASLr/+c5yTfxkF5rh5DrDwHO0ei -j2WcUQ/88PYPrw1k6YhWROQuufCAHdvag2h1nAO+70senzPyczXwgXRylDb7r3BIIm43DptbQIst -HQ2ktBPZOe/qSGPtjiZS2ER+SZk+Jh4rtnQ0kaItb6iFdCRGGnsBG1mENnmffxEhHZ2fOwWkWPvn -kUZl5EXaPz/SylyC1NfG1qsYrYTAV5QmUqz9ayAFexC0/66AFMYiGeunJlIg8DamjRRp/5pIbW6k -/0/Vx3ppD+shrXs0kWKdQkCK1r4ELdIpGpJZHac49PgTOxG+Qmf0Z6Zdd/+3EK99jZa0c90ttR4M -28WnLN+x0iIPY/7IsdJSsXS/vH+IOs8iB02mvN+wwuX8JStb8SjPPCj8yay8owZrrCOZxNj7mZXv -csVD9GIQmVTV9Yt7kUlV3osguPolhDkqiCYWfabkZv8E75YsAqwCcwh43RL6A4O7WjGNZN4nEHv5 -yHRcdPN/nsUaM+sze+AbFxGWini4X7fXrE8Jutx8hAfnSKHd+znqMHo7K45FI3g8lxKQ97hBh4nb -uNuN/yCGfJNaSWqdmqVuZJ0Sd6m39wDr3gUpzzUh8qPJ3IGY5CAtP/f5mhHR0R+284wxrzI+j11z -fDa3MEL8R3MGufl7cRjPn5Mfn5/lMbURIuW1qUMs8/O3xPzJWBYmiaUDjPTnf8uaoGxm2J0j1kXI -EmcJfCXZkRnOqnysrVNele6g3HRYTj6a8lS+k7rVp7tNm1hS0eNTip5uSSp6opqix2bEuqWPm42Y -gHyXJQQ8Z0SPOu266F5wjsAa/QmWgswflnbkQp127ZBdU2xrrUrsj1MdWtthfWjiXQwPLnr92rgz -InWlds6eJqh2pBiQjUq8i4lGNX4Mn7OzrxCjJcDyurQ0IDUJA7wD5lxLRFt+GYr5/Mt3Dp1rFTWm -Kbgi+y5PFfeB8fMfSBhCe5eeLgNXHOeIOBk7ddSBkWaBqYHCdBed8viV665fNrvu9Fcd7JV9R2uv -O5dOMtgkg+jPe0B0SKFgC5CM3lJNbTqBYuIJRX9gQgVHtJI3YHy8FFTyxsMT3yVRv/BYdhXVnmUq -g63WILPEeNeMKLQw5ZQIFt9dQDklo4qRFmZW9MySW5tbc2MyoTMKjUGbed9pbks2t5X5rSCaVK1r -T2prf1SRymkVYt0thY1Xp0u761vNvfLhme2PGZUOuqSt0HFTZ3Obm0Gw8nUVCyOdXzKDC7euYmFh -/iqPfwIohpOPAPayMNEvVHfCDDDphmK1X9wJLwusrW/EWBmkWKs7mmK9zQkpJpVoFvu1kvphvhIb -heG6y2wP1I4l5y/Qn6qaMail0Kpu0FS+NbUbyDGRgq2+KnfXjpOtynxr7bJmKDPnsYqZrKIjk7pA -G2SJW6dO23Fu1vjgdUs5dTJbfls2dCOoK4ZVmVBQXS/G05TZ6pt4so6wnKzsioEUMNURmW55GE0M -lr2oI4yNHNDYoiZV5Lp+t2CTM4eS0iAjPraH+twOwiKHNny6QTxfsoBAw6kBmqBdR4dRFR8aC+RG -X+2wua10ynmgAJBKS7TkPndu/W3ZrAC4EQSAWXtfe3weEyS3mSO6RFcw9mfINXnB1/d7gw713k7B -VMUdWfrcVgTJIImFUzV8NGxy4P1p1Cx/sidWesQyv8Q1zR5sJQGxLC5xCbH4JY5/EXWlZhHpAr9F -Y5EucVWr29i7BFzrMOch0fMl3MpdsvLe6LlkZR6Sv1upBq9hFBu7ZGFoooXEzr5lN8ktiku4M+ve -4K0keVdu99Jt+QD3BvDBmsIDwpEqitkyP1eyPVXD72Nz63np/m7R4W77KL8PIouxr08mCjT8NYg6 -tClOFslNiadhJVGls3u5Kg18oO1MZGWyCWUaUbkmV6Wt0I7Rx3B/3Pr9MetfiF43Ex4ZR4hsMUsb -YU2mCR+2XtJPPv2hGfN5Tdj8+P3lAG/0qibf97QGZHPrcDrwjnTTO0QAXDfdcZvBnJsjTM/ASW+T -bXVauixQR7bRGe1DYl2WGYtoq0OHVR5x/AYaFTwzwwyaq07EyQXoT9iaz1s55taL2m4nPRU1fQQJ -wLT8rWreVsay0PK3ImAWFp+6vQSLxuY++pACz5r+lmczDUdqSFrrDXsmzsA5dgUyUHhrUoDCyWQr -cKzve7y9rwJMckJobROVng96sHYR9Eo1zgIOUz3JCUMBB5/a3MbL0MR2g4BRYctnfBpKBIrl9Jsi -pUj9TK8lu5hcom1nPoVE287kB3gmJJqqh6QAhMmuj5VoTUGicdarFQ1eDsxYotlMniAhYIdLNH5V -Vl6XJ5BoMGtqEs3y2gc41iWawnfBwDleoiEox5+9Yjg6p0HBvJc/xYnY3GragGQTel3qWdDio0N1 -HSUWfJbGW4LNo/CNo2fHHsBy+8u3Z60thkxqZgVY5w87tcXMeOCtiVkA9mq3JGRtbk0xe2D0g3Qx -v2JbWmKJH6KgwKzJgpq0JIwxHHOqvSYU7IcBOMeHQGAoGga17OTdGI700N2ke1nlNAEDO4WvmtkL -YXwBpF1Id0N4GjpGvxcxad/xvD3a4mu9mfVmiXwXmrvhmyX9Xt8Hi4Adr99/rNX2Qqu7GJo16y4t -5S6G4Byj34ug8Hvh4bsYhqOi36tB4a1XDThmd0P9vRBLmI/10buhZC/syc+JMRZ4epJwJCR/VOOw -2L1SEjwlhGFo6gK9jc6UiEkZNHH61mod46uW+fkB2LGrW9QvlbWtH2utQzFT6i43kwiLlkUEcxk2 -tc51Tk8LQM/XiI7nykQ4naxLmhyBY3sMl5d8YyqEQ4ptqRCOmLIrTWxMVL410gzP045c07D3oWeU -OVKaWFyD7emibQGY5tkN7+0xG1APwKKui1r9FB4SoFjCmoqhEYOIZrIXNuWDZYBpLPa2bvAtwxE2 -zn9vqlMmOUKxuNgdmVm6wn6Wid8tVC0Ldg5wttx2Yg8tnnr24Gu3ZA/lol2UN1dSy6Bjbm45PodO -vIspM+hkGUMH59DpZ9BhmXyCHDpNpDiDTjNb0GIOnX4GnThb8JgcOv0MOonWd0QOnX4GnSRb8Igc -Ov0MOp1sQUs5dPoZdDhb8AQ5dPrt2Nzqo3PoFAtXkkHHWxZH5tDpZ9Bhfcw4h04SkKyTYfboKatp -29ox8NqZQLJgFxNdUvX0Fo0Dt/3m8qXKMhv54GDYolz7VXEOmPX0vhelu721qROd8RXlARsH0+nC -L2FXaa4ov8d7zSSDjX/Hr0ZOFOkZnx4w/Tgsc+PDvj6jzDnT45N5rpTrxTzRI9a7pA== - - - kflo4LnS65Jayhwai6WkOVOypiQLBRFie6wlUO0shYIw8WOqwSDW3cZaTmN8M9jR/qp2yKk/NJvJ -ZDdpJKRVxyDmZJjzYz3GTLKb1rGN1EoySnbTtk/1DxxE0rKkGwwiMU2NzJCSLJtBkilsDpg0BItU -ntgMqLVR5qM5mdUvWzJ68arUMnsHUe0QSksppjj37c5k1qGxbQ/EUjvL5vUxpevMyHE4S65kbhL4 -bVM1aPaAE6uKptqlmQUm0pTkeWCGapfpPL69UQy8hTy+gVH+i1PitNJOTdNOgtFXpZUx8J6rqVOr -U1m1FE3t+TOMgTcdRTCqSD2YqvNnNo8vuTHKidFjBml0OgJ2sgzRjXDyoZWZYgWYMcebp5jUwXok -xQzTRM0PUpBoB1FM6vil8q12SBroVJUF1qtkcpnTZRU+X6WZxS/1Z3W/pX6+nAyEBoCZQ7ojq4D4 -orok+vOlu7qrJow93uIzMPYmVdPGnhYAeYziASCMrkaBeeZv1TCXKnfQDPUI4/2FU2nUlwVKcTN2 -Mth0XdIoK03DiFOwvV6OnM0gzdnEkScekP6VJzaFeaWjR6a3ilB+b3FnguSikxEtTv69sebeUTGV -GE3JIEFOIXW0M6J2qrv5AfrYjdkVL6x3TX3s98aae0c7zU4eQXQwnaYGngabzJTQZgGLHhlJlyT5 -yNApyor7Q6dL0sVsvIvp0Clmtkv60enGSXF6XZLf3RGW+X+ZlKRTeGRusUfmyCg10IRdJjwy7Bmf -QXqOKx0+P8YjI7L3b4/3yAAAr050h4U0tEM8MopsweM9MigNTeaR0cpINcrPi1nyyKj6+W9NpOeY -S85BKXqw4Iw52Vz4HirVQUiV5ZqgLGvHjZtRlqPXzYDTBDPo5ySuaqeJZEDzkn7ynMapA0NLew1i -es2koR0YwC7eX1ACmbZ3yUL6mCJ0QTVb0CivznLQrDJCFefVmYzX082rE6WO6mQKGztBa7qXVIlW -r0i31A3Ve1TeRYqemdzouJx3rcCk0+TDISyniKnTz4ezfv/YIflwalHQj3+nzoc7Is/CQj6cXoTq -6fLhkNf6yBVoIh9O5UZQzSSuw/PhJNFQ3G88p86Hk987ymTEnTofzvCWgJPkw0lOrEyEWh6WDye3 -xbSOdVAm2/GZ9WiDO1lMJICSxkRq6ZZmYiJfl6ZiIo3W/nYWPVYNKOAAieOz0TGcoNHsm4RjJo9E -Ewqjj2E4J8jkUkQy6MTAG0s0lFyn7RBTxjuLatloRDx71n5FxLNnbTARskWo6e1pvR6zDIXkI5FX -4dhlCMB0r5VRk2Oay7C9MrsMdbRxRG9r9qIqo53mNmAMx9ry0chHBjgnSYQsRsztYoZwtK8E1rhN -SyvMWnklsOFtaFKvtOy2Rl9Q6cNCyWf6FzsZGtR8RirpODRARDRmrYuFD8pI7Tt6JpJITWak9h0D -My4Dg1S/k2SkfqxPk5GK4JwiIxXlix2fkYqgnCIjFcExdw20zCRWi+vDC0T70lTLQUa+EDv70mXY -OnoZylLh1OXYqVPhcDy/bkTPKVLhVOfl5Klwh/stpRTTt90t2JVHpMKJ7yDCyXD/SiqcilfhX0iF -U/ePmbTP2nqKoVgUiO9P1kt8mmrGqpq5EV6qjxXCBmaR2UAvBCpuyqNowoGMgGnfbGdRh1FcMmz1 -cEGUjd42eYSjdzsviHK1LU/AYpzcLM+r+9C8Dke+OXDeUZXtQVi/qGpcUA0fOwe4xGXmYVqZv/Z7 -RedoXyqnXNluuZF5LGUjOw9I/nLjOtHGZcOLndImm6vSjdtCPjwsFPKRGipC8LLitiP3XNpl1uMk -zcVSyzpDVhKbo/SunXeWfEo/itlLmux2MXy4EzufRUjjU7/70r7UyrCLtVt6yW6jiCZSotzI62XY -uR9+7vpaSL90kFZCKRFSeS5WOrAVeeHkyW6x1rTOVyaUpYA5vHrJbmRYhlRaj+/iTyvDjnY61/T+ -QyvZ7V0v6+xPP8Nu2WhoIj2vj6cjLaRj/Xp8Ty1tpKX794omeV2L6EVPC+mTNMMOzyosWHbU+BPL -52mT7S7U2jFeBUnL2EfdFMSY75Fpx26ddVpFEb3nrKRMeT+Xb6h6vmMTIbdSDTawYMYiOSN6PF+e -JrXHOEJV7jXRrmO1NtEl0bmYTqeMglON4jwY6/WUleTUyo6o3KliwrukV0nOkhfuvWg6RNIgGxLf -CWkhrs+oiJxuXJ95fjIoIqc5PrW6b0bFRsyOz7jWgGmiG9UZkd2ldkT9OPPrpTLWLkSkGe5qtgCd -vqf3kGy6w/wwVrPp1OwArhbn6bLpTN4Pc2Q2nZpPUL5ejs+mU8ulOzTzUTubTs0Xrx5pf0w2nYQs -7JpVvX/sqGw6NVAGN4QckE134I5sMZtO7ZyG3ytPlk2nlksntvdPk02nlktnMrbHQjadmq+dq8B+ -umw6tdnFnt6TZtOpKTfi2NHTZNOp5dJp3DZ/RDadsktTp7amdGg2nZpyanOfOptObf5UoqGOzKaT -gzKsKXxQNp2WbnnabDrzFDsmm04GSn4mfqJsuoMoZjmbTjfH6mTZdOq51afOplMDAFhOnE2ndloi -i4E/QTadmniQWq+nyKYzOBk5UTad8f5yimw6NWII2vipsumMMrlOk02nlkunWY/veAMwJBiAkvpi -lq5u0q7ipSxSKa/NYTLxaW2w2CXEjy21atkcXq9O0aUdOuU5db06be3CHJ12AY8lOglUkkRCopxM -Q8XCJAtIEhQ0sp61OiXrkllRYKK6nPRg6qAuIYpBpyyVXdbrknoghaaE0aGTTtllDZGJdjGpRXRN -3m5lFlHUlVoZFDbX98zx1bL0Ct0dXeZOdM+VSZX8kDJ3mtXlaqZylUyWudPK5DKXSGcqQEI/Plko -dHfcXFXaKzNVZnS9VKbK3Bl6FBFhji5zx+ow+oXuji5zx+S+GRS6M3d4tKqd4J6r6HWT1J9E83kW -tZOFKK1qgsp9cC4PDO3KZ5Y/NU95UIE6w9hDI/5EaXTIeNb1wJtKpDMT0WwzzjDUDuIwnV8IWHTC -Di0EkSHqaLr+pJxsrsIWYHZ65PlE6NJUzTGr3Q2ldd5Tefw7MLFLEg0FTGUQD246GgpAGcaPmY6G -AmDmIrr1A5ux7DtJ5uPxRyGooqDOdeDs7JuEY6q2qxoUUWTXyylWIIaiyGRXzRQ2zmXHwEwl1mrV -gJAn1r4slIm1L4vT3QqIgJ2kkDHmMeitGWEm3rs0SdlQI6VhvVe9GGq/8kgXZeIpI6h1LXGtGOrx -dnaSzBT+5mPrmoQSVH1/qgqG8OJR+4jY9NpvWipUrXX6hgqvHa1OMFD0ojotwDnBLQEMnGOrVTNQ -uEWodsOhtVjVpolEBksnvL6AyjJ8NZHIYMoDf3SFOy6/UqvG3QHLUCW44tC61dYq3OllPh6xDDlG -YyvcnaRSnmE+kblKecfmE/GV8o5fhjoV7qR5SWbyQw6pcKdX7xXVuLNe4c7sreYo++n4xNqPtaDm -aFmvphNrAZixmmMzo+gwtekOS6yVZz7Gj/UfofzCO9V0aGv3XGE4B8hNxR0RCM5J8jnvCHO2mCEc -7VxYWRKTzeiaCVwuz0p+u1oSk/hUFAmIoGIZpr0GE2HCr8XVfTOZxmQmiclz1ZVboqJdzEwak3SQ -Br5TARQ/L5ppTGmvqQx1XbOdX5Vpr5lVaSaJyXO1kCvfh9qVLUtJTFoRRKh2os5Oa00xbLE5vEfc -yi9TDFUuS2y1mRoQp8hxLYS1bxVD9ovVinSWyj1iUmrrY+3TXU3VxqdvJ8pxbWteTWVdhxlsLZV7 -NKiUFzkwx1W0PvkwDBNZz8Y5rtAl01nPejmurAcITUQ9oY6PU/1Qxlv1qlGckYV85Pat6Bzfvtjc -xevAS+Nq+RWg4VPlEWf3lVsf5RHlyTiKzMaDXbsi3zH7SZKEd3/9LEYqyYezubfO1/aj2FUlrcOW -Lry3NfLhfNpJeJv9V5qUymRZGh7h18r9o52uxLPvUysJ70MTKYzFUV5FNcdKVJydpiZSz80gPNGq -w+YTkPKZXAKBH+OUCKk0NW3rSZwLdQSjsixHn/f6fa6G1OZGBJbXnJOk4fXluX9i8tYuHzWQ0k53 -7L74Jfhg5RlxPR2kFRetjbTy5OyoIcV135JVSWqlHOmzXh3B2qs20lKpWZZEdgFaF3of5D+xSZh7 -/1VEOvsa7aIFQrOdOL+S+PKncyYgBtLLXUnYJmHM7Zhc6eQPa1hvj3TzLOj4ifmNzmTYJBA17sOn -QZIqZsaBkyb2ZoB9JU9sMvSQaKckKUOrNLuEOFm7UwUzqU3GiU3bU1VmwQ5dg8osZj1JRf3QKs2p -U1RmAQQvVkLQ9LLuZDdPHpGVZhChyVDJZo6fZIdeVsfHe61R3p3lKosaXVJEacnXi2miW4rSsrn1 -OqXtJ7bWJZCW2nFabH8UsbEycVX6yPilh9clZc2Uw0wJgH1j4uprAx9st3SqyxvbIbu5Gw5NZCPp -upfNnvJ0S8fcRCvkJCqujDso2U39yNrSvdbd0oGeZektmigL8NhLaNXuitPMFzOyWpR3xekYQOr+ -MWnQiMoRa79sqd6BtoQpn8xG7pflEubQU28m4U5rHeMTK+PydZKeyf38xi47XI9P06sSWysCCGbJ -jXV9RKP2k+eqpX04aC2RTFHP4oiybPqZTJZyrFKW7jkQdUmW/zKq6PmODbVxSZdEofrsabVo1VpM -BZy5TKRyiu+50kkFNCppbDB/wsn7qGKcqGOaGWR1jVWrzFgAZlRFxyPPrtUBJttVjqOYYS6P+UFK -Ty6PpJhhPR1LFKvHPjSAKdKF1bRDlmIHZgGazQE0fQ+JVoKYqRxAneh0E1mAZnMAlf5kK1mAZnMA -xTccWs8CNJsDiL3WB2cBSlhFx8KUx8FaywI0mwOIKHZ4FqBAT325Ic2xspoFaDYHkLeRD8oC1OiS -IgdQfF7J9Ec5quOL8pmvyHZMUT7RWP7FonwKr8K/UpTPqCLbaYryMTkj+grK8UX5bG4VrfDkRfmU -9ZH/jaJ82vWRT1mUz1T9ymOK8om9CqhTtGanWBIZpQZrV/U7/m6o21PcDWWyrp+pu6GOrusnGtoJ -7obSqutnLU7p0Lp++lX9DrobSqWun75XSN0St17XT535dO+GOqCunzEnn6Kun35kCO+5OrKun1Em -14kcurpV/WxuSw5dzbp++kOT+S4Orusn6Yiiqt8BFUBU6/rpD0gtQvWQun6q6Yh6t5qbJ4zpTFnV -u6APqOunf/MXfyZ+ZF0/3Y2ugHexE9T103cLW7qBSqeun76pqxoFfUBdP7U0SWHpHVeP7wQ575bq -+ulDQX7+U9T10z9QsZmGc0ziuzwj9dC6fiqqpqiqn7g6A3FEXT/ZMiSkVf0kd3ZZTk8h+Lp+hnmv -J6nrp1/Vj+fkI+v66QdcizJSj6rrJ+RvqfGi7J6rg+v66RMQa7AnqOuns9a2s+iJ6g== - - - 8fn1oZiux2dQTs50Pb6j6vrxUFSXj9VsDkVdP528B8No27HVun76mjy68eAUdf209vBX5UniYflb -JtR57iTRaBka1fXTP2+WRhEcXtdPSm25tXhoPT5rQRra9fhOsHz4qn7H1+Mzk8RkdHuDMlbDWik+ -eUbqcXX9JI5tRVU/JmPo+Lp+fKqUXl3Ro+v66as5Gjxmua6fflW/o29tYuv6HenrM1nXz0Te6wnq -+ulX9bNcj++gLFyZtFTW9Ts8GV5U1U+E5ai6fkpXsriqn9YtZ1br+umHd8l2sYPr+ukHOsl8SgfX -9VOZF1FVP/174czX9TvcbymlmPWcJw278oi6foLgUqvqd3D0oKyuny5HiCqAHFfXT18xZKzX4+v6 -6SfEsjvy0XX9pIOUV/VT6GOmb7KS1vXTVoIYHcbgJiuTdf1M6TBH1/UTz6TyAEcnu1ZjfarX9dPf -HHSzOE+WEMvs+xGV7aGjp6M9NNUjPuT3Sk2ZGxVleyU81Xbt6gfey9IWJdzE8ZhwepO5Wonz4Bnf -FIvKK9khw0uBMETkYUzz9LyXWKL1Lcp9o7ZTO2wrt/bA+72LiLRmCaYRyqeyu+4yN2HCu7BHhu+r -WHQzvS1n5p+pp6bfG/rzefLrPFGd3Oec632etn/0R1H49JV1x5MX1fO7h/VzfD1rv9vciXg4Nkze -lVvhWnhjj9crsa/886x5PXq5o9+mjfF9fP3qHX+73nK+WPHX0XiuzdLzy9ZyfO1drHuJtXuTXdD3 -9rf7a48r6q3Q7u/3mxvffup8jy0/xml27ePczkyz8fJqDwe6WTs1Wb8GLqOeLFHO1/JE+Xt4S1To -8+fN5ivl3WyTbzdbZ5cebOOD90c+07IRuIqE3sLResrBpb39RjbbjyUqNpdyMrnVShkiyS+96NR7 -qdzwaYUMar4EJKonuf8i3f5ctn6rRixMDBju7hzNS9Rl1xwrzmj09j3jR+drp5FxLTaR8jkVm+yd -85F9hDJJb7nkUPs+uIrdo3i1uwXOSbTnyo2Gm3CNR9jef1xKVfaVbPnA0B4LoqQ5wd8qGhqINTU6 -ZGh3YW9zFzvlcQsX0Cx8Vp5b9H1h5MhGdpe32ch2dFFOOWePpbdstAtkW2Qq89fWR65K2wcA53XN -gWXKZ3rJwCyBUhnb3exF3b7Bo8r9LREn52pvb71A6bVVRZ9gwI/zMEraDTJmfSbe3mDLiYjsvCga -obdjJHEkHvZwn0gv9h0DRRIL+Jrw46xfEDg3K/h6FcQSxumBXex9Aw8KYe6H5Ui5RN0lAWyVCBSD -7n3ZW725IYOe6V9pOFuniEgm4cMdRZ37JP0F8qLw04+Q8OIqIHrRdxWubG7uVSEkvKLyneY19+KG -x1cT4wu5bqYcYe59IDKWM7JSd/T5ZwGhsc1NVrrhIf8qJIJTWaUJ9CzC6kfxewJlGf2RVbpOoa8U -A3vQdfOwnwJMk8GKRBr6U0jkg3VRnowXhVs9hZlGQ7qA4DwRKDhsQw6rD/grC3bYeSfZuWqXA5G7 -l1kU3jaC+C3lo9MjDmkjzGEhfK4kQc1f3KVgygfcQby6xPb+l5c9lmOYQeE/Yl0+ADHCMLsKPGnc -uHmIhAgiGXFuLwPNiw2dacbuc4nPkRetujzl67zYMasgirXfKX7iv6Kuy8uvcs/3XqN8+9GMG/pb -UJgwqli9Qjz9FmZIVOzckGgjd1HF4UOc/TRvUuyn/XuX1S2pkq/fYz9RkzgCEWdA9DpZBLETRvka -S6o3rxPMr3v7Zxb2l6/Fc1uHEvXm62L0i19ginVi/KociMby9WYvoJ3mAoUpPOfn4Yk/9zj8rhdr -N/YXQZDwhzkF3jlwLvI5CCeJ+ah7fzPm+vMZwcOInlPNGO5t9PziPc5+KvZ/+HZRtt3rX07em4dC -47NcnDuGuefGh8fmLg1C2Te0WV/ieDZ27e9WNLMWpaqD9BD4XCI3ebGmlJvcLoYkp0xupj8flt7S -W/7uNu+bb9AlBXQ1XyLCDaXclJcd9uCBg1hL4itqffwZH4h/dhitWYCZ1XyruyUiM0c48uN4PI+6 -Un87gvCGt6wcA2mJA8GxvxW+xnw4zZksfWTR13SAhJ0jgwQhspG5if+A37wikVINY70Ohd6EsScC -CSHkaahGNHxKVUJl9tGLmhfFvq5RngWx+OImtOZnZEiw4B7wz4LssyaJeLoGvJF4rRa+ZrmRRKrW -CSI+qKGJqJFiaZhf01hPnjwg2QcI2ku8taChf+TQM5JTz+oJlhKVcgg3AUvueQ1f6xEONpKlqDcg -SwVhzUg+GAuI1JBpVmI0PMUJA+tdkReoxQWtryK/rJ8fMxoxdsQjglqJn6FbC56IkXtRhOabgFjN -wSAur19EAG4+gmEpgGmm2fMzcX3PO6RgNiUXSdS36JkTniX3jJZ53qFuRao2o3ZdPpR4AE9KAHsG -AIyFAVE9r4q1XuD5ALoRAc8BKOL3FEpvhY0pWA2gT2H+WYR/BvMSfFkj/WDDMDuwfUe0i50Luheq -mf3FqVhXFKddgVI2cD1/gMIQq8hrRrMbBhoQc91Eyi7Ujka1yO3MTRRtrGeydbvnzXuxDQJbJzsv -eV8twN1tUf0MO36bMIJAGZCGQ3hZKy+9YDN8OYpFEw8zVuul9qSg8OJi4chscHC9Ed0B4heR4H0T -HYiuIOFJ4Ct0Rl2cYYeJEA5JiICT6xgidMVEoCZPmAjoRUdMAlnpcljxAgmEeuJSIvQv7wUiRN/n -ZFJUzOpzOwiLkbKK/6cmCeR1q8MC97fsy0iJIcIm3343xwf4an7M2Hu7QAKb2x7bvp/zRGjp8AG6 -sJSj4ocaK2kCEOKU2it9bjTiReQl1uoDWi9mhtHbHDgMzkOC3RHHDWOqOhvCXDCrUm8Yjx+r43j6 -sbfmpaUMhDlKAIjxVn8YAMDvwpzMgbgurJcSEEu7cR90pdPGgQFgirX/BBBE9a49FLdsf/D82xZN -PFH+rEp9Lo9/R/MYvg78OB4b744BAQDm9qN57HVxJI+1l1o8ZhrEYGPMIB0JjymGMT2SlI+zvcBj -h4Fo90ws1xbn7VEHMdCWfeb6MBaRkqGY1dloT41XvLgPMBZFL2ZHzkZ7sZeRkqOY+WFsDNaGWh8k -uQmZ9t5xHGN3nE7jHZnafggg7J7X6YsYxGBw6B7A78iD8dqIEgZ9mGqsT+iDSFrqUWIw2x4rLQeL -nYmdSGcfGqz3+n0wlpaDvV38deh0SL6eOzlPZ5WxIdGxXErk9va++2Mw+8HeqGUPrld1e/Cu9cAo -gfAbwVPWQhYfLTLNcDzFeJdNYr2U9+F0RdZk3/X3wXhAPFftOJP3iqzuXhDZKiHOW/mxRV95B1zV -w3/yMobdeDtD2niVsXfRwX8QW93s10I4zJjbXEwvsrB5czx6/brKc2ZvzMs7E31i52Vqxzv3agHx -i3qAdxvWQhKPYrCb4F0wNQHfZ9R1Mclx+B5IgTCsi6Jy5Reeib2jlUJQ9ELiHa3chJFzyA+0+wgw -tvbn9hd4p/JM4q/R66Ydvj5mBdg91m3xWMbU9oO9MM5jswCd0yAroZ4Erf1hg9bL40ME+TaCgGDt -gq9NDNbPuEQij+9R3jMZCGScl070NgAIwqC0tOuC6/aLw/IFNKY7oWKkf3meniw8TZu7fFmK/Yrc -64zzvdJ6Eh+/c2fw/GlRCvq4KKhBVIPHxCkZQORuusQQfbfJp1SyUs56xo3izejKzlrV7RbJsUpD -7PDzzXuwV7IeonY/xg+9D1h2KXbCBg/YJRJk3euDZoR18g5aBDmo3/jg0zvJ+qMGXSqTuqFgrgb9 -KPdpFGM88EF2amfPGGIIH5HD1xbnlJu9E9ynrsBtA8pzXc+wvZmNoqIXXXu0x/ol79ZufiyzPxpb -bdF8Mpq8GHd934UpXX7Iz5POpJqnhRmQ8IeJ2BZcNbtWmEc6xBF3iFl2XYKskFkvfOqT3KeR4AIe -sk6k3W9M0Zv47rXs92UuEq8hx135686dYpyh571tgritBOJ47X/S7FpsEU5spOr7B617B3mKWfAP -WvcOqt3XZ+QftO4dRBSz6h+07h1kONmaf1DsHcz9b8aWJJPRM/wn8ryfjzcPm5/Jz+IsaLuwRXI3 -JNlcjJblzXjcGP/Prrgc7v/Gi91Z+iySeync3CTjxfFwORqf4WCm+FeCFxshlltZ/hYfaUtcjNhZ -ni9+pyqzqvP5ql/8JtoZ0bJgtJRVY20PTn+rsKEGhmG8q77bg1T5xe6tboPoa5vZ5RkiqR6sYqnk -dxbHm/y+FLirv8lOCbAzJvXVqMD2UHrLj5+zke3kMlLNdWrFTvn1JRvZEUvOIYjOMyXRA6JTb5VD -clBkdud23+V9zB6KeF7RYXkRxuIqJiP2oC+bRU9v7YEnxz0a3z16cW0P5aIjpDVU7f61E9Sy/jop -FhXnVIBdcsJWV+71uOl+XGIxa2POj8ngZJLBxwasvETLD59kcMsvgr+ikEYv++l3jJUDH6sNeNao -hEw1wH5Ne0OMIsM4ndENMSyI72Z6x63kG0I4fRTLcQtHmcJBps2teZQpvDhaTWCOgbti3P+CmoDD -8lhF4d9TE2xu/W39NGoC49o2DfFANQEUHV5R+PfUBKTocIrCv6cmwFh4ReHfUxNE62X476kJNreg -KMjVBP2IEDYKsZ7W2hxY8e//LO+RKTX9BVPqtVsCofjWsvvuO15Wbu7Tj0ikVkGWXjfsvp95xh5a -PH0gWZpC+4JLbl4xE3bVZkQdLJqcFy844VDzZcU26q9DXOBHzCsEfvCxGh7G+gNpGWClJTphEUlL -div3UJ6s/RNPO5KWhXAQ3z5Nfe4vbyI/rV2YUTx+gukADtsCOVa6VUs6B7vrviabffSiCVgSG0G0 -MnLsk10CMrmKo1FApKKeedFxxiw/dyzKUuOLEHQYsbFXSfsQb9xhZQQroEnmNJ+sNL1JXothVaLK -JIYodh9mNRJXNlK8vVwSAOeBYISnSGJXmhSeCPgTEGX18GGswkkkCHNh98WMqEjQ4M//ZSVVmbC0 -UjcuOxwUwvKY88WQ+HxxmKzJzhft9p2X959tHxXnizF/JRyr5rjjtqslV7pJchAauhOOgihvqh2V -HITSTrs77ypyIIbnipPUfEQEgCy3KiQ+8GUDGthlD5yOVfbIT6ZZwsoBYrQM5nPu2euae9beRH4e -FgEh0AKznETdZ10rUrejWZcfFmFoQOy5J3u9vj/75u9zR5BYj2ZP32xu+SEkvhX98CNIn9rpG3IJ -mT5/I4921c2SK44I2aiICPhUmCVCLCIQAfVmJjqCxDfpaZGAc6Fep2cLjgh+2RFk6Mij6KudcDxv -3u0q4oPr9OPOxFE0G2KodhjNJhYzVMTnx2qspHOazaZEAgCYfZPcqACBi7qZ6wMTmqMEgQtSHTMM -HMDPLSnRkbaFYTTTEUuBAcpVGUzt/MfwNDKpAzIALMXMUgJZ4CGjYSiP9sVJMmRwVQ== - - - IFSHYZKUKISSxAC2jko1H+BLedjcKOBhLWoJZr+PbVn+JQMqRT9YPu/3PEfyGCgo3uN4rB4LCwA0 -eUwXRDdLHMtjnqn3OB4jFj4NHjMNoh4IGjKIGAAehJTHuonwMbMB9vxVRA0A8JhZEJW6w3i5qgNg -w1iRwmda9qn3oRtWJyXqA76U3HA2QME0XPF6fUBBzKv0cbOBtFp9UuL9RW8Y1VDZ2tpQ9IGuk0gb -P2JtVK+fKYM+bDIRUrQjV2O7cPNSBGLQdR+3BwwmgQC3I+v2QqcPK1KbqWR9YNe+vBdDVyJ0FEcM -Q1fh44LMUIC76hLX7AMvLXHAZ5z0YiVRqD+G0SdD9mGseB3otYr7fqVe+LxNOVmXQTzLeZIYF//t -nzROnUmdsLnVkidOnTqBsCiTJyynTvDuUPVjSTwvpg4m5ceSoherwoR/IfPpIwfqPfIqiJ42vfyx -wX1Q/GIS43MSkLUMVhKSK0zIPBIPiJPxOcASr1T09ckvOTqFtYNo+8Sa3sDEadbaCN7h8/E84kvE -Sk8RNoni+gaR7YkFO3xqYrBRkZex2tuwB8y+UIzRxhsh8cHddfbCchC+4hCGt+IpX7V8yVhJJ4P4 -VL8Szhriu0fXuPLZSU5s7tzL3vVT6owe0clRgxT4l/rcd7OsT6LdjfKuyJg4YeI6wbPKW4jNmngq -ILnyFuHY/o3AAQ2fyOR8Iznv0hs+JUCnCW9R/lOMAVG6+KPha4eF2Bviie/wx/gdgv9Eimcf3SnO -5yR0ouJciuLMxXkZf+PcWDq0ZpZKQCtHxcZecCLkq4izVD7DAtLoue8BEfUT/rTfkPfhk+Q/UeJ2 -d5MYehYTegNrn+vPU/nrtV0oBpK+crl095rknJt/cWI8SNOIQ8O8n6LDZEH+/76+/2d9fcv/zdgu -YDA3JNkrLUbiM0eb2w1PXsa7/Qo1iPfy48nPot7/Z7yxkWfMfwT8h/4mUmcklTyj4nH4EkdP6wOb -F7c9I31nddhdepHcZlf8Ge5+lov+5p+zNHrUuqs3b4pn6TOmbQ/aXpx5oTdED1rDKx866OxBD3s2 -4iwH/7f+a9vb/HvoQRG+PdiIcCpGx+noGRGOp8gY6kA4SseiSfSBpIlogkK9DEdjKQI+hWM0lYjF -z1p9G8H2H2D+A19u4cMvPPrvGUmc3Z29fxJnI4Tv2ZYAFEQsehYiwyRJwVD/bGCYRUkqLjwiwsl4 -KpqAJ7EwlaSoqOhJMkymUH+GNuEZSYVJIho/EwDFw1QCPgjI2AdDG0nCzwhaeAT/EhQpgsI/EFDx -j7j+CFDYLiuGNbR9w4CLtmQ4RqToBAYfo+JJGC+Cm6Ri+BFNJfGPSYKk8YMERSXgQTwZTSWFBwUb -ekQQSWkb+YNEnBK+D+E3FJ5N/hEdTiVhNlnMcfieSKSibN8S6Cc0AAEi4kfwC9QkRhMp1FkShpiI -4gfxJIUf0NEk8yOhTTRKkmcCFDJMxMmkgAhNWjyOf5NKJqkkfkTTwE0JNB0xGj+I04mYiAjsAzSg -FIFRs08QJWkqxQCJp6gzRO0EJUGUhJGSREroSxJoEY+nhN6KH7AjEj/CoxagsHRRzCuacMAaJYDO -ITCPSRIWyx96RKYQY8D4knGYZHhAxJk2cSoKREmFk0ka2sKDBJkCXENbCk0XTaNHKZKCLqbC8Rjq -TjJMJKME+h6N0XQSPaCoJMH8hqRTQAJ4FKURH6fCBJGCSYUHcSKaQuNM0og2MBb0QDxM+JCCf+EN -EYvh7ymaxD+JE/EkdASgx2NR/JMYmUzF0ZMoheYYoYsl8AMgOHRa9CAZp0E8FGz8I27wdZj/ZAqR -TfIoQcbZ6eUf0cwEAyz4PX6QjMbxg0SUjiJ2pBPwH3oAXBSPiR/EEsD+mNf4RxSmK2DiljiQjEyh -B3GWVolkAgiOfpSMJpP4UQxzKnBsPEYKJE+AuCABPpoUTF+84NBKwFOZpEnUJkaSJJ79eApNGPoX -SIsexKKxOLNKE3QqLuIQmHQqRWMoZIxEBCUSCdRb4CoiHmX4kyITqL/QS/RrRPQoScTRA5DIJF4J -0E38gMZiDU9dKkHgH8VSTJt4FPUSHkTjSbSc4jGCiKHvJKYy+g3bJA7rAAktAJLALBMHlqFSCWG6 -40BlgvkNyJJoDD2JJ6L4NwTMGo0exDC5YcgEkEF4gKhAw+BS4jaxJGxBGAoBMwAPovF4LIEf4FWG -6Q1rkcEUj1HClMB3LClgzhIkWifQOdi8JPMKj5JoBni2gxFFQUwh6ZVK0DQzxFSSEXCYleAJmlbE -ddEEQeLfpDCZaRhzMso8SMIaLsBvCDzjiJgkrHRg3jhMEg2MAtsIHY8DQ6JHsUQKrbhYGD2h8KNE -MoX2lhgs8iSNkGE2gO9kIp5AjMjOCdrvUEssTWMkYs4oLKsUJh5FAs3Q9yisXMRTiRhNCg9Ei597 -hIQKknUILhkn0QPUNwo9iBHRJKIeLE0qlsBDYBYKPIDZx6SJRtF+JHqQYqUp/wiRLQqY0AMSuom4 -lULzoxCcSJr6m7amLXXm9Z213mz1PKM3gRaFtZsQ2HLux/5k3Nj0f+agRU22/f+Mz/qLxXLX341X -8OZsshlvd8vN+Gw7Xf4XPYGfcM1BH3so2/4vKOG6zg== - - - diff --git a/docs/theme/mkdocs/img/universal/cloud-download-dashboard-icon.svg b/docs/theme/mkdocs/img/universal/cloud-download-dashboard-icon.svg deleted file mode 100644 index 031da70972..0000000000 --- a/docs/theme/mkdocs/img/universal/cloud-download-dashboard-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/img/universal/docker-logo-pin+@2x.png b/docs/theme/mkdocs/img/universal/docker-logo-pin+@2x.png deleted file mode 100644 index 2cadb5e590..0000000000 Binary files a/docs/theme/mkdocs/img/universal/docker-logo-pin+@2x.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/universal/docker-logo-pin.png b/docs/theme/mkdocs/img/universal/docker-logo-pin.png deleted file mode 100644 index 8c7ca8338d..0000000000 Binary files a/docs/theme/mkdocs/img/universal/docker-logo-pin.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/universal/official-repository-icon.png b/docs/theme/mkdocs/img/universal/official-repository-icon.png deleted file mode 100644 index ccafcee156..0000000000 Binary files a/docs/theme/mkdocs/img/universal/official-repository-icon.png and /dev/null differ diff --git a/docs/theme/mkdocs/img/universal/star-icon.svg b/docs/theme/mkdocs/img/universal/star-icon.svg deleted file mode 100644 index 8a22ad5d1d..0000000000 --- a/docs/theme/mkdocs/img/universal/star-icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/docs/theme/mkdocs/img/universal/trusted-icon.svg b/docs/theme/mkdocs/img/universal/trusted-icon.svg deleted file mode 100644 index 700f275f8b..0000000000 --- a/docs/theme/mkdocs/img/universal/trusted-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/theme/mkdocs/js/base.js b/docs/theme/mkdocs/js/base.js deleted file mode 100644 index b4775c837b..0000000000 --- a/docs/theme/mkdocs/js/base.js +++ /dev/null @@ -1,101 +0,0 @@ -$(document).ready(function () -{ - - prettyPrint(); - - // Resizing - resizeMenuDropdown(); - // checkToScrollTOC(); - $(window).resize(function() { - if(this.resizeTO) - { - clearTimeout(this.resizeTO); - } - this.resizeTO = setTimeout(function () - { - resizeMenuDropdown(); - // checkToScrollTOC(); - }, 500); - }); - - /* Follow TOC links (ScrollSpy) */ - $('body').scrollspy({ - target: '#toc_table', - }); - - /* Prevent disabled link clicks */ - $("li.disabled a").click(function () - { - event.preventDefault(); - }); - - // Submenu ensured drop-down functionality for desktops & mobiles - $('.dd_menu').on({ - click: function () - { - $(this).toggleClass('dd_on_hover'); - }, - mouseenter: function () - { - $(this).addClass('dd_on_hover'); - }, - mouseleave: function () - { - $(this).removeClass('dd_on_hover'); - }, - }); - - function getURLP(name) - { - return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20')) || null; - } - if (getURLP("q")) { - // Tipue Search activation - $('#tipue_search_input').tipuesearch({ - 'mode': 'json', - 'contentLocation': '/search_content.json.gz' - }); - } - -}); - -function resizeMenuDropdown () -{ - $('.dd_menu > .dd_submenu').css("max-height", ($('body').height() - 160) + 'px'); -} - -// https://github.com/bigspotteddog/ScrollToFixed -function checkToScrollTOC () -{ - if ( $(window).width() >= 768 ) - { - // If TOC is hidden, expand. - $('#toc_table > #toc_navigation').css("display", "block"); - // Then attach or detach fixed-scroll - if ( ($('#toc_table').height() + 100) >= $(window).height() ) - { - $('#toc_table').trigger('detach.ScrollToFixed'); - $('#toc_navigation > li.active').removeClass('active'); - } - else - { - $('#toc_table').scrollToFixed({ - marginTop: $('#nav_menu').height(), - limit: function () { return $('#footer').offset().top - 450; }, - zIndex: 1, - minWidth: 768, - removeOffsets: true, - }); - } - } -} - -function getCookie(cname) { - var name = cname + "="; - var ca = document.cookie.split(';'); - for(var i=0; ithis.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('

    '}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file diff --git a/docs/theme/mkdocs/js/dockerfile_tutorial.js b/docs/theme/mkdocs/js/dockerfile_tutorial.js deleted file mode 100755 index a17cc48d61..0000000000 --- a/docs/theme/mkdocs/js/dockerfile_tutorial.js +++ /dev/null @@ -1,74 +0,0 @@ -function clean_input(i) { - return i.replace(/^\s+|\s+$/g, ''); -} - -function clean_up(str){ - return clean_input(str).toUpperCase(); -} - -function dockerfile_log(level, item, errors) -{ - var logUrl = '/tutorial/api/dockerfile_event/'; - $.ajax({ - url: logUrl, - type: "POST", - cache:false, - data: { - 'errors': errors, - 'level': level, - 'item': item, - }, - }).done( function() { } ); -} - -function validate_email(email) -{ - var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return re.test(email); -} - -$(document).ready(function() { - - /* prepare to send the csrf-token on each ajax-request */ - var csrftoken = $.cookie('csrftoken'); - $.ajaxSetup({ - headers: { 'X-CSRFToken': csrftoken } - }); - - $("#send_email").click( function() - { - $('#email_invalid').hide(); - $('#email_already_registered').hide(); - $('#email_registered').hide(); - - email = $('#email').val(); - if (!validate_email(email)) - { - $('#email_invalid').show(); - return (false); - } - - var emailUrl = '/tutorial/api/subscribe/'; - - $.ajax({ - url: emailUrl, - type: "POST", - cache:false, - data: { - 'email': email, - 'from_level': $(this).data('level') - }, - }).done( function(data ) { - if (data == 1) // already registered - { - $('#email_already_registered').show(); - } - else if (data == 0) // registered ok - { - $('#email_registered').show(); - } - - } ); - return (true); - }); -}) diff --git a/docs/theme/mkdocs/js/dockerfile_tutorial_level.js b/docs/theme/mkdocs/js/dockerfile_tutorial_level.js deleted file mode 100644 index 22f13b6ef7..0000000000 --- a/docs/theme/mkdocs/js/dockerfile_tutorial_level.js +++ /dev/null @@ -1,176 +0,0 @@ -function check_form1 () -{ - $('#level1_error0').hide(); - $('#level1_error1').hide(); - $('#level1_error2').hide(); - $('#level1_error3').hide(); - - $('#no_good').hide(); - $('#some_good').hide(); - $('#all_good').hide(); - - var a = clean_input($('#level1_q0').val()).toUpperCase(); - var b = clean_input($('#level1_q1').val()).toUpperCase(); - var c = clean_input($('#level1_q2').val()).toUpperCase(); - var d = clean_input($('#level1_q3').val()); - var points = 0; - - if (a == 'FROM'){ - points = points + 1; - } else { - $('#level1_error0').show(); - } - if (b == 'RUN') { - points = points + 1; - } else { - $('#level1_error1').show(); - } - if (c == 'MAINTAINER') { - points = points + 1; - } else { - $('#level1_error2').show(); - } - if (d == '#') { - points = points + 1; - } else { - $('#level1_error3').show(); - } - if (points == 4) {// all good - $('#all_good').show(); - } else if (points == 0) { // nothing good - $('#no_good').show(); - } else {// some good some bad - $('#some_good').show(); - } - return (4 - points); -} - -function check_form2 () -{ - $('.level_questions .alert').hide(); - - var answers = {}; - answers[0] = ['FROM']; - answers[1] = ['ENTRYPOINT', 'CMD']; - answers[2] = ['#']; - answers[3] = ['USER']; - answers[4] = ['RUN']; - answers[5] = ['EXPOSE']; - answers[6] = ['MAINTAINER']; - answers[7] = ['ENTRYPOINT', 'CMD']; - - var points = 0; - - $.each($(".level"), function(num, input){ - var cleaned = clean_up(input.value); - if ($.inArray(cleaned, answers[num]) == -1) { - $( $(".level_error")[num]).show() - $(input).addClass("error_input"); - } else { - $( $(".level_error")[num]).hide() - $(input).removeClass("error_input"); - points += 1; - } - }) - if (points == 8) // all good - { - $('#all_good').show(); - } - else if (points == 0) // nothing good - { - $('#no_good').show(); - } - else // some good some bad - { - $('#some_good').show(); - } - return (8- points); -} - -function check_fill(answers) -{ - $('#dockerfile_ok').hide(); - $('#dockerfile_ko').hide(); - - var errors = 0; - - $.each($(".l_fill"), function(num, input){ - var cleaned = clean_up(input.value); - var id = input.id; - if (answers[id] != cleaned) { - $(input).addClass("error_input"); - errors += 1; - } else { - $(input).removeClass("error_input"); - } - }); - - if (errors != 0) - { - $('#dockerfile_ko').show(); - } - else - { - $('#dockerfile_ok').show(); - } - return (errors); -} - -$(document).ready(function() { - - $("#check_level1_questions").click( function(){ - errors = check_form1(); - dockerfile_log(1, '1_questions', errors); - } - ); - - $("#check_level1_fill").click( function(){ - var answers = {}; - answers['from'] = 'FROM'; - answers['ubuntu'] = 'UNTU'; - answers['maintainer'] = 'MAINTAINER'; - answers['eric'] = 'RIC'; - answers['bardin'] = 'ARDIN'; - answers['run0'] = 'RUN'; - answers['run1'] = 'RUN'; - answers['run2'] = 'RUN'; - answers['memcached'] = 'MEMCACHED'; - - var errors = check_fill(answers); - dockerfile_log(1, '2_fill', errors); - }); - - $("#check_level2_questions").click( function(){ - errors = check_form2(); - dockerfile_log(2, '1_questions', errors); - } - ); - - $("#check_level2_fill").click( function(){ - var answers = {}; - answers['from'] = "FROM"; - answers['ubuntu'] = "UNTU"; - answers['maintainer'] = "AINER"; - answers['roberto'] = "BERTO"; - answers['hashioka'] = "SHIOKA"; - answers['run0'] = "RUN"; - answers['run1'] = "RUN"; - answers['run2'] = "RUN"; - answers['run3'] = "RUN"; - answers['run4'] = "RUN"; - answers['run5'] = "RUN"; - answers['run6'] = "RUN"; - answers['entrypoint'] = "ENTRYPOINT"; - answers['user'] = "USER"; - answers['expose'] = "EXPOSE"; - answers['gcc'] = "GCC"; - - var errors = check_fill(answers); - dockerfile_log(2, '2_fill', errors); - }); - - $(".btn.btn-primary.back").click( function(event){ - event.preventDefault(); - window.history.back(); - }) -}); diff --git a/docs/theme/mkdocs/js/jquery-1.10.2.min.js b/docs/theme/mkdocs/js/jquery-1.10.2.min.js deleted file mode 100644 index 29b3a2c7b4..0000000000 --- a/docs/theme/mkdocs/js/jquery-1.10.2.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/ -(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="
    ","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t -}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); -u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("